Oracle 读写-只读表空间回复详解

(一) 使用备份时的控制文件进行恢复,如下图,即使用备份位置的控制文件进行恢复

1) 创建测试表空间ts1及相关测试表(表空间为ts1)

[email protected]>create tablespace ts1 datafile ‘/u01/app/oracle/oradata/ORCL/ts1.dbf‘ size 10m;

Tablespace created.

[email protected]>create table scott.t(x int) tablespace ts1;

Table created.

[email protected]>insert into scott.t select rownum from dual connect by rownum<=10;

10 rows created.

[email protected]>commit;

Commit complete.

[email protected]>

2) 通过RMAN备份ts1表空间和控制文件

RMAN> backup tablespace ts1 include current controlfile;

Starting backup at 17-JAN-13

using target database control file instead of recovery catalog

allocated channel: ORA_DISK_1

channel ORA_DISK_1: sid=141 devtype=DISK

channel ORA_DISK_1: starting full datafile backupset

channel ORA_DISK_1: specifying datafile(s) in backupset

input datafile fno=00006 name=/u01/app/oracle/oradata/ORCL/ts1.dbf

channel ORA_DISK_1: starting piece 1 at 17-JAN-13

channel ORA_DISK_1: finished piece 1 at 17-JAN-13

piece handle=/u01/app/oracle/flash_recovery_area/ORCL/backupset/2013_01_17/o1_mf_nnndf_TAG20130117T101646_8hgqrg9h_.bkp tag=TAG20130117T101646 comment=NONE

channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01

channel ORA_DISK_1: starting full datafile backupset

channel ORA_DISK_1: specifying datafile(s) in backupset

including current control file in backupset

channel ORA_DISK_1: starting piece 1 at 17-JAN-13

channel ORA_DISK_1: finished piece 1 at 17-JAN-13

piece handle=/u01/app/oracle/flash_recovery_area/ORCL/backupset/2013_01_17/o1_mf_ncnnf_TAG20130117T101646_8hgqrhvd_.bkp tag=TAG20130117T101646 comment=NONE

channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01

Finished backup at 17-JAN-13

RMAN>

3) 删除t表部分记录

[email protected]>delete scott.t where x>=6;

5 rows deleted.

[email protected]>commit;

Commit complete.

[email protected]>

4) 切换几次日志,让上面的动作归档(对于测试来说,意义不是特别的大)

[email protected]>alter system switch logfile;

System altered.

[email protected]>/

System altered.

[email protected]>/

System altered.

[email protected]>/

System altered.

[email protected]>

5) 在users表空间上创建t1表

[email protected]>create table scott.t1(x int) tablespace users;

Table created.

[email protected]>insert into scott.t1 select rownum from dual connect by rownum<=2;

2 rows created.

[email protected]>commit;

Commit complete.

[email protected]>

6) 将表ts1修改为只读模式

[email protected]>alter tablespace ts1 read only;

Tablespace altered.

[email protected]>select tablespace_name,status from dba_tablespaces where tablespace_name=‘TS1‘;

TABLESPACE_NAME              STATUS

------------------------- ---------

TS1                            READ ONLY

[email protected]>select file_id,file_name,status,online_status from dba_data_files where tablespace_name=‘TS1‘;

FILE_ID FILE_NAME                                            STATUS     ONLINE_

---------- --------------------------------------------- --------- -------

6 /u01/app/oracle/oradata/ORCL/ts1.dbf            AVAILABLE ONLINE

[email protected]>

7) 删除ts1表空间数据文件和所有控制文件

[email protected]>!rm /u01/app/oracle/oradata/ORCL/ts1.dbf

