控制文件的恢复(三)

    在之前的控制文件恢复过程中使用‘recover database'命令恢复数据库时要求所有的归档日志都是可访问的,如果某个归档日志出现损坏和丢失,那整个的恢复步骤又不一样,下面的例子说明在备份完控制文件后,某个归档日志丢失且所有控制文件损坏是如何进行实例恢复(前提是数据库开启归档日志)。

    注:某个归档日志丢失后备份了控制文件,之后所有控制文件损坏的恢复步骤和之前的恢复步骤没有区别。

    DB:Oracle 11g 11.2.0.3.0 X86_64,OS RHEL 6.3 X86_64,未使用Recovery Catalog


1.1备份控制文件
RMAN> configure controlfile autobackup on;
using target database control file instead of recovery catalog
new RMAN configuration parameters:
CONFIGURE CONTROLFILE AUTOBACKUP ON;
new RMAN configuration parameters are successfully stored

RMAN> backup current controlfile;
Starting backup at 03-JAN-13
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=133 device type=DISK
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
including current control file in backup set
channel ORA_DISK_1: starting piece 1 at 03-JAN-13
channel ORA_DISK_1: finished piece 1 at 03-JAN-13
piece handle=/u01/app/oracle/fast_recovery_area/ORCL/backupset/2013_01_03/o1_mf_ncnnf_TAG20130103T163808_8gbjvnh7_.bkp tag=TAG20130103T163808 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:03
Finished backup at 03-JAN-13

Starting Control File and SPFILE Autobackup at 03-JAN-13
piece handle=/u01/app/oracle/fast_recovery_area/ORCL/autobackup/2013_01_03/o1_mf_s_803752695_8gbjvs9b_.bkp comment=NONE
Finished Control File and SPFILE Autobackup at 03-JAN-13

1.2查询v$log视图,找出'CURRENT'状态的redo日志
SYS@orcl>select group#,sequence#,status,members,archived from v$log;       ---当期redo日志是12号
    GROUP#  SEQUENCE# STATUS          MEMBERS ARC
---------- ---------- ---------------- ---------- ---
     1       10 INACTIVE            1 YES
     2       11 INACTIVE            1 YES
     3       12 CURRENT            1 NO

1.3创建scott schema下的test表,并查处完成建表的redo日志
SYS@orcl>create table scott.test as select * from scott.emp;
Table created.

SYS@orcl>select count(*) from scott.test;
  COUNT(*)
----------
    14

---查出当期redo日志仍然是12号,12号redo日志包含上面建表的重做信息,这个例子中每个日志组的成员只有一个,生产环境下要保证至少有2-3个组成员
SYS@orcl>select group#,sequence#,status,members,archived from v$log;
    GROUP#  SEQUENCE# STATUS          MEMBERS ARC
---------- ---------- ---------------- ---------- ---
     1       10 INACTIVE            1 YES
     2       11 INACTIVE            1 YES
     3       12 CURRENT            1 NO

1.4切换日志组,使得12号redo日志归档
SYS@orcl>alter system switch logfile;

System altered.


SYS@orcl>alter system switch logfile;
System altered.


SYS@orcl>alter system switch logfile;
System altered.


SYS@orcl>alter system switch logfile;
System altered.


---当前日志组是16号,12号日志组已经归档
SYS@orcl>select group#,sequence#,status,members,archived from v$log;
    GROUP#  SEQUENCE# STATUS          MEMBERS ARC
---------- ---------- ---------------- ---------- ---
     1       16 CURRENT            1 NO
     2       14 INACTIVE            1 YES
     3       15 ACTIVE            1 YES

1.5查出12号redo日志的归档文件并删除
SYS@orcl>select name,sequence#,first_time from v$archived_log  where sequence#=12 and to_char(first_time,'YYYY-MM-DD')='2013-01-03';
NAME
--------------------------------------------------------------------------------
 SEQUENCE# FIRST_TIM
---------- ---------
/u01/app/oracle/fast_recovery_area/ORCL/archivelog/2013_01_03/o1_mf_1_12_8gbjzkts_.arc
    12 03-JAN-13


[oracle@ora ~]$ rm /u01/app/oracle/fast_recovery_area/ORCL/archivelog/2013_01_03/o1_mf_1_12_8gbjzkts_.arc


1.6使所有的控制文件不可用

