redo文件破坏使用隐含参数恢复数据库
2012-09-07 14:18
274 查看
数据库在没有归档的情况下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.
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.
相关文章推荐
- ORACLE 11G 中没有参数文件和控制文件如何通过rman恢复数据库
- 未启用归档数据库非数据文件(spfile,control,redo,undo,temp)全丢失的恢复方法
- 使用java程序定时备份数据库文件和恢复数据库文件
- 判断数据库启动时使用的参数文件类型的方法
- 使用mysql-bin.0000xx日志文件恢复数据库
- 使用XML作为项目的配置文件使用,并解析之,获得数据作为链接数据库的参数
- 使用redo.log完全恢复数据库
- 从备份集恢复参数文件、控制文件、数据文件,redo文件、密码文件
- redo文件破坏恢复
- sql中遇到非正常操作引起的数据库文件破坏的恢复
- 使用 ibdata 和 frm 文件恢复 MySQL 数据库
- 使用XML作为项目的配置文件使用,并解析之,获得数据作为链接数据库的参数
- 使用从别的机器拷贝来的SqlServer2000 mdf文件恢复数据库
- 数据库恢复起点判定(使用新控制文件)
- 使用NBUnocatalog方式备份的数据库从磁带机中恢复控制文件
- oracle隐含参数“_allow_resetlogs_corruption”的用法(断电恢复,文件毁坏不能启动)
- 使用隐含参数模拟ORACLE数据库服务器掉,重做日志丢失打开数据库
- 通过使用resetlog恢复控制文件恢复数据库
- oracle数据库中的内容全部丢失,只有RMAN的备份文件(包括数据,参数,控制文件),恢复数据库到备份状态
- 数据库恢复起点判定(使用旧控制文件)