一般情况下,是无法利用RESETLOGS操作之前的备份进行数据库的恢复的。但是在特定条件下利用RESETLOGS之前的备份进行恢复是可行的。
本文通过一个例子具体说明,如何利用RESETLOGS操作前的数据库备份跨越RESETLOGS操作,进行数据库的恢复。
利用RESETLOGS操作之前的数据库备份的前提是:数据库的备份处于一致性状态,且在以RESETLOGS方式打开数据库之前没有进一步的恢复操作或数据文件的修改。而且,恢复时必须存在RESETLOGS操作之后的控制文件。
下面介绍的这个例子就是利用上面的描述的这个特性来进行跨越数据库的RESETLOGS操作的恢复。整个恢复过程分为两步,首先,利用RESETLOGS以前的备份,经数据库恢复到RESETLOGS操作之前,然后,再利用RESETLOGS操作以后的控制文件和日志文件将数据库恢复到最新的时刻。
首先,构造两步恢复操作需要的所有备份文件:
SQL> CONN /@TEST AS SYSDBA
已连接。
SQL> SELECT COUNT(*) FROM YANGTK.TEST_BACKUP;
COUNT(*)
----------
1
SQL> INSERT INTO YANGTK.TEST_BACKUP SELECT ROWNUM FROM DBA_OBJECTS;
已创建6290行。
SQL> COMMIT;
提交完成。
SQL> ALTER SYSTEM SWITCH LOGFILE;
系统已更改。
SQL> DELETE YANGTK.TEST_BACKUP WHERE ID < 1000;
已删除1000行。
SQL> COMMIT;
提交完成。
SQL> ALTER SYSTEM SWITCH LOGFILE;
系统已更改。
SQL> SHUTDOWN ABORT
ORACLE 例程已经关闭。
SQL> HOST COPY F:ORACLEBACKUPTEST20060312*.DBF F:ORACLEORADATATEST
SQL> STARTUP MOUNT
ORACLE 例程已经启动。
Total System Global Area 76619308 bytes
Fixed Size 454188 bytes
Variable Size 50331648 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
数据库装载完毕。
SQL> RECOVER DATABASE USING BACKUP CONTROLFILE UNTIL CANCEL
ORA-00279: 更改 46448931 (在 03/12/2006 19:22:59 生成) 对于线程 1 是必需的
ORA-00289: 建议: F:ORACLEORADATATESTARCHIVEARC00001.001
ORA-00280: 更改 46448931 对于线程 1 是按序列 # 1 进行的
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
AUTO
ORA-00279: 更改 46449098 (在 03/12/2006 23:38:24 生成) 对于线程 1 是必需的
IXDBA.NET技术社区
ORA-00289: 建议: F:ORACLEORADATATESTARCHIVEARC00002.001
ORA-00280: 更改 46449098 对于线程 1 是按序列 # 2 进行的
ORA-00278: 此恢复不再需要日志文件 'F:ORACLEORADATATESTARCHIVEARC00001.001'
ORA-00279: 更改 46449118 (在 03/12/2006 23:39:03 生成) 对于线程 1 是必需的
ORA-00289: 建议: F:ORACLEORADATATESTARCHIVEARC00003.001
ORA-00280: 更改 46449118 对于线程 1 是按序列 # 3 进行的
ORA-00278: 此恢复不再需要日志文件 'F:ORACLEORADATATESTARCHIVEARC00002.001'
ORA-00328: 归档日志在更改 46448727 结束,需要稍后的更改 46449118
ORA-00334: 归档日志: 'F:ORACLEORADATATESTARCHIVEARC00003.001'
SQL> RECOVER DATABASE USING BACKUP CONTROLFILE UNTIL CANCEL
ORA-00279: 更改 46449118 (在 03/12/2006 23:39:03 生成) 对于线程 1 是必需的
ORA-00289: 建议: F:ORACLEORADATATESTARCHIVEARC00003.001
ORA-00280: 更改 46449118 对于线程 1 是按序列 # 3 进行的
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
F:ORACLEORADATATESTREDO01.LOG
ORA-00310: 存档日志包含序列 2;要求序列 3
ORA-00334: 归档日志: 'F:ORACLEORADATATESTREDO01.LOG'
SQL> RECOVER DATABASE USING BACKUP CONTROLFILE UNTIL CANCEL
ORA-00279: 更改 46449118 (在 03/12/2006 23:39:03 生成) 对于线程 1 是必需的
ORA-00289: 建议: F:ORACLEORADATATESTARCHIVEARC00003.001
ORA-00280: 更改 46449118 对于线程 1 是按序列 # 3 进行的