ORA-00600 kcratr_nab_less_than_odr ORA-00600 [4194]

abstractcyj發表於2019-07-02

    7月1日, 客戶告知我,一個資料庫打不開了,他的描述是控制檔案丟失

    登入主機,嘗試啟動, 在告警日誌中出現瞭如下錯誤:


   

  • Errors in file e:\app\administrator\diag\rdbms\orcl\orcl\trace\orcl_ora_7456.trc  (incident=26610):

  • ORA-00600: 內部錯誤程式碼, 引數: [kcratr_nab_less_than_odr], [1], [46799], [18672], [19063], [], [], [], [], [], [], []

  • Incident details in: e:\app\administrator\diag\rdbms\orcl\orcl\incident\incdir_26610\orcl_ora_7456_i26610.trc

  • Aborting crash recovery due to error 600

  • Errors in file e:\app\administrator\diag\rdbms\orcl\orcl\trace\orcl_ora_7456.trc:

  • ORA-00600: 內部錯誤程式碼, 引數: [kcratr_nab_less_than_odr], [1], [46799], [18672], [19063], [], [], [], [], [], [], []

  • Errors in file e:\app\administrator\diag\rdbms\orcl\orcl\trace\orcl_ora_7456.trc:

  • ORA-00600: 內部錯誤程式碼, 引數: [kcratr_nab_less_than_odr], [1], [46799], [18672], [19063], [], [], [], [], [], [], []

 

   此錯誤是說,資料庫需要恢復rba至19063, 但是因為某種原因,只能利用sequence#為46799的redo log恢復至18672, 從而出錯。

   解決的方法是重建控制檔案並recover database。

   操作之前,最好先備份原來的資料檔案,redo與控制檔案。 首先嚐試了用resetlogs選項重建控制檔案,資料庫不能開啟。最後報錯:

   

Database Characterset is ZHS16GBK

Errors in file e:\app\administrator\diag\rdbms\orcl\orcl\trace\orcl_smon_6528.trc  (incident=28964):

ORA-00600: internal error code, arguments: [4194], [], [], [], [], [], [], [], [], [], [], []

Incident details in: e:\app\administrator\diag\rdbms\orcl\orcl\incident\incdir_28964\orcl_smon_6528_i28964.trc

Doing block recovery for file 3 block 174711

Resuming block recovery (PMON) for file 3 block 174711

Block recovery from logseq 46800, block 104 to scn 125738712


Errors in file e:\app\administrator\diag\rdbms\orcl\orcl\trace\orcl_ora_8284.trc  (incident=29016):

ORA-00600: 內部錯誤程式碼, 引數: [4194], [], [], [], [], [], [], [], [], [], [], []

ORA-00600: 內部錯誤程式碼, 引數: [4194], [], [], [], [], [], [], [], [], [], [], []

ORA-00600: 內部錯誤程式碼, 引數: [4194], [], [], [], [], [], [], [], [], [], [], []

ORA-00600: 內部錯誤程式碼, 引數: [4194], [], [], [], [], [], [], [], [], [], [], []


   啟動資料庫至nomount, 執行以下指令碼

      

CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS  NOARCHIVELOG
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 8
    MAXLOGHISTORY 4672
LOGFILE
  GROUP 1 'E:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO01.LOG'  SIZE 50M BLOCKSIZE 512,
  GROUP 2 'E:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO02.LOG'  SIZE 50M BLOCKSIZE 512,
  GROUP 3 'E:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO03.LOG'  SIZE 50M BLOCKSIZE 512
-- STANDBY LOGFILE
DATAFILE
  'E:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSTEM01.DBF',
  'E:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSAUX01.DBF',
  'E:\APP\ADMINISTRATOR\ORADATA\ORCL\UNDOTBS01.DBF',
  'E:\APP\ADMINISTRATOR\ORADATA\ORCL\USERS01.DBF',
  'E:\APP\ADMINISTRATOR\ORADATA\ORCL\EXAMPLE01.DBF',
