什么情况可能使用该参数
 有些时侯可能你的库处于非归档的模式下,而你的联机重做日志又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<sid>.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;

解决方案 »

  1.   

    这种办法仅仅是在没有办法的办法后使用,满足以下条件
    1、没有备份
    2、损坏或丢失的当前的联机日志
    3、当前日志中包含未提交或回滚的事务。
    注意,此方法不仅是在不归档数据库中,如果归档了,但是没有任何可用备份也是一样。注意,当前联机日志的损坏或丢失对数据库的打击的巨大的,
    数据库的一致性的保证就是联机日志,而联机日志丢了,数据库的一致性可能就没有保证
    这也就是以上步骤中从10开始的原因。如果损坏的不是当前日志,或当前日志没有同步的需要(没有未完成的事务)
    可以通过
    alter database clear [unarchived] logfile group n
    来重建日志组
      

  2.   

    不敢苟同!
    不敢苟同!_ALLOW_RESETLOGS_CORRUPTION我也用过,不是像贴子中说的10一定能成功,如果数据库失败的时候报的是ora-368错误,这样做肯定不行,请大家注意!