控制文件全部丢失的情况下,根据联机重做日志文件是否可用和数据文件是否是最新的可以分为四种不同情况,这篇文章描述的是,联机重做日志可用利用备份的数据数据和控制文件进行恢复。
SQL> CONN /@TEST AS SYSDBA
已连接。
SQL> SHUTDOWN ABORT
ORACLE 例程已经关闭。
SQL> HOST DEL F:ORACLEORADATATEST*.CTL
上面模拟了数据库非正常关闭,且丢失全部控制文件的情况。下面通过备份的数据文件和控制文件进行恢复。
SQL> HOST COPY F:ORACLEBACKUPTEST20060217*.CTL F:ORACLEORADATATEST
SQL> HOST COPY F:ORACLEBACKUPTEST20060217*.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
ORA-00279: 更改 45738202 (在 02/17/2006 01:47:37 生成) 对于线程 1 是必需的
ORA-00289: 建议: F:ORACLEORADATATESTARCHIVEARC00001.001
ORA-00280: 更改 45738202 对于线程 1 是按序列 # 1 进行的
指定日志: {=suggested | filename | AUTO | CANCEL}
AUTO
ORA-00279: 更改 45758870 (在 02/17/2006 07:53:04 生成) 对于线程 1 是必需的
ORA-00289: 建议: F:ORACLEORADATATESTARCHIVEARC00002.001
ORA-00280: 更改 45758870 对于线程 1 是按序列 # 2 进行的
ORA-00278: 此恢复不再需要日志文件 'F:ORACLEORADATATESTARCHIVEARC00001.001'
ORA-00279: 更改 45779575 (在 02/17/2006 23:54:33 生成) 对于线程 1 是必需的
ORA-00289: 建议: F:ORACLEORADATATESTARCHIVEARC00003.001
ORA-00280: 更改 45779575 对于线程 1 是按序列 # 3 进行的
ORA-00278: 此恢复不再需要日志文件 'F:ORACLEORADATATESTARCHIVEARC00002.001'
ORA-00279: 更改 45804770 (在 02/18/2006 09:00:43 生成) 对于线程 1 是必需的
ORA-00289: 建议: F:ORACLEORADATATESTARCHIVEARC00004.001
ORA-00280: 更改 45804770 对于线程 1 是按序列 # 4 进行的
ORA-00278: 此恢复不再需要日志文件 'F:ORACLEORADATATESTARCHIVEARC00003.001'
ORA-00308: 无法打开存档日志 'F:ORACLEORADATATESTARCHIVEARC00004.001'
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。
SQL> RECOVER DATABASE USING BACKUP CONTROLFILE
ORA-00279: 更改 45804770 (在 02/18/2006 09:00:43 生成) 对于线程 1 是必需的
ORA-00289: 建议: F:ORACLEORADATATESTARCHIVEARC00004.001
ORA-00280: 更改 45804770 对于线程 1 是按序列 # 4 进行的
指定日志: {=suggested | filename | AUTO | CANCEL}
F:ORACLEORADATATESTREDO03.LOG
已应用的日志。
完成介质恢复。
SQL> ALTER DATABASE OPEN RESETLOGS;
数据库已更改。
如果重做日志文件没有损坏,恢复过程还是十分简单的。步骤和利用当前的数据文件没有很大的差别。