oracle 数据库非正常关闭,恢复之非归档模式下数据库非正常关闭的备份与恢复...

产品数据库不会处于非归档模式下。而且冷备份的前提是数据库正常关闭,因此,一般不会存在使用非正常关闭的备份来进行数据库的恢复。

本文只是对这种特殊的情况进行一下测试,在实际中应该不会碰到这种情况。

首先,在另一个SESSION循环插入数据,然后非正常关闭数据库,并在这种情况下备份数据库:

SQL> CONN /@TEST1 AS SYSDBA

已连接。

SQL> SHUTDOWN ABORT

ORACLE 例程已经关闭。

SQL> HOST COPY F:ORACLEORADATATEST1* F:ORACLEBACKUPTEST120060305

Oracle文档并不推荐备份联机日志文件,但是对于非归档模式下,非正常关闭的数据库来说,备份了联机日志文件至少可以保证数据库可以一致性打开。

打开数据库,进行数据的修改:

SQL> STARTUP

ORACLE 例程已经启动。

Total System Global Area 76619308 bytes

Fixed Size 454188 bytes

Variable Size 50331648 bytes

Database Buffers 25165824 bytes

Redo Buffers 667648 bytes

数据库装载完毕。

数据库已经打开。

SQL> SELECT COUNT(*) FROM YANGTK.TEST;

COUNT(*)

----------

20001

SQL> DELETE YANGTK.TEST WHERE ID > 1;

已删除19000行。

SQL> COMMIT;

提交完成。

SQL> ALTER SYSTEM SWITCH LOGFILE;

系统已更改。

下面利用刚才生成的备份进行数据库的恢复,由于数据库只进行了少量的操作,备份之后所有的操作都存在于联机日志文件中,且联机日志文件还没有被重用。

这个时候的恢复可以选择是否恢复备份的联机日志文件。如果不恢复备份的联机日志文件,数据库是可以不丢失数据打开的:

SQL> SHUTDOWN IMMEDIATE

数据库已经关闭。

已经卸载数据库。

ORACLE 例程已经关闭。

SQL> HOST COPY F:ORACLEBACKUPTEST120060305*.CTL F:ORACLEORADATATEST1

SQL> HOST COPY F:ORACLEBACKUPTEST120060305*.DBF F:ORACLEORADATATEST1

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: 更改 36693083 (在 03/05/2006 10:28:00 生成) 对于线程 1 是必需的

ORA-00289: 建议: F:ORACLEORACLE920RDBMSARC01042.001

ORA-00280: 更改 36693083 对于线程 1 是按序列 # 1042 进行的

指定日志: {=suggested | filename | AUTO | CANCEL}

F:ORACLEORADATATEST1REDO01.LOG

ORA-00310: 存档日志包含序列 1043;要求序列 1042

ORA-00334: 归档日志: 'F:ORACLEORADATATEST1REDO01.LOG'

SQL> RECOVER DATABASE USING BACKUP CONTROLFILE

ORA-00279: 更改 36693083 (在 03/05/2006 10:28:00 生成) 对于线程 1 是必需的

ORA-00289: 建议: F:ORACLEORACLE920RDBMSARC01042.001

ORA-00280: 更改 36693083 对于线程 1 是按序列 # 1042 进行的

指定日志: {=suggested | filename | AUTO | CANCEL}

F:ORACLEORADATATEST1REDO03.LOG

ORA-00279: 更改 36724400 (在 03/06/2006 00:57:42 生成) 对于线程 1 是必需的

ORA-00289: 建议: F:ORACLEORACLE920RDBMSARC01043.001

ORA-00280: 更改 36724400 对于线程 1 是按序列 # 1043 进行的

ORA-00278: 此恢复不再需要日志文件 'F:ORACLEORADATATEST1REDO03.LOG'

指定日志: {=suggested | filename | AUTO | CANCEL}

F:ORACLEORADATATEST1REDO01.LOG

ORA-00279: 更改 36724695 (在 03/06/2006 00:59:07 生成) 对于线程 1 是必需的

ORA-00289: 建议: F:ORACLEORACLE920RDBMSARC01044.001

ORA-00280: 更改 36724695 对于线程 1 是按序列 # 1044 进行的