[email protected]>!rm /u01/app/oracle/oradata/ORCL/*.ctl

8) 重启数据库到nomount状态

[email protected]>shutdown abort;

ORACLE instance shut down.

[email protected]>

[email protected]>startup nomount;

ORACLE instance started.

Total System Global Area  285212672 bytes

Fixed Size                  1218992 bytes

Variable Size              96470608 bytes

Database Buffers          184549376 bytes

Redo Buffers                2973696 bytes

[email protected]>

9) 通过RMAN备份的控制文件完成控制文件的恢复,恢复完成,数据库修改为mount

RMAN> restore controlfile from ‘/u01/app/oracle/flash_recovery_area/ORCL/backupset/2013_01_17/o1_mf_ncnnf_TAG20130117T101646_8hgqrhvd_.bkp‘;

Starting restore at 17-JAN-13

using target database control file instead of recovery catalog

allocated channel: ORA_DISK_1

channel ORA_DISK_1: sid=157 devtype=DISK

channel ORA_DISK_1: restoring control file

channel ORA_DISK_1: restore complete, elapsed time: 00:00:05

output filename=/u01/app/oracle/oradata/ORCL/control01.ctl

output filename=/u01/app/oracle/oradata/ORCL/control02.ctl

output filename=/u01/app/oracle/oradata/ORCL/control03.ctl

Finished restore at 17-JAN-13

RMAN> alter database mount;

database mounted

released channel: ORA_DISK_1

RMAN>

10) 恢复ts1表空间

RMAN> restore tablespace ts1;

Starting restore at 17-JAN-13

Starting implicit crosscheck backup at 17-JAN-13

allocated channel: ORA_DISK_1

channel ORA_DISK_1: sid=157 devtype=DISK

Crosschecked 2 objects

Finished implicit crosscheck backup at 17-JAN-13

Starting implicit crosscheck copy at 17-JAN-13

using channel ORA_DISK_1

Finished implicit crosscheck copy at 17-JAN-13

searching for all files in the recovery area

cataloging files...

cataloging done

List of Cataloged Files

=======================

File Name: /u01/app/oracle/flash_recovery_area/ORCL/backupset/2013_01_17/o1_mf_ncnnf_TAG20130117T101646_8hgqrhvd_.bkp

using channel ORA_DISK_1

channel ORA_DISK_1: starting datafile backupset restore

channel ORA_DISK_1: specifying datafile(s) to restore from backup set

restoring datafile 00006 to /u01/app/oracle/oradata/ORCL/ts1.dbf

channel ORA_DISK_1: reading from backup piece /u01/app/oracle/flash_recovery_area/ORCL/backupset/2013_01_17/o1_mf_nnndf_TAG20130117T101646_8hgqrg9h_.bkp

channel ORA_DISK_1: restored backup piece 1

piece handle=/u01/app/oracle/flash_recovery_area/ORCL/backupset/2013_01_17/o1_mf_nnndf_TAG20130117T101646_8hgqrg9h_.bkp tag=TAG20130117T101646

channel ORA_DISK_1: restore complete, elapsed time: 00:00:01

Finished restore at 17-JAN-13

RMAN>

11) 表空间恢复完毕,尝试open数据库

--当然,我们知道一定是无法open数据库的,因为控制文件恢复的是老版本的

[email protected]>!ls /u01/app/oracle/oradata/ORCL/ts1.dbf

/u01/app/oracle/oradata/ORCL/ts1.dbf

[email protected]>alter database open;

alter database open

*

ERROR at line 1:

ORA-01589: must use RESETLOGS or NORESETLOGS option for database open

--提示resetlogs方式打开

[email protected]>alter database open resetlogs;

alter database open resetlogs

*

ERROR at line 1:

ORA-01194: file 1 needs more recovery to be consistent

ORA-01110: data file 1: ‘/u01/app/oracle/oradata/ORCL/system01.dbf‘

--提示需要恢复1号数据文件

[email protected]>recover datafile 1;

ORA-00283: recovery session canceled due to errors

ORA-01610: recovery using the BACKUP CONTROLFILE option must be done

--提示using BACKUP CONTROLFILE方式完成恢复

[email protected]>

12) using backup controlfile恢复数据库

注:如果要恢复到控制文件SCN以后的时间。这时候,就需要用using backup controlfile. 恢复就不会受“当前controlfile所纪录的SCN”的限制。

这时候的限制就来自于你的语句(until time , until scn),或者可用的archive log(until cancel)

[email protected]>recover database using backup controlfile until cancel;

ORA-00279: change 493760 generated at 01/16/2013 17:10:46 needed for thread 1

ORA-00289: suggestion :

/u01/app/oracle/flash_recovery_area/ORCL/archivelog/2013_01_16/o1_mf_1_7_%u_.arc

ORA-00280: change 493760 for thread 1 is in sequence #7

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}

--此处回车则是利用下一个归档日志文件进行恢复。不过在这里也可以输入CANCEL,表示恢复到此结束,不再使用后面的归档日志文件

……

--在恢复的过程中又出现了如下警告

ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below

ORA-01194: file 1 needs more recovery to be consistent

ORA-01110: data file 1: ‘/u01/app/oracle/oradata/ORCL/system01.dbf‘

[email protected]>

13) 尝试再次resetlogs打开数据库

[email protected]>alter database open resetlogs;

alter database open resetlogs

*

ERROR at line 1:

ORA-01194: file 1 needs more recovery to be consistent

ORA-01110: data file 1: ‘/u01/app/oracle/oradata/ORCL/system01.dbf‘

[email protected]>

14) 采用极端办法

注:此时只能采取极端手段:隐含参数_allow_resetlogs_corruption强制启动数据库,设置此参数之后,在数据库Open过程中,Oracle会跳过某些一致性检查,从而使数据库可能跳过不一致状态,Open打开:

--查看隐藏参数_allow_resetlogs_corruption,默认值为false

[email protected]>SELECT ksppstvl, ksppdesc

2    FROM x$ksppi x, x$ksppcv y

3   WHERE x.indx = y.indx

4    AND ksppinm = ‘_allow_resetlogs_corruption‘;

KSPPSTVL   KSPPDESC

---------- --------------------------------------------------

FALSE      allow resetlogs even if it will cause corruption

[email protected]>

--将隐藏参数设置为true

[email protected]>alter system set "_allow_resetlogs_corruption"=true scope=spfile;

System altered.

[email protected]>

--由于是静态参数,重启数据库使其生效

[email protected]>shutdown immediate;

ORA-01109: database not open

Database dismounted.

ORACLE instance shut down.

[email protected]>

--数据库启动到mount状态

[email protected]>startup mount;

ORACLE instance started.

Total System Global Area  285212672 bytes

Fixed Size                  1218992 bytes

Variable Size              83887696 bytes

Database Buffers          197132288 bytes

Redo Buffers                2973696 bytes

Database mounted.

[email protected]>

15) 再次尝试open数据库,提示RESETLOGS方式open

[email protected]>alter database open;

alter database open

*

ERROR at line 1:

ORA-01589: must use RESETLOGS or NORESETLOGS option for database open

[email protected]>

16) 数据库成功以resetlogs方式open

[email protected]>alter database open resetlogs;

Database altered.

[email protected]>

[email protected]>select count(*) from scott.t;

COUNT(*)

----------

5

[email protected]>select count(*) from scott.t1;

select count(*) from scott.t1

*

ERROR at line 1:

ORA-00942: table or view does not exist

[email protected]>

17) 恢复参数,重启数据库

[email protected]>alter system set "_allow_resetlogs_corruption"=false scope=spfile;

System altered.

[email protected]>startup force;

ORACLE instance started.

Total System Global Area  285212672 bytes

Fixed Size                  1218992 bytes

Variable Size              88082000 bytes

Database Buffers          192937984 bytes

Redo Buffers                2973696 bytes

Database mounted.

Database opened.

[email protected]>

5.1.1. 小结

如果在生产中使用了只读表空间,那么切记,在修改为只读以后,第一件事儿就是备份,这样会省去不必要的麻烦和损失。

时间: 2024-10-12 21:11:43

Oracle 读写-只读表空间回复详解的相关文章

Oracle create tablespace 创建表空间语法详解

CREATE [UNDO]  TABLESPACE tablespace_name          [DATAFILE datefile_spec1 [,datefile_spec2] ......   [{MININUM EXTENT integer [k|m]   |BLOCKSIZE integer [k]   |logging clause | FORCE LOGGING   |DEFAULT {data_segment_compression} storage_clause   |[

Oracle 10g创建表空间的完整步骤详解

本文我们主要介绍了Oracle 10g创建表空间的完整步骤,包括表空间的创建与删除.为应用创建用户以及权限的授予等操作,希望能够对您有所帮助. AD:WOT2014:用户标签系统与用户数据化运营培训专场 Oracle 10g数据库中,当在数据库中创建用户时,基于应用性能和管理方面的考虑,最好为不同的用户创建独立的表空间. 那么创建表空间的步骤是怎样实现的呢?本文我们主要就介绍了这一部分内容,接下来就让我们一起来了解一下这部分内容吧. 1.创建表空间 不论是Lnux环境,还是Wndows环境,都要

深入理解Oracle表(3):三大表连接方式详解之Nested loop join和 Sort merge join

深入理解Oracle表(3):三大表连接方式详解之Nested loop join和 Sort merge join 分类: Oracle 基础管理 Oracle SQL 开发2013-01-28 00:33 2536人阅读 评论(1) 收藏 举报 关系数据库技术的精髓就是通过关系表进行规范化的数据存储       并通过各种表连接技术和各种类型的索引技术来进行信息的检索和处理       这里Think愿意和大家一起来学习分享Oracle的三大表连接技术              在早期版本,

oracle用户与表空间操作

oracle系统用户sys,system , sysman, scott 使用system用户登录[username/password][@server][as sysdba|sysoper]eg: system/123456 @orcl as sysdba 查看当前登录用户:show user 查看数据字典中的用户select username from dba_users; 启用禁用scott账户:alter user scott account unlock;alter user scot

十四、oracle 数据库管理--管理表空间和数据文件

一.概念表空间是数据库的逻辑组成部分.从物理上讲,数据库数据存放在数据文件中:从逻辑上讲,数据库数据则是存放在表空间中,表空间由一个或多个数据文件组成. 二.数据库的逻辑结构oracle中逻辑结构包括表空间.段.区和块.说明一下数据库由表空间构成,而表空间又是由段构成,而段又是由区构成,而区又是由oracle块构成的这样的一种结构,可以提高数据库的效率. 三.表空间1.概念表空间用于从逻辑上组织数据库的数据.数据库逻辑上是由一个或是多个表空间组成的.通过表空间可以达到以下作用:1).控制数据库占

Oracle中用exp/imp命令参数详解【转】

Oracle中用exp/imp命令参数详解 [用 exp 数 据 导 出]:1  将数据库TEST完全导出,用户名system 密码manager 导出到D:\daochu.dmp中   exp system/[email protected]   rows=y  indexes=y compress=n buffer=65536   feedback=100000full=y  file=d:\daochu.dmp  log=d:\daochulog.txt   owner=(ECC_BIZ,

oracle 数据库管理--管理表空间和数据文件

一.概念表空间是数据库的逻辑组成部分.从物理上讲,数据库数据存放在数据文件中:从逻辑上讲,数据库数据则是存放在表空间中,表空间由一个或多个数据文件组成. 二.数据库的逻辑结构oracle中逻辑结构包括表空间.段.区和块.说明一下数据库由表空间构成,而表空间又是由段构成,而段又是由区构成,而区又是由oracle块构成的这样的一种结构,可以提高数据库的效率. 三.表空间1.概念表空间用于从逻辑上组织数据库的数据.数据库逻辑上是由一个或是多个表空间组成的.通过表空间可以达到以下作用:1).控制数据库占

【只读表空间--恢复-1】

1>只读 ---备份只读  故障 只读  还原有故障的数据文件 2>只读 ---备份只读  可写 故障  还原备份数据文件,重做recover 3>只读 ---备份可写  只读 故障  还原备份数据文件,recover 1> 进入rman,确保是否有备份的文件: [[email protected] ~]$ rman target / Recovery Manager: Release 10.2.0.5.0 - Production on Thu Nov 6 09:44:08 20

Oracle之外键(Foreign Key)用法详解(一)

Oracle外键(Foreign Key)用法详解(一) 1.目标 演示如何在Oracle数据库中使用外键 2.什么是外键? 1)在Oracle数据库中,外键是用来实现参照完整性的方法之一.打个形象的比喻,外键是指定义外键的表的列的值必须在另一个表中出现. 2)被参照的表称之为父表(parent table),创建外键的表称之为子表(child table).子表中的外键关联了父表中的主键. 3)外键可以在创建表时定义或者通过ALTER TABLE语句创建. 3.创建表时定义外键 语法: CRE