[oracle@ora ORCL]$  dd if=/dev/zero of=/u01/app/oracle/oradata/orcl/control01.ctl bs=512K count=10;
10+0 records in
10+0 records out
5242880 bytes (5.2 MB) copied, 0.00586479 s, 894 MB/s
[oracle@ora ORCL]$ dd if=/dev/zero of=/u01/app/oracle/fast_recovery_area/orcl/control02.ctl bs=512K count=10;
10+0 records in
10+0 records out
5242880 bytes (5.2 MB) copied, 0.00559785 s, 937 MB/s
[oracle@ora ORCL]$ dd if=/dev/zero of=/u01/app/oracle/oradata/orcl/control03.ctl bs=512K count=10;
10+0 records in
10+0 records out

1.7启动实例到nomount状态
SYS@orcl>startup force nomount;
ORACLE instance started.

Total System Global Area 1887350784 bytes
Fixed Size            2229464 bytes
Variable Size         1107299112 bytes
Database Buffers      771751936 bytes
Redo Buffers            6070272 bytes

1.8从1.1的自动备份里恢复控制文件
RMAN> restore controlfile from autobackup;

Starting restore at 03-JAN-13
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=10 device type=DISK

recovery area destination: /u01/app/oracle/fast_recovery_area
database name (or database unique name) used for search: ORCL
channel ORA_DISK_1: AUTOBACKUP /u01/app/oracle/fast_recovery_area/ORCL/autobackup/2013_01_03/o1_mf_s_803752695_8gbjvs9b_.bkp found in the recovery area
AUTOBACKUP search with format "%F" not attempted because DBID was not set
channel ORA_DISK_1: restoring control file from AUTOBACKUP /u01/app/oracle/fast_recovery_area/ORCL/autobackup/2013_01_03/o1_mf_s_803752695_8gbjvs9b_.bkp
channel ORA_DISK_1: control file restore from AUTOBACKUP complete
output file name=/u01/app/oracle/oradata/orcl/control01.ctl
output file name=/u01/app/oracle/fast_recovery_area/orcl/control02.ctl
output file name=/u01/app/oracle/oradata/orcl/control03.ctl
Finished restore at 03-JAN-13

1.9使实例到mount状态
RMAN> mount database;
database mounted
released channel: ORA_DISK_1

1.10执行'recover database'命令恢复数据库
RMAN> recover database;
Starting recover at 03-JAN-13
Starting implicit crosscheck backup at 03-JAN-13
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=10 device type=DISK
Crosschecked 1 objects
Finished implicit crosscheck backup at 03-JAN-13

Starting implicit crosscheck copy at 03-JAN-13
using channel ORA_DISK_1
Finished implicit crosscheck copy at 03-JAN-13

searching for all files in the recovery area
cataloging files...
cataloging done

List of Cataloged Files
=======================
File Name: /u01/app/oracle/fast_recovery_area/ORCL/archivelog/2013_01_03/o1_mf_1_9_8gbjxsow_.arc
File Name: /u01/app/oracle/fast_recovery_area/ORCL/archivelog/2013_01_03/o1_mf_1_7_8gbjxn5x_.arc
File Name: /u01/app/oracle/fast_recovery_area/ORCL/archivelog/2013_01_03/o1_mf_1_14_8gbjzqvh_.arc
File Name: /u01/app/oracle/fast_recovery_area/ORCL/archivelog/2013_01_03/o1_mf_1_6_8gbjxlow_.arc
File Name: /u01/app/oracle/fast_recovery_area/ORCL/archivelog/2013_01_03/o1_mf_1_10_8gbjxv45_.arc
File Name: /u01/app/oracle/fast_recovery_area/ORCL/archivelog/2013_01_03/o1_mf_1_11_8gbjxwgy_.arc
File Name: /u01/app/oracle/fast_recovery_area/ORCL/archivelog/2013_01_03/o1_mf_1_15_8gbjzspz_.arc
File Name: /u01/app/oracle/fast_recovery_area/ORCL/archivelog/2013_01_03/o1_mf_1_13_8gbjzm4x_.arc
File Name: /u01/app/oracle/fast_recovery_area/ORCL/archivelog/2013_01_03/o1_mf_1_8_8gbjxrdj_.arc
File Name: /u01/app/oracle/fast_recovery_area/ORCL/autobackup/2013_01_03/o1_mf_s_803752695_8gbjvs9b_.bkp

