ORA-00600: [kcratr_nab_less_than_odr]报错解决方法

   今天早晨来到公司打开自己的虚拟机,启动虚拟oracle RAC数据库竟然报错,无语了,集群是正常启动,但是数据库里怎么也起不来,于是查看alter的日志进行具体的分析和判断


   查看alter日志

 Sun Sep 06 18:03:07 2015
alter database recover datafile list clear
Completed: alter database recover datafile list clear
alter database recover if needed
 datafile 1
Media Recovery Start
Serial Media Recovery started
Recovery of Online Redo Log: Thread 1 Group 1 Seq 21 Reading mem 0
  Mem# 0: +DATA/test/onlinelog/group_1.261.889231401
Recovery of Online Redo Log: Thread 2 Group 4 Seq 18 Reading mem 0
  Mem# 0: +DATA/test/onlinelog/group_4.260.889231861
Errors in file /u01/app/oracle/diag/rdbms/test/test1/trace/test1_ora_8767.trc  (incident=14638):
ORA-00600: internal error code, arguments: [krr_read_5], [21], [43526], [], [], [], [], [], [], [], [], []  --------------alter 的报错
Incident details in: /u01/app/oracle/diag/rdbms/test/test1/incident/incdir_14638/test1_ora_8767_i14638.trc         -----详细在查看test_ora_8767_i14638.trc这个文件
Use ADRCI or Support Workbench to package the incident.
See Note 411.1 at My Oracle Support for error and packaging details.


查看test1_ora_8767_i14638.trc     文件


   WARNING! Crash recovery of thread 1 seq 21 is
ending at redo block 43526 but should not have ended before
redo block 43531
Incident 14661 created, dump file: /u01/app/oracle/diag/rdbms/test/test1/incident/incdir_14661/test1_ora_7962_i14661.trc
ORA-00600: internal error code, arguments: [kcratr_nab_less_than_odr], [1], [21], [43526], [43531], [], [], [], [], [], [], []



结合ALERT里的错误ORA-00600: internal error code, arguments: [kcratr_nab_less_than_odr], [1], [21], [43526], [43531], 和TRACE里的错误提示WARNING! Crash recovery of thread 1 seq 21 is ending at redo block 43526 but should not have ended before redo block 43531 以及查询MetaLink文档ID 1299564.1获取的指导性信息,应该是由于服务器异常断电,导致LGWR写联机日志文件时失败,下次重新启动数据库时,需要做实例级恢复,而又无法从联机日志文件里获取到这些redo信息,因为上次断电时,写日志失败了。

          那么ORA-00600的错误里,那几个参数 [1], [21], [43526], [43531]又表示什么呢? 结合本故障场景分析,原来是1代表是线程号,实例需要恢复日志序列号为21的联机日志文件,需要恢复到编号为43531的日志块,而实际上只能恢复到第43526个日志块儿,所以库就启不来了。不过,从当前日志文件信息,可以看到,当前日志组的确是21:


select * from v$log;


  GROUP#    THREAD#  SEQUENCE#      BYTES  BLOCKSIZE   MEMBERS ARC STATUS        FIRST_CHANGE# FIRST_TIM NEXT_CHANGE# NEXT_TIME
---------- ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- --------- ------------ ---------
  1                       1                    21   52428800    512  1 NO  CURRENT       1445236 06-SEP-15  2.8147E+14
  2                       1                    20   52428800    512  1 YES UNUSED      0     0
  3                      2                     18  52428800    512  1 YES INACTIVE       1445969 06-SEP-15     1452593 06-SEP-15
  4                      2                     19   52428800    512  1 NO  CURRENT       1452610 06-SEP-15  2.8147E+14 06-SEP-15



select * from v$logfile;


 GROUP# STATUS  TYPE    MEMBER           IS_
---------- ------- ------- -------------------------------------------------- ---
  2    ONLINE  +DATA/test/onlinelog/group_2.262.889231403       NO
  1    ONLINE  +DATA/test/onlinelog/group_1.261.889231401       NO
  3    ONLINE  +DATA/test/onlinelog/group_3.263.889231859       NO
  4    ONLINE  +DATA/test/onlinelog/group_4.260.889231861       NO



解决方法:

sql>recover database until cancel using backup controlfile;

   Specify log: {=suggested | filename | AUTO | CANCEL}


+DATA/test/onlinelog/group_1.261.889231401


sql>alter database open resetlogs;


稍等一会数据库open了


SQL> select status from v$instance;

STATUS
------------
OPEN


另一个节点也可以startup了

成功解决

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30345407/viewspace-1792170/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/30345407/viewspace-1792170/

你可能感兴趣的:(数据库,运维)