CHARACTER SET ZHS16GBK

並執行recover database, 資料庫可以開啟,但是出現了新的問題, 開啟之後直接拋錯, 例項中止.

Errors in file e:\app\administrator\diag\rdbms\orcl\orcl\trace\orcl_ora_6184.trc  (incident=30226):

ORA-00600: 內部錯誤程式碼, 引數: [4194], [], [], [], [], [], [], [], [], [], [], []

ORA-01092: ORACLE 例項終止。強制斷開連線

ORA-00600: 內部錯誤程式碼, 引數: [4194], [], [], [], [], [], [], [], [], [], [], []

ORA-00600: 內部錯誤程式碼, 引數: [4194], [], [], [], [], [], [], [], [], [], [], []

ORA-00600: 內部錯誤程式碼, 引數: [4194], [], [], [], [], [], [], [], [], [], [], []

ORA-00600: 內部錯誤程式碼, 引數: [4194], [], [], [], [], [], [], [], [], [], [], []


這裡是資料庫的UNDO段出現了問題,需要通過將UNDO_MANAGEMENT設定為manual, 如下:

*.undo_management='MANUAL'

*.undo_tablespace='UNDOTBS1'


建立pfile, 修改之後,可以開啟資料庫.此時, 資料庫告警日誌中出現壞塊的告警:

Errors in file e:\app\administrator\diag\rdbms\orcl\orcl\trace\orcl_mmon_4624.trc  (incident=32607):

ORA-00600: internal error code, arguments: [4194], [], [], [], [], [], [], [], [], [], [], []

Incident details in: e:\app\administrator\diag\rdbms\orcl\orcl\incident\incdir_32607\orcl_mmon_4624_i32607.trc

Errors in file e:\app\administrator\diag\rdbms\orcl\orcl\trace\orcl_smon_1528.trc  (incident=32592):

ORA-01578: ORACLE data block corrupted (file # 2, block # 2)

ORA-01110: data file 2: 'E:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSAUX01.DBF'



此後將需要的業務資料通過exp匯出, 並重建資料庫, 問題最終解決


Best practice to create a new undo tablespace.
This method includes segment check.

1. Create pfile from spfile to edit
SQL> Create pfile='/tmp/initsid.ora' from spfile;

2. Shutdown the instance

3. set the following parameters in the pfile /tmp/initsid.ora
    undo_management = manual
    event = '10513 trace name context forever, level 2'

4. SQL>>startup restrict pfile='/tmp/initsid.ora'

5. SQL>select tablespace_name, status, segment_name from dba_rollback_segs where status != 'OFFLINE';

This is critical - we are looking for all undo segments to be offline - System will always be online.

If any are 'PARTLY AVAILABLE' or 'NEEDS RECOVERY' - Please open an issue with Oracle Support or update the current SR.  There are many options from this moment and Oracle Support Analyst can offer different solutions for the bad undo segments.

If all offline then continue to the next step

6. Create new undo tablespace - example
SQL>create undo tablespace <new undo tablespace> datafile <datafile> size 2000M;

7. Drop old undo tablespace
SQL>drop tablespace <old undo tablespace> including contents and datafiles;

8. SQL>shutdown immediate;

9 SQL>startup nomount;  --> Using your Original spfile

10. Modify the spfile with the new undo tablespace name

SQL> Alter system set undo_tablespace = '<new tablespace created in step 6>' scope=spfile;

11. SQL>shutdown immediate;

12. SQL>startup;  --> Using spfile


參考:  https://www.cnblogs.com/kerrycode/p/6085447.html  (ORA-00600 4194)

         http://www.xifenfei.com/2012/01/ora-00600kcratr_nab_less_than_odr%E6%95%85%E9%9A%9C%E8%A7%A3%E5%86%B3.html  (ora-00600

kcratr_nab_less_than_odr)

        


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8520577/viewspace-2649286/,如需轉載,請註明出處,否則將追究法律責任。

相關文章