redo文件破坏使用隐含参数恢复数据库
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
----查看得出日志组1是active状态
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.
评论暂时关闭