using channel ORA_DISK_1

starting media recovery

archived log for thread 1 with sequence 6 is already on disk as file /u01/app/oracle/fast_recovery_area/ORCL/archivelog/2013_01_03/o1_mf_1_6_8gbjxlow_.arc
archived log for thread 1 with sequence 7 is already on disk as file /u01/app/oracle/fast_recovery_area/ORCL/archivelog/2013_01_03/o1_mf_1_7_8gbjxn5x_.arc
archived log for thread 1 with sequence 8 is already on disk as file /u01/app/oracle/fast_recovery_area/ORCL/archivelog/2013_01_03/o1_mf_1_8_8gbjxrdj_.arc
archived log for thread 1 with sequence 9 is already on disk as file /u01/app/oracle/fast_recovery_area/ORCL/archivelog/2013_01_03/o1_mf_1_9_8gbjxsow_.arc
archived log for thread 1 with sequence 10 is already on disk as file /u01/app/oracle/fast_recovery_area/ORCL/archivelog/2013_01_03/o1_mf_1_10_8gbjxv45_.arc
archived log for thread 1 with sequence 11 is already on disk as file /u01/app/oracle/fast_recovery_area/ORCL/archivelog/2013_01_03/o1_mf_1_11_8gbjxwgy_.arc
archived log for thread 1 with sequence 13 is already on disk as file /u01/app/oracle/fast_recovery_area/ORCL/archivelog/2013_01_03/o1_mf_1_13_8gbjzm4x_.arc
archived log for thread 1 with sequence 14 is already on disk as file /u01/app/oracle/fast_recovery_area/ORCL/archivelog/2013_01_03/o1_mf_1_14_8gbjzqvh_.arc
archived log for thread 1 with sequence 15 is already on disk as file /u01/app/oracle/fast_recovery_area/ORCL/archivelog/2013_01_03/o1_mf_1_15_8gbjzspz_.arc
archived log for thread 1 with sequence 16 is already on disk as file /u01/app/oracle/oradata/orcl/redo01.log
archived log file name=/u01/app/oracle/fast_recovery_area/ORCL/archivelog/2013_01_03/o1_mf_1_6_8gbjxlow_.arc thread=1 sequence=6
archived log file name=/u01/app/oracle/fast_recovery_area/ORCL/archivelog/2013_01_03/o1_mf_1_7_8gbjxn5x_.arc thread=1 sequence=7
archived log file name=/u01/app/oracle/fast_recovery_area/ORCL/archivelog/2013_01_03/o1_mf_1_8_8gbjxrdj_.arc thread=1 sequence=8
archived log file name=/u01/app/oracle/fast_recovery_area/ORCL/archivelog/2013_01_03/o1_mf_1_9_8gbjxsow_.arc thread=1 sequence=9
archived log file name=/u01/app/oracle/fast_recovery_area/ORCL/archivelog/2013_01_03/o1_mf_1_10_8gbjxv45_.arc thread=1 sequence=10
archived log file name=/u01/app/oracle/fast_recovery_area/ORCL/archivelog/2013_01_03/o1_mf_1_11_8gbjxwgy_.arc thread=1 sequence=11
unable to find archived log
archived log thread=1 sequence=12
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of recover command at 01/03/2013 16:44:53
RMAN-06054: media recovery requesting unknown archived log for thread 1 with sequence 12 and starting SCN of 1088992
---在执行恢复过程中提示找不到12号的归档日志


---查询v$archived_log视图得知归档日志最大的序列号是16
SYS@orcl>select max(sequence#) from v$archived_log where to_char(first_time,'YYYY-MM-DD')='2013-01-03';
MAX(SEQUENCE#)
--------------
        16

---查询v$log试图得知数据库CURRENT的日志是6号
SYS@orcl>select sequence# from v$log where status='CURRENT';
 SEQUENCE#
----------
     6

1.11创建新控制文件,使新控制文件不知道CURRENT日志的序列号,不强制要任何日志对其恢复
SYS@orcl>alter database backup controlfile to trace;                     ---保存控制文件到trace文件
Database altered.

SYS@orcl>select value from v$diag_info where name='Default Trace File';       ---查询trace文件位置
VALUE
--------------------------------------------------------------------------------
/u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_15729.trc


SYS@orcl>startup force nomount;                          ---重启实例到nomount状态
ORACLE instance started.

Total System Global Area 1887350784 bytes
Fixed Size            2229464 bytes
Variable Size         1107299112 bytes
Database Buffers      771751936 bytes
Redo Buffers            6070272 bytes

---使用trace文件中带'NORESETLOGS'关键字的'CREATE CONTROLFILE'语句创建新控制文件
SYS@orcl>CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS  ARCHIVELOG
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 8
    MAXLOGHISTORY 292
LOGFILE
  GROUP 1 '/u01/app/oracle/oradata/orcl/redo01.log'  SIZE 50M BLOCKSIZE 512,
  GROUP 2 '/u01/app/oracle/oradata/orcl/redo02.log'  SIZE 50M BLOCKSIZE 512,
  GROUP 3 '/u01/app/oracle/oradata/orcl/redo03.log'  SIZE 50M BLOCKSIZE 512
-- STANDBY LOGFILE
DATAFILE
  '/u01/app/oracle/oradata/orcl/system01.dbf',
  '/u01/app/oracle/oradata/orcl/sysaux01.dbf',
  '/u01/app/oracle/oradata/orcl/undotbs01.dbf',
  '/u01/app/oracle/oradata/orcl/users01.dbf',
  '/u01/app/oracle/oradata/orcl/example01.dbf'
CHARACTER SET AL32UTF8
;

Control file created.

1.12再执行'recover database'命令恢复数据库
RMAN> recover database;
Starting recover at 03-JAN-13
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=10 device type=DISK

starting media recovery

archived log for thread 1 with sequence 15 is already on disk as file /u01/app/oracle/fast_recovery_area/ORCL/archivelog/2013_01_03/o1_mf_1_15_8gbjzspz_.arc
archived log file name=/u01/app/oracle/fast_recovery_area/ORCL/archivelog/2013_01_03/o1_mf_1_15_8gbjzspz_.arc thread=1 sequence=15
unable to find archived log
archived log thread=1 sequence=16
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of recover command at 01/03/2013 16:59:52
RMAN-06054: media recovery requesting unknown archived log for thread 1 with sequence 16 and starting SCN of 1089055
---提示找不到16号归档日志

---查询v$log视图可知16号日志是当前日志组,没有被归档
SYS@orcl>select sequence#,status,group# from v$log;

 SEQUENCE# STATUS        GROUP#
---------- ---------------- ----------
    16 CURRENT             1
    15 INACTIVE             3
    14 INACTIVE             2

---使用sqlplus的recover database命令进行恢复
SYS@orcl>recover database using backup controlfile;
ORA-00279: change 1089055 generated at 01/03/2013 16:40:25 needed for thread 1
ORA-00289: suggestion :
/u01/app/oracle/fast_recovery_area/ORCL/archivelog/2013_01_03/o1_mf_1_16_%u_.arc
ORA-00280: change 1089055 for thread 1 is in sequence #16


Specify log: {<RET>=suggested | filename | AUTO | CANCEL}        ---回车,再输入16号日志组的成员路径,应用redo日志进行恢复
/u01/app/oracle/oradata/orcl/redo01.log             
Log applied.
Media recovery complete.


1.13以resetlogs命令打开实例
SYS@orcl>alter database open resetlogs;
Database altered.

---添加临时数据文件
SYS@orcl>alter tablespace temp add tempfile  '/u01/app/oracle/oradata/orcl/temp01.dbf' reuse;
Tablespace altered.

1.14再查询test表,数据依旧存在
SYS@orcl>select count(*) from scott.test;
  COUNT(*)
----------
    14

1.15执行'catalog db_recovery_file_dest'命令找回快速恢复区的备份信息
RMAN> list backup;
specification does not match any backup in the repository

RMAN> catalog db_recovery_file_dest;
searching for all files in the recovery area

List of Files Unknown to the Database
=====================================
File Name: /u01/app/oracle/fast_recovery_area/ORCL/autobackup/2013_01_03/o1_mf_s_803752695_8gbjvs9b_.bkp
File Name: /u01/app/oracle/fast_recovery_area/ORCL/backupset/2013_01_03/o1_mf_ncnnf_TAG20130103T163808_8gbjvnh7_.bkp

Do you really want to catalog the above files (enter YES or NO)?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值