ORACLE 使用"_ALLOW_RESETLOGS_CORRUPTION"进行崩溃恢复
Posted chendian0
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ORACLE 使用"_ALLOW_RESETLOGS_CORRUPTION"进行崩溃恢复相关的知识,希望对你有一定的参考价值。
什么情况可能使用该参数
有些时侯可能你的库处于非归档的模式下,而你的联机重做日志又currupted,你的数据文件不能完成完全的恢复。而这时当你试图打开数据库时,oracle提示你用resetlogs选项,当你使用该选项时oracle又不允许你使用该选项,总之你想打开数据库,可就是打不开。
1、最好做一个物理的库的全备
2、使用sqlplus 启动库至mount
sqlplus /nolog
sql>connect internal
sql>startup mount
3、确保所有的数据文件都处于"END BACKUP"状态
sql>set pages 0 feedback off lines 132
sql>spool alter_df.sql
sql>SELECT ‘alter database datafile ‘||file_name||‘ END BACKUP;‘ from v$datafile;
sql>spool off
sql>@alter_df.sql
4、试着打开数据库
sql>alter database open;
如数据库成功打开,余下的都不需要做了,到此为止
5、如果你在打开时被要求进行恢复,使用"UNTIL CANCEL"这种进行恢复,然后再发出ALTER DATABASE OPEN RESETLOGS这个命令
sql>recover database until cancel;
sql>alter database open resetlogs;
6、如果数据库仍不能打开,把库down掉
sql>shutdown immediate
7、在init.ora中加入如下参数
_allow_resetlogs_corruption=TRUE
8、执行如下语句
sql>connect internal
sql>startup mount
sql>@alter_df.sql
sql>alter database open
9、如在alter database open时仍旧报错,使用until cancel恢复
sql>recover database until cancel;
sql>alter database open resetlogs;
10、经过"9",数据库一定被打开了,数据库被打开后,马上执行一个full export
11、down掉库,去掉_all_resetlogs_corrupt参数
12、重建库
13、import并完成恢复
14、建议执行一下ANALYZE TABLE ...VALIDATE STRUCTURE CASCADE;
---------------------
作者:茄肥猫
来源:CSDN
原文:https://blog.csdn.net/lively1982/article/details/18267241
版权声明:本文为博主原创文章,转载请附上博文链接!
=======================================================================================
使用_allow_resetlogs_corruption 打开无归档日志 rman 备份库,运维DBA反映服务器宕机后,开启数据库报错ORA-01194 ORA-01110,
分析原因为Oracle SCN不一致导致数据库无法启动,使用 _allow_resetlogs_corruption 打开数据库
1.rman还原恢复操作
--还原数据库 RMAN> restore database; --恢复数据库 RMAN> recover database; Starting recover at 2012-03-08 21:20:45 using target database control file instead of recovery catalog allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=65 device type=DISK starting media recovery RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03002: failure of recover command at 03/08/2012 21:20:47 RMAN-06053: unable to perform media recovery because of missing log RMAN-06025: no backup of archived log for thread 1 with sequence 2936 and starting SCN of 25991695 found to restore RMAN-06025: no backup of archived log for thread 1 with sequence 2935 and starting SCN of 25991652 found to restore RMAN-06025: no backup of archived log for thread 1 with sequence 2934 and starting SCN of 25991649 found to restore …………………… RMAN-06025: no backup of archived log for thread 1 with sequence 2902 and starting SCN of 25991156 found to restore 这里报日志缺少,实际上是备份的数据库文件后,没有备份归档日志,归档日志全部丢失
进行不完全恢复
SQL> recover database until cancel; ORA-00279: change 25991194 generated at 03/08/2012 20:33:58 needed for thread 1 ORA-00289: suggestion : /opt/oracle/oradata/archivelog/chf/1_2902_752334071.dbf ORA-00280: change 25991194 for thread 1 is in sequence #2902 Specify log: {=suggested | filename | AUTO | CANCEL} cancel ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below ORA-01194: file 1 needs more recovery to be consistent ORA-01110: data file 1: ‘/opt/oracle/oradata/chf/system01.dbf‘ ORA-01112: media recovery not started SQL> alter database open resetlogs; alter database open resetlogs * ERROR at line 1: ORA-01194: file 1 needs more recovery to be consistent ORA-01110: data file 1: ‘/opt/oracle/oradata/chf/system01.dbf‘
2.查看相关SCN
SQL> select file#,to_char(checkpoint_change#,‘999999999999‘) from v$datafile; FILE# TO_CHAR(CHECK ---------- ------------- 1 25992214 2 25992214 3 25992214 4 25992214 5 25992214 6 25992214 7 25992214 8 25992214 9 25992214 10 25992214 11 25992214 FILE# TO_CHAR(CHECK ---------- ------------- 13 25992214 14 25992214 13 rows selected. SQL> select file#,online_status,to_char(change#,‘999999999999‘) from v$recover_file; FILE# ONLINE_ TO_CHAR(CHANG ---------- ------- ------------- 1 ONLINE 25991194 2 ONLINE 25991194 3 ONLINE 25991194 4 ONLINE 25991194 5 ONLINE 25991194 6 ONLINE 25991194 7 ONLINE 25991194 8 ONLINE 25991194 9 ONLINE 25991194 10 ONLINE 25991194 11 ONLINE 25991194 FILE# ONLINE_ TO_CHAR(CHANG ---------- ------- ------------- 13 ONLINE 25991194 14 ONLINE 25991194 13 rows selected. SQL> select file#,to_char(checkpoint_change#,‘999999999999‘) from v$datafile_header; FILE# TO_CHAR(CHECK ---------- ------------- 1 25991194 2 25991194 3 25991194 4 25991194 5 25991194 6 25991194 7 25991194 8 25991194 9 25991194 10 25991194 11 25991194 FILE# TO_CHAR(CHECK ---------- ------------- 13 25991194 14 25991194 13 rows selected. --发现数据文件scn和控制文件不一致,重建控制文件,然后查询相关scn SQL> select file#,to_char(checkpoint_change#,‘999999999999‘) from v$datafile; FILE# TO_CHAR(CHECK ---------- ------------- 1 25991194 2 25991194 3 25991194 4 25991194 5 25991194 6 25991194 7 25991194 8 25991194 9 25991194 10 25991194 11 25991194 FILE# TO_CHAR(CHECK ---------- ------------- 13 25991194 14 25991194 13 rows selected. SQL> select file#,online_status,to_char(change#,‘999999999999‘) from v$recover_file; FILE# ONLINE_ TO_CHAR(CHANG ---------- ------- ------------- 1 ONLINE 25991194 2 ONLINE 25991194 3 ONLINE 25991194 4 ONLINE 25991194 5 ONLINE 25991194 6 ONLINE 25991194 7 ONLINE 25991194 8 ONLINE 25991194 9 ONLINE 25991194 10 ONLINE 25991194 11 ONLINE 25991194 FILE# ONLINE_ TO_CHAR(CHANG ---------- ------- ------------- 13 ONLINE 25991194 14 ONLINE 25991194 13 rows selected. SQL> select file#,to_char(checkpoint_change#,‘999999999999‘) from v$datafile_header; FILE# TO_CHAR(CHECK ---------- ------------- 1 25991194 2 25991194 3 25991194 4 25991194 5 25991194 6 25991194 7 25991194 8 25991194 9 25991194 10 25991194 11 25991194 FILE# TO_CHAR(CHECK ---------- ------------- 13 25991194 14 25991194 13 rows selected. --此时所有scn均一致
3.尝试打开数据库
SQL> alter database open resetlogs; alter database open resetlogs * ERROR at line 1: ORA-01194: file 1 needs more recovery to be consistent ORA-01110: data file 1: ‘/opt/oracle/oradata/chf/system01.dbf‘ SQL> recover database using backup controlfile until cancel; ORA-00279: change 25991194 generated at 03/08/2012 20:33:58 needed for thread 1 ORA-00289: suggestion : /opt/oracle/oradata/archivelog/chf/1_2902_752334071.dbf ORA-00280: change 25991194 for thread 1 is in sequence #2902 Specify log: {=suggested | filename | AUTO | CANCEL} cancel ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below ORA-01194: file 1 needs more recovery to be consistent ORA-01110: data file 1: ‘/opt/oracle/oradata/chf/system01.dbf‘ ORA-01112: media recovery not started SQL> alter database open resetlogs; alter database open resetlogs * ERROR at line 1: ORA-01194: file 1 needs more recovery to be consistent ORA-01110: data file 1: ‘/opt/oracle/oradata/chf/system01.dbf‘
5.使用隐含参数打开数据库
SQL> create pfile=‘/tmp/pfile‘ from spfile; File created. -------/tmp/pfile中加上---------- _allow_resetlogs_corruption= TRUE --------------------------------- SQL> startup mount pfile=‘/tmp/pfile‘ force ORACLE instance started. Total System Global Area 622149632 bytes Fixed Size 2230912 bytes Variable Size 419431808 bytes Database Buffers 192937984 bytes Redo Buffers 7548928 bytes Database mounted. SQL> alter database open resetlogs; Database altered. SQL> select open_mode from v$database; OPEN_MODE -------------------- READ WRITE
总结
这次的试验没有多少实际意义,但是可以说明几个问题:
1.所有的数据文件的scn都一致,甚至和控制文件的也一致,数据库不一定可以open成功
(怀疑是数据文件中的scn大于data header scn)
2.对于这样的问题,如果使用bbed修改所有数据文件header的scn不知道是否可以解决
3.如果rman只备份了数据文件而没有任何一个归档日志,数据库通过隐含参数还是可以open,抢救数据
以上是关于ORACLE 使用"_ALLOW_RESETLOGS_CORRUPTION"进行崩溃恢复的主要内容,如果未能解决你的问题,请参考以下文章
小弟使用OTL函数,动态拼凑SQL查询oracle数据库数据问题
在Oracle中,通过一个INSERT ALL语句批量插入数据
VS2008连接oracle"oracle ora-12504:tns 监听程序在connect_data中未获得service _name"