ORA-00600: [kcratr_nab_less_than_odr]報錯解決方法

abin1703發表於2015-09-06

   今天早晨來到公司開啟自己的虛擬機器,啟動虛擬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文件獲取的指導性資訊,應該是由於伺服器異常斷電,導致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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章