ORA-00278: 此恢复不再需要日志文件 'F:ORACLEORADATATEST1REDO01.LOG'

指定日志: {=suggested | filename | AUTO | CANCEL}

F:ORACLEORADATATEST1REDO02.LOG

已应用的日志。

完成介质恢复。

SQL> ALTER DATABASE OPEN RESETLOGS;

数据库已更改。

查询YANGTK.TEST表就可以发现,数据库数据并未丢失:

SQL> SELECT COUNT(*) FROM YANGTK.TEST;

COUNT(*)

----------

1001

如果采用恢复联机日志文件的方式,则数据库可以正常打开,但是会丢失备份之后所有的修改:

SQL> SHUTDOWN IMMEDIATE

数据库已经关闭。

已经卸载数据库。

ORACLE 例程已经关闭。

SQL> HOST COPY F:ORACLEBACKUPTEST120060305* F:ORACLEORADATATEST1

SQL> STARTUP

ORACLE 例程已经启动。

Total System Global Area 76619308 bytes

Fixed Size 454188 bytes

Variable Size 50331648 bytes

Database Buffers 25165824 bytes

Redo Buffers 667648 bytes

数据库装载完毕。

数据库已经打开。

SQL> SELECT COUNT(*) FROM YANGTK.TEST;

COUNT(*)

----------

20001

如果是数据库已经运行一段时间,用于将SHUTDOWN ABORT正常打开的联机日志文件已经被重用的情况:

SQL> DELETE YANGTK.TEST WHERE ID > 15;

已删除5000行。

SQL> COMMIT;

提交完成。

SQL> ALTER SYSTEM SWITCH LOGFILE;

系统已更改。

SQL> DELETE YANGTK.TEST WHERE ID > 10;

已删除5000行。

SQL> COMMIT;

提交完成。

SQL> ALTER SYSTEM SWITCH LOGFILE;

系统已更改。

这个时候的恢复如果将联机日志文件恢复,则和刚才的恢复操作没有区别,数据库恢复到备份的时刻,并利用备份时刻的联机日志文件将数据库一致性打开。如果不恢复联机日志文件,或者没有备份当时的联机日志文件:

SQL> SHUTDOWN IMMEDIATE

数据库已经关闭。

已经卸载数据库。

ORACLE 例程已经关闭。

SQL> HOST COPY F:ORACLEBACKUPTEST120060305*.CTL F:ORACLEORADATATEST1

SQL> HOST COPY F:ORACLEBACKUPTEST120060305*.DBF F:ORACLEORADATATEST1

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 UNTIL CANCEL USING BACKUP CONTROLFILE

ORA-00279: 更改 36693083 (在 03/05/2006 10:28:00 生成) 对于线程 1 是必需的

ORA-00289: 建议: F:ORACLEORACLE920RDBMSARC01042.001

ORA-00280: 更改 36693083 对于线程 1 是按序列 # 1042 进行的

指定日志: {=suggested | filename | AUTO | CANCEL}

CANCEL

ORA-01547: 警告: RECOVER 成功但 OPEN RESETLOGS 将出现如下错误

ORA-01194: 文件1需要更多的恢复来保持一致性

ORA-01110: 数据文件 1: 'F:ORACLEORADATATEST1SYSTEM01.DBF'

ORA-01112: 未启动介质恢复

这个时候数据库已经无法正常的打开了,这是由于在非正常关闭情况下进行的备份。这时候或者利用更早的备份进行不完整恢复,或者提供备份时刻备份的联机重做日志。

SQL> RECOVER DATABASE UNTIL CANCEL USING BACKUP CONTROLFILE

ORA-00279: 更改 36693083 (在 03/05/2006 10:28:00 生成) 对于线程 1 是必需的

ORA-00289: 建议: F:ORACLEORACLE920RDBMSARC01042.001

ORA-00280: 更改 36693083 对于线程 1 是按序列 # 1042 进行的

指定日志: {=suggested | filename | AUTO | CANCEL}

F:ORACLEBACKUPTEST120060305REDO03.LOG

已应用的日志。

完成介质恢复。

SQL> ALTER DATABASE OPEN RESETLOGS;

数据库已更改。

SQL> SELECT COUNT(*) FROM YANGTK.TEST;

COUNT(*)

----------

20001

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值