redo文件破坏使用隐含参数恢复数据库


数据库在没有归档的情况下active状态日志损坏

SQL> select * from v$Log; 

   GROUP#    THREAD#  SEQUENCE#     BYTES    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIM

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

        1          1          2  52428800          1 NO  ACTIVE                  462055 07-SEP-12

        2          1          3  52428800          1 NO  CURRENT                 462062 07-SEP-12

        3          1          1  52428800          1 NO  ACTIVE                  461887 07-SEP-12

 

SQL> select * from v$logfile;

 

   GROUP# STATUS  TYPE    MEMBER                                   IS_

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

        3         ONLINE  /u01/tiger/oradata/orcl/redo03.log       NO

        2         ONLINE  /u01/tiger/oradata/orcl/redo02.log       NO

        1         ONLINE  /u01/tiger/oradata/orcl/redo01.log       NO

 

SQL> !cp /etc/passwd/u01/tiger/oradata/orcl/redo01.log

 

SQL> shut abort

Oracle instance shut down.

SQL> startup

ORACLE instance started.

 

Total System Global Area  314572800 bytes

Fixed Size                  1219136 bytes

Variable Size             109053376 bytes

Database Buffers          197132288 bytes

Redo Buffers                7168000 bytes

Database mounted.

ORA-00313: open failed for members of log group 1 of thread 1

ORA-00312: online log 1 thread 1:'/u01/tiger/oradata/orcl/redo01.log'

ORA-27046: file size is not a multiple oflogical block size

Additional information: 1

------启动的时候发现日志组1出现了问题

SQL> select * from v$log;

 

   GROUP#    THREAD#  SEQUENCE#     BYTES    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIM

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

        1          1          2  52428800          1 NO  ACTIVE                  462055 07-SEP-12

        3          1          1  52428800          1 NO  ACTIVE                  461887 07-SEP-12

        2          1          3  52428800          1 NO  CURRENT                 462062 07-SEP-12

----查看得出日志组1active状态

SQL> archive log list

Database log mode              No Archive Mode

Automatic archival             Disabled

Archive destination            USE_DB_RECOVERY_FILE_DEST

Oldest online log sequence     1

Current log sequence           3

------再看数据库的模式:得出是非归档状态

SQL> recover database;

ORA-00283: recovery session canceled due toerrors

ORA-00313: open failed for members of loggroup 1 of thread 1

ORA-00312: online log 1 thread 1:'/u01/tiger/oradata/orcl/redo01.log'

ORA-27046: file size is not a multiple oflogical block size

Additional information: 1

 

 

SQL> recover database until cancel;

ORA-00279: change 462055 generated at09/07/2012 14:03:23 needed for thread 1

ORA-00289: suggestion :/u01/tiger/flash_recovery_area/ORCL/archivelog/2012_09_07/o1_mf_1_2_%u_.arc

ORA-00280: change 462055 for thread 1 is insequence #2

 

 

Specify log: {<RET>=suggested |filename | AUTO | CANCEL}

 

ORA-00308: cannot open archived log '/u01/tiger/flash_recovery_area/ORCL/archivelog/2012_09_07/o1_mf_1_2_%u_.arc'

ORA-27037: unable to obtain file status

Linux Error: 2: No such file or directory

Additional information: 3

ORA-01547: warning: RECOVER succeeded butOPEN RESETLOGS would get error below

ORA-01194: file 1 needs more recovery to beconsistent

ORA-01110: data file 1:'/u01/tiger/oradata/orcl/system01.dbf'

------上面恢复的时候看到数据库不是归档但是在恢复的时候他们要找归档日志

这时候我们不恢复了直接启动数据库(借助隐含参数)设置此参数之后,在数据库Open过程中,Oracle会跳过某些一致性检查,从而使数据库可能跳过不一致状态,Open打开

Oracle的隐含参数只应该在测试环境或者在Oracle Support的支持下使用

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

System altered.

 

隐含参数:redo块损坏时

第一,如果损坏的是非当前redo文件并且已经归档我们可以使用

alter database clear logfile group 1清空该日志文件

第二,如果损坏的是非当前redo文件并且该文件组没有归档此时使用

alter database clear unarchived logfilegroup 1强行清空日志

第三,归档模式下当前日志的损坏有两种情况:

1、是数据库是正常关闭,日志文件中没有未决的事务需要实例恢复,当前日志组的损坏就可以直接用alter database clear unarchived logfile group n来重建。

2、是日志组中有活动的事务,数据库需要介质恢复,日志组需要用来同步,有两种补救办法

A:最好的办法就是通过不完全恢复,可以保证数据库的一致性,但是这种办法要求在归档方式下,并且有可用的备份

B:通过强制性恢复,但是可能导致数据库不一致。

SQL> shutdown immediate

ORA-01109: database not open

 

 

Database dismounted.

ORACLE instance shut down.

SQL> startup

ORACLE instance started.

 

Total System Global Area  314572800 bytes

Fixed Size                  1219136 bytes

Variable Size             109053376 bytes

Database Buffers          197132288 bytes

Redo Buffers                7168000 bytes

Database mounted.

ORA-01589: must use RESETLOGS orNORESETLOGS option for database open

 

 

SQL> alter database open resetlogs;

 

Database altered.

相关内容