ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 恢复之利用备份在所有控制文件丢失情况下恢复(一)

恢复之利用备份在所有控制文件丢失情况下恢复(一)

原创 Linux操作系统 作者:zhengbao_jun 时间:2009-02-11 13:59:56 0 删除 编辑

如果全部控制文件丢失,但是包含以前控制文件的备份,这时可以利用备份的控制文件进行恢复,不过在恢复后需要以RESETLOGS方式打开数据库。

根据联机重做日志文件是否可用和数据文件是否是最新的可以分为四种不同情况,这篇文章描述的是,联机重做日志可用,且数据文件是最新的情况。


一般重做日志全部丢失的话,数据库肯定会马上关闭。本测试为了模拟联机日志中包含待恢复数据的情况,在后台运行存储过程插入数据时,在另外的session使用SHUTDOWN ABORT关闭数据库。

SQL> CONN /@TEST AS SYSDBA
已连接。
SQL> SHUTDOWN ABORT
ORACLE 例程已经关闭。

数据库关闭后删除所有控制文件。

SQL> HOST DEL F:ORACLEORADATATEST*.CTL

然后利用备份的控制文件进行恢复

SQL> HOST COPY F:ORACLEBACKUPTEST20060215*.CTL 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
数据库装载完毕。

利用备份的控制文件启动,需要使用USING BACKUP CONTROLFILE语句。

SQL> RECOVER DATABASE USING BACKUP CONTROLFILE UNTIL CANCEL
ORA-00279: 更改 45609576 (在 02/15/2006 19:28:34 生成) 对于线程 1 是必需的
ORA-00289: 建议: F:ORACLEORADATATESTARCHIVEARC00059.001
ORA-00280: 更改 45609576 对于线程 1 是按序列 # 59 进行的


指定日志: {=suggested | filename | AUTO | CANCEL}
AUTO
ORA-00279: 更改 45610708 (在 02/16/2006 01:35:15 生成) 对于线程 1 是必需的
ORA-00289: 建议: F:ORACLEORADATATESTARCHIVEARC00060.001
ORA-00280: 更改 45610708 对于线程 1 是按序列 # 60 进行的
ORA-00278: 此恢复不再需要日志文件 'F:ORACLEORADATATESTARCHIVEARC00059.001'


ORA-00279: 更改 45610901 (在 02/16/2006 01:36:55 生成) 对于线程 1 是必需的
ORA-00289: 建议: F:ORACLEORADATATESTARCHIVEARC00061.001
ORA-00280: 更改 45610901 对于线程 1 是按序列 # 61 进行的
ORA-00278: 此恢复不再需要日志文件 'F:ORACLEORADATATESTARCHIVEARC00060.001'


ORA-00279: 更改 45612925 (在 02/16/2006 01:39:10 生成) 对于线程 1 是必需的
ORA-00289: 建议: F:ORACLEORADATATESTARCHIVEARC00062.001
ORA-00280: 更改 45612925 对于线程 1 是按序列 # 62 进行的
ORA-00278: 此恢复不再需要日志文件 'F:ORACLEORADATATESTARCHIVEARC00061.001'


ORA-00308: 无法打开存档日志 'F:ORACLEORADATATESTARCHIVEARC00062.001'
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。


ORA-01547: 警告: RECOVER 成功但 OPEN RESETLOGS 将出现如下错误
ORA-01194: 文件1需要更多的恢复来保持一致性
ORA-01110: 数据文件 1: 'F:ORACLEORADATATESTSYSTEM01.DBF'

最后出现的错误是由于SHUTDOWN ABORT后,使用备份的控制文件造成的。Oracle需要应用当前的重做日志文件来进行恢复,但是由于使用了备份的控制文件,备份之后的归档日志信息丢失,因此,这时需要手工输入需要恢复的联机重做日志文件。

其实这个时候是可以通过REDO的循环使用推断出最后需要使用的联机日志的。

SQL> SELECT GROUP#, SEQUENCE#, STATUS FROM V$LOG;

GROUP# SEQUENCE# STATUS
---------- ---------- ----------------
1 59 CURRENT
2 57 INACTIVE
3 58 INACTIVE

这时已经可以推断GROUP2将是60,GROUP3是61,而GROUP1则是62。不过在输入重做日志进行恢复时,即使输入错文件也没有关系,Oracle会提示错误。如果输入正确的重做日志,则Oracle会完成介质恢复。

SQL> RECOVER DATABASE USING BACKUP CONTROLFILE UNTIL CANCEL
ORA-00279: 更改 45612925 (在 02/16/2006 01:39:10 生成) 对于线程 1 是必需的
ORA-00289: 建议: F:ORACLEORADATATESTARCHIVEARC00062.001
ORA-00280: 更改 45612925 对于线程 1 是按序列 # 62 进行的


指定日志: {=suggested | filename | AUTO | CANCEL}
F:ORACLEORADATATESTREDO03.LOG
ORA-00310: 存档日志包含序列 61;要求序列 62
ORA-00334: 归档日志: 'F:ORACLEORADATATESTREDO03.LOG'


ORA-01547: 警告: RECOVER 成功但 OPEN RESETLOGS 将出现如下错误
ORA-01194: 文件1需要更多的恢复来保持一致性
ORA-01110: 数据文件 1: 'F:ORACLEORADATATESTSYSTEM01.DBF'


SQL> RECOVER DATABASE USING BACKUP CONTROLFILE UNTIL CANCEL
ORA-00279: 更改 45612925 (在 02/16/2006 01:39:10 生成) 对于线程 1 是必需的
ORA-00289: 建议: F:ORACLEORADATATESTARCHIVEARC00062.001
ORA-00280: 更改 45612925 对于线程 1 是按序列 # 62 进行的


指定日志: {=suggested | filename | AUTO | CANCEL}
F:ORACLEORADATATESTREDO01.LOG
已应用的日志。
完成介质恢复。
SQL> ALTER DATABASE OPEN RESETLOGS;

数据库已更改。

恢复到这里已经完成,现在需要做的是马上进行数据库的备份。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/235507/viewspace-548676/,如需转载,请注明出处,否则将追究法律责任。

上一篇: oracle 10g RMAN管理
请登录后发表评论 登录
全部评论

注册时间:2008-08-08

  • 博文量
    209
  • 访问量
    870939