redo logfile丢失情况

Oracle redo logfile group丢失情况分析

Redo logfile是用来记录oracle数据库的事务日志,redo logfile无意丢失时,此时数据库将不能正常使用.之前,笔者就遇到过一些,对此做一些概括,有不足之处,欢迎补充

测试环境  windows 2003 + oracle 10204

当前日志组情况

连接到:

Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production

With the Partitioning, OLAP, Data Mining and Real Application Testing op

 

SQL> select * from v$log;

 

    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS

---------- ---------- ---------- ---------- ---------- --- -------------

FIRST_CHANGE# FIRST_TIME

------------- --------------

         1          1         25   52428800          1 YES INACTIVE

       725982 17-3 -10

 

         2          1         26   52428800          1 YES ACTIVE

       765646 22-3 -10

 

         3          1         27   52428800          1 NO  CURRENT

       814523 23-3 -10

 

情况一

  当丢失的日志组是当前正在使用的,并且在数据库正常关闭后

1.       正常关闭数据库,然后将数据库的当前日志组所有成员更改名字,此时打开数据库

SQL> shutdown immediate

数据库已经关闭。

已经卸载数据库。

ORACLE 例程已经关闭。

SQL> startup

ORACLE 例程已经启动。

 

Total System Global Area  448790528 bytes

Fixed Size                  1297220 bytes

Variable Size             130024636 bytes

Database Buffers          310378496 bytes

Redo Buffers                7090176 bytes

数据库装载完毕。

ORA-00313: 无法打开日志组 3 (用于线程 1) 的成员

ORA-00312: 联机日志 3 线程 1:

'D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\REDO03.LOG'

2.       oracle OD上说open resetlogs能打开数据库

 

SQL> alter database open resetlogs;

alter database open resetlogs

*

1 行出现错误:

ORA-01139: RESETLOGS 选项仅在不完全数据库恢复后有效

 

3.       此时数据库并没有做不完全恢复,所以不能用resetlogs,于是想能不能骗一下oracle,于是做了如下操作.

SQL> recover database;

ORA-00283: 恢复会话因错误而取消

ORA-00264: 不要求恢复

 

 

SQL> recover database using backup controlfile until cancel;

ORA-00279: 更改 814667 ( 03/23/2010 14:34:35 生成) 对于线程 1 是必需的

ORA-00289: 建议:

D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\TEST\ARCHIVELOG\2010_03_23\O1_MF_1_

 

27_%U_.ARC

ORA-00280: 更改 814667 (用于线程 1) 在序列 #27

 

 

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

cancel

介质恢复已取消。

 

4.       此时再用resetlogs打开数据库,数据库能打开了

 

SQL> alter database open resetlogs;

 

数据库已更改。

 

SQL> select member from v$logfile;

 

MEMBER

----------------------------------------------------------------------

 

D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\REDO01.LOG

D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\REDO02.LOG

D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\REDO03.LOG

 

SQL> select * from v$log;

 

    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS

---------- ---------- ---------- ---------- ---------- --- -----------

FIRST_CHANGE# FIRST_TIME

------------- --------------

         1          1          1   52428800          1 YES INACTIVE

       814668 23-3 -10

 

         2          1          2   52428800          1 NO  CURRENT

       814669 23-3 -10

 

         3          1          0   52428800          1 YES UNUSED

            0

 

可以看到数据库自动重新创建了此日志组.

 

情况二

 

当数据库正常关闭后,丢失的不是当前日志组时,

 

SQL> shutdown immediate;

数据库已经关闭。

已经卸载数据库。

ORACLE 例程已经关闭。

SQL> startup

ORACLE 例程已经启动。

 

Total System Global Area  448790528 bytes

Fixed Size                  1297220 bytes

Variable Size             130024636 bytes

Database Buffers          310378496 bytes

Redo Buffers                7090176 bytes

数据库装载完毕。

ORA-00313: 无法打开日志组 1 (用于线程 1) 的成员

ORA-00312: 联机日志 1 线程 1:

'D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\REDO01.LOG'

 

 

SQL> select * from v$log;

 

    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS

---------- ---------- ---------- ---------- ---------- --- ----------------

FIRST_CHANGE# FIRST_TIME

------------- --------------

         1          1          1   52428800          1 YES INACTIVE

       814668 23-3 -10

 

         3          1          3   52428800          1 NO  CURRENT

       816708 23-3 -10

 

         2          1          2   52428800          1 YES INACTIVE

       814669 23-3 -10

 

 

SQL> alter database clear logfile group 1;

 

数据库已更改。

 

SQL> alter database open;

 

数据库已更改。

使用alter database clear logfile group命令重建该日志组后能正常打开了.

 

情况三

 在数据库正常关闭后,所有日志组都丢失了的情况.

SQL> shutdown immediate

数据库已经关闭。

已经卸载数据库。

ORACLE 例程已经关闭。

SQL> startup

ORACLE 例程已经启动。

 

Total System Global Area  448790528 bytes

Fixed Size                  1297220 bytes

Variable Size             130024636 bytes

Database Buffers          310378496 bytes

Redo Buffers                7090176 bytes

数据库装载完毕。

ORA-00313: 无法打开日志组 1 (用于线程 1) 的成员

ORA-00312: 联机日志 1 线程 1:

'D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\REDO01.LOG'

 

 

SQL> select * from v$log;

 

    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS

---------- ---------- ---------- ---------- ---------- --- ----------------

FIRST_CHANGE# FIRST_TIME

------------- --------------

         1          1          4   52428800          1 YES INACTIVE

       816785 23-3 -10

 

         3          1          3   52428800          1 YES INACTIVE

       816708 23-3 -10

 

         2          1          5   52428800          1 NO  CURRENT

       817206 23-3 -10

 

 

SQL> alter database clear logfile group 1;

 

数据库已更改。

 

SQL> alter database clear logfile group 3;

 

数据库已更改。

 

SQL> recover database using backup controlfile until cancel;

ORA-00279: 更改 817459 ( 03/23/2010 15:31:34 生成) 对于线程 1 是必需的

ORA-00289: 建议:

D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\TEST\ARCHIVELOG\2010_03_23\O1_MF_1

 

5_%U_.ARC

ORA-00280: 更改 817459 (用于线程 1) 在序列 #5

 

 

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

cancel;

ORA-00308: 无法打开归档日志 'cancel;'

ORA-27041: 无法打开文件

OSD-04002: 无法打开文件

O/S-Error: (OS 2) 系统找不到指定的文件。

 

 

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

cancel

介质恢复已取消。

SQL> alter database open resetlogs;

 

数据库已更改。

 

SQL> select * from v$log;

 

    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS

---------- ---------- ---------- ---------- ---------- --- ----------------

FIRST_CHANGE# FIRST_TIME

------------- --------------

         1          1          1   52428800          1 YES INACTIVE

       817460 23-3 -10

 

         2          1          2   52428800          1 NO  CURRENT

       817461 23-3 -10

 

         3          1          0   52428800          1 YES UNUSED

            0

 

情况四

  当数据库非一致情况下关闭,即使用shutdown abort或者数据库直接crash,丢失了目前的日志组,此时数据库由于不一致,需要读取目前的日志组进行恢复.这时

SQL> shutdown abort

ORACLE 例程已经关闭。

SQL> startup

ORACLE 例程已经启动。

 

Total System Global Area  448790528 bytes

Fixed Size                  1297220 bytes

Variable Size             130024636 bytes

Database Buffers          310378496 bytes

Redo Buffers                7090176 bytes

数据库装载完毕。

ORA-00313: 无法打开日志组 2 (用于线程 1) 的成员

ORA-00312: 联机日志 2 线程 1:

'D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\REDO02.LOG'

ORA-27041: 无法打开文件

OSD-04002: 无法打开文件

O/S-Error: (OS 2) 系统找不到指定的文件。

 

 

SQL> recover database using backup controlfile until cancel;

ORA-00279: 更改 817462 ( 03/23/2010 15:34:14 生成) 对于线程 1 是必需的

ORA-00289: 建议:

D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\TEST\ARCHIVELOG\2010_03_23\O1_MF_1_

 

2_%U_.ARC

ORA-00280: 更改 817462 (用于线程 1) 在序列 #2

 

 

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

cancel

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

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

ORA-01110: 数据文件 1: 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\SYSTEM01.DBF'

 

ORA-01112: 未启动介质恢复

 

SQL> alter system set "_allow_resetlogs_corruption"=true scope=spfile;

 

系统已更改。

 

SQL> shutdown immediate

ORA-01109: 数据库未打开

 

已经卸载数据库。

ORACLE 例程已经关闭。

SQL> startup mount

ORACLE 例程已经启动。

 

Total System Global Area  448790528 bytes

Fixed Size                  1297220 bytes

Variable Size             130024636 bytes

Database Buffers          310378496 bytes

Redo Buffers                7090176 bytes

数据库装载完毕。

SQL> recover database using backup controlfile until cancel;

ORA-00279: 更改 817462 ( 03/23/2010 15:34:14 生成) 对于线程 1 是必需的

ORA-00289: 建议:

D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\TEST\ARCHIVELOG\2010_03_23\O1_MF_1_

 

2_%U_.ARC

ORA-00280: 更改 817462 (用于线程 1) 在序列 #2

 

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

cancel

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

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

ORA-01110: 数据文件 1: 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\SYSTEM01.DBF'

 

ORA-01112: 未启动介质恢复

 

SQL> alter database open resetlogs;

alter database open resetlogs

*

1 行出现错误:

ORA-01092: ORACLE 实例终止。强制断开连接

此时数据库仍不能打开,根据oracle OD,只有做不完全恢复了.redo2即使生成了,数据库也无法打开.

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

转载于:http://blog.itpub.net/14474335/viewspace-630234/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值