本文模拟归档日志出现坏块时,如何进行不完全恢复。
这篇文章介绍环境的建立,并利用基于CANCEL的方式进行恢复。
首先建立环境:
SQL> CONN YANGTK/YANGTK@TEST
已连接。
SQL> DROP TABLE TEST_BACKUP;
表已丢弃。
SQL> CREATE TABLE TEST_BACKUP (ID NUMBER);
表已创建。
SQL> INSERT INTO TEST_BACKUP VALUES (10000);
已创建 1 行。
SQL> INSERT INTO TEST_BACKUP VALUES (20000);
已创建 1 行。
SQL> COMMIT;
提交完成。
SQL> ALTER SYSTEM SWITCH LOGFILE;
系统已更改。
SQL> SELECT GROUP#, THREAD#, SEQUENCE#, ARCHIVED, STATUS FROM V$LOG;
GROUP# THREAD# SEQUENCE# ARC STATUS
---------- ---------- ---------- --- ----------------
1 1 29 NO CURRENT
2 1 27 YES INACTIVE
3 1 28 YES ACTIVE
SQL> INSERT INTO TEST_BACKUP VALUES (30000);
已创建 1 行。
SQL> COMMIT;
提交完成。
SQL> ALTER SYSTEM SWITCH LOGFILE;
系统已更改。
SQL> INSERT INTO TEST_BACKUP VALUES (40000);
已创建 1 行。
SQL> COMMIT;
提交完成。
SQL> ALTER SYSTEM SWITCH LOGFILE;
系统已更改。
SQL> HOST COPY F:ORACLEORADATATEST*.CTL F:ORACLEBACKUPTEST20060505
为了能够可重复性的恢复测试,备份当前的控制文件。
通过ULTRAEDIT修改ARCH00028.001文件,模拟坏块。
SQL> CONN /@TEST AS SYSDBA
IXDBA.NET技术社区
已连接。
SQL> SHUTDOWN IMMEDIATE
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> HOST COPY F:ORACLEBACKUPTEST20060503*.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;
ORA-00279: 更改 48647749 (在 05/03/2006 11:11:05 生成) 对于线程 1 是必需的
ORA-00289: 建议: F:ORACLEORADATATESTARCHIVEARC00025.001
ORA-00280: 更改 48647749 对于线程 1 是按序列 # 25 进行的
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
AUTO
ORA-00279: 更改 48649563 (在 05/05/2006 23:10:56 生成) 对于线程 1 是必需的
ORA-00289: 建议: F:ORACLEORADATATESTARCHIVEARC00026.001
ORA-00280: 更改 48649563 对于线程 1 是按序列 # 26 进行的
ORA-00278: 此恢复不再需要日志文件 'F:ORACLEORADATATESTARCHIVEARC00025.001'
ORA-00279: 更改 48654804 (在 05/05/2006 23:14:36 生成) 对于线程 1 是必需的
ORA-00289: 建议: F:ORACLEORADATATESTARCHIVEARC00027.001
ORA-00280: 更改 48654804 对于线程 1 是按序列 # 27 进行的
ORA-00278: 此恢复不再需要日志文件 'F:ORACLEORADATATESTARCHIVEARC00026.001'
ORA-00279: 更改 48656341 (在 05/05/2006 23:15:49 生成) 对于线程 1 是必需的
ORA-00289: 建议: F:ORACLEORADATATESTARCHIVEARC00028.001
ORA-00280: 更改 48656341 对于线程 1 是按序列 # 28 进行的
ORA-00278: 此恢复不再需要日志文件 'F:ORACLEORADATATESTARCHIVEARC00027.001'
ORA-00283: 恢复会话因错误而取消
ORA-00368: 重做日志块中的校验和错误
ORA-00353: 日志损坏接近块 1268 更改 48657192 时间 05/05/2006 23:58:03
ORA-00334: 归档日志: 'F:ORACLEORADATATESTARCHIVEARC00028.001'
ORA-01112: 未启动介质恢复
SQL> ALTER DATABASE OPEN RESETLOGS;
ALTER DATABASE OPEN RESETLOGS
*
ERROR 位于第 1 行:
ORA-01139: RESETLOGS 选项仅在不完全数据库恢复后有效
SQL> RECOVER DATABASE UNTIL CANCEL