终于要面对RESETLOGS了,源于OCA的一道题目,主要就是问数据库在RESETLOGS之后,之前的备份是否还能使用。
10g之前是不可以的,在10g之前,每次完成incomplete恢复,都要马上做一个新的备份,因为之前的都变成无效的。
如果是使用RMAN的话,还要运行
RMAN> reset database;
以确保catalog能够认识新的数据库incarnation
10g之后,使用OPEN RESETLOGS就能够避免再次备份数据库,OPEN RESETLOG有以下的好处:
1.在完成incomplete恢复后不需要进行全库备份
2.进行完failover后不需要重建standby
3.不需要更改任何的备份脚本
4.能够使用之前的incarnation继续增量备份(貌似和第一点重复)
5.Block media recovery can restore backups from parent incarnation backups and recover the corrupted blocks through a RESETLOGS operation(这个理解不彻底,就原文上来吧)
可以看看参数log_archive_format
SQL> show parameters log_archive_format
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_format string %t_%s_%r.dbf
其中%r就是resetlogs的标记。
显然,如果没有了这个标记,oracle就难以唯一的确认每个归档日志文件。
那OPEN RESETLOGS具体做了以下动作:
1.把目前能够访问的redo log归档,并把online redo log清空
2.把log sequence重置为1(For example, if the current online redo logs are sequence 1000 and 1001 when you open RESETLOGS, then the database archives logs 1000 and 1001 and then resets the online logs to sequence 1 and 2.)
3.把不存在的redo log文件自动重建
4.重新初始化control file当中的redo log file和redo thread部分
5.使用新的RESETLOGS SCN和时间戳更新当前的datafile、online redo log file、和后来归档的redo log
PS:其实RESETLOGS就是保证datafile里面的数据的正确的,而不因为media fail等其他fail与recovry的部分搞混
PS2:可以看到,oracle使用多种、多重的保护方式以确保数据库内的数据安全。但是还没有了解到DB2相关的技术,期待中
PS3:其实对于像我这样的菜鸟,做完任何的恢复(除了flash back)都可以考虑马上来个全备。同时,合理、定时的备份永远可以减少风险和自己的工作量