本文档主要转发自:http://book.51cto.com/art/201108/287826.htm,只加了自己操作后的备注与理解,操作环境:虚拟机Vmware Player 5.0.2+RHEL Server 6.4+Oracle 11.2.0.3(单机)+ASM.
9.6 利用恢复的控制文件进行数据库恢复
(David备注:标题有点大,实际上本节并没有讲控制文件+其他文件如数据库、在线日志丢失的场景,只是在讲述控制文件丢失后怎么恢复控制文件)
Oracle文档中提到,一旦用备份的控制文件进行数据库恢复,就需要使用resetlogs的方法打开数据库。但是resetlogs通常意味着不完全恢复(David备注:这句话是有问题的,其实resetlogs本来就适用于不完全恢复和使用backup controlfile恢复),而且更重要的是一旦用resetlogs方法打开数据库,日志的序号用重新从1开始。其实如果只是控制文件损坏,日志文件都完整的话,数据库是可以完全恢复的,而且不必非得用resetlogs打开。接下来,我们就对不完全恢复做出总结(备注:这句话改为“恢复丢失的控制文件”更为恰当),如图9-10所示,然后再通过一些实验深入理解。
9.6.1 使用alter database open resetlogs的场合
使用resetlogs选项,会把当前的日志序号(log sequence number)重设为1,并抛弃所有日志信息。在以下条件时需要使用resetlogs选项:
在不完全恢复(介质恢复);
使用备份控制文件。
使用resetlogs打开数据库后,务必要完整地进行一次数据库备份。
David备注:From oracle 10g:
Simplified Recovery Through RESETLOGS
-Database can be opened immediately after RESETLOGS
-A full backup no longer needs to be taken
-Usage scenarios:Incomplete recovery,Recovery using backup control file) The simplified recovery through the RESETLOGS feature is an enhancement to recovery operations so that previous incarnation backups can be used for recovery of the current
database incarnation.
Oracle10g能做到这一点主要是做了两点优化:
1.From Oracle Database 10g,you can use the ALTER DATABASE OPEN RESETLOGS statement so that the database now archives the current online redo logs (if possible) before clearing the logs.
2.a new format specification for archived redo log files is introduced to avoid overwriting archived redo log files with the same sequence number across these incarnations.
9.6.2 重建控制文件
如果数据库的控制文件损坏,有3种方法可以用来重建控制文件,每一种方法的后续处理又有不同,这3种方法分别是:
从自动备份或者备份中恢复;
用create controlfile resetlogs方法重建;
用create controlfile noresetlogs方法重建。
每一种方法所对应的后续处理是这样的。
(1)如果是从备份中恢复的控制文件,后续要:
使用using backup controlfile子句进行数据库恢复;
打开数据库时需要用resetlogs方式打开。
(2)如果使用resetlogs方法重建的控制文件,后续要:
使用using backup controlfile的方法进行数据库恢复;
要用resetlogs方式打开数据库。
(3)如果是用noresetlogs方法创建的控制文件,后续要:
恢复数据库时无须用using backup controlfile;
无须使用resetlogs方式打开数据库。
值得一提的是,create controlfile resetlogs/noresetlogs这两种重建方法的区别在于,noresetlogs重建控制文件时,控制文件中datafile Checkpoint来自Online logs中的Current log头。而用resetlogs重建控制文件时,控制文件中datafile Checkpoint来自各数据文件头。
9.6.3 使用using backup controlfile的场合
以下条件需要使用using backup controlfile:
使用备份控制文件;
用resetlogs方法重建控制文件,如果用noresetlogs重建不必要使用using backup controlfile。
接下来,我们通过3个例子深入分析这些场景的处理,注意,下面这些例子中日志文件都是好的,也就是从数据角度来看,做的都是完全恢复,没有数据丢失。但因为控制文件的来源不同,后续处理也就不一样。
9.6.4 例子1:使用备份的控制文件做恢复(1)(1)备份控制文件:
- RMAN> backup datafile 1;
-
- Starting backup at 13-APR-11
- allocated channel: ORA_DISK_1
- channel ORA_DISK_1: sid=2476 devtype=DISK
- channel ORA_DISK_1: starting full datafile backupset
- channel ORA_DISK_1: specifying datafile(s) in backupset
- input datafile fno=00001 name=/zxm/cindytest/system01.dbf
- channel ORA_DISK_1: starting piece 1 at 13-APR-11
- channel ORA_DISK_1: finished piece 1 at 13-APR-11
- piece handle=/oracle/product/10G_single/dbs/
0om9lsiu_1_1 tag=TAG20110413T113453 comment=NONE
- channel ORA_DISK_1: backup set complete, elapsed time: 00:00:35
- Finished backup at 13-APR-11
-
- Starting Control File and SPFILE Autobackup at 13-APR-11
- piece handle=/oracle/product/10G_single/dbs/c
-539593454-20110413-00 comment=NONE
- Finished Control File and SPFILE Autobackup at 13-APR-11
备份的控制文件在/ora