Oracle索引修復 ,ORA-00600: internal error code, arguments: [6200],

DBA_每日記發表於2019-10-21

Oracle索引修復 ,ORA-00600: internal error code, arguments: [6200],

問題背景:客戶反饋DB每天產生的incident日誌很多,需要排查原因

檢視alert日誌發現大量的ORA-07445、ORA-00600錯誤


Errors in file /data/oracle/diag/rdbms/bydata/bydata/trace/bydata_mmon_3667.trc  (incident=111052):

ORA-00600: internal error code, arguments: [6200], [18446744073709551615], [], [], [], [], [], [], [], [], [], []

Exception [type: SIGSEGV, SI_KERNEL(general_protection)] [ADDR:0x0] [PC:0x2278EA1, kghstack_err()+85] [flags: 0x0, count: 1]

Errors in file /data/oracle/diag/rdbms/bydata/bydata/trace/bydata_mmon_3667.trc  (incident=111053):

ORA-07445: exception encountered: core dump [kghstack_err()+85] [SIGSEGV] [ADDR:0x0] [PC:0x2278EA1] [SI_KERNEL(general_protection)] []

ORA-00600: internal error code, arguments: [6200], [18446744073709551615], [], [], [], [], [], [], [], [], [], []

Incident details in: /data/oracle/diag/rdbms/bydata/bydata/incident/incdir_111053/bydata_mmon_3667_i111053.trc

Mon Oct 21 09:50:30 2019


一般情況下,ORA-600被證明為oracle的內部錯誤,通常由資料檔案的壞塊或者oracle的bug引起

首先檢視是否有資料檔案壞塊

[oracle@OA_oracle ~]$ dbv file =/data/oracle/oradata/bydata/SYSAUX01.DBF

DBVERIFY: Release 11.2.0.1.0 - Production on Mon Oct 21 15:12:29 2019

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.


DBVERIFY - Verification starting : FILE = /data/oracle/oradata/bydata/SYSAUX01.DBF

Block Checking: DBA = 8522163, Block Type = KTB-managed data block

**** row 0: row length 35 past end of block

**** row 0: row skipped so other stats may be wrong

**** row 1: row length 7641 past end of block

**** row 1: row skipped so other stats may be wrong

**** row 2: row length 1002 past end of block

**** row 2: row skipped so other stats may be wrong

**** row 3: row length 1951 past end of block

**** row 3: row skipped so other stats may be wrong

**** row 4: row length 441 past end of block

**** actual free space = -277001 < kdxcoavs = 29

**** key (begin=0x594, len=1438) overlaps with another

        begin = 0x5ae len = 1428

---- end index block validation

Page 133555 failed with check code 6401



DBVERIFY - Verification complete


Total Pages Examined         : 144640

Total Pages Processed (Data) : 47272

Total Pages Failing   (Data) : 0

Total Pages Processed (Index): 39600

Total Pages Failing   (Index): 1       ---需要留意

Total Pages Processed (Lob)  : 9592

Total Pages Failing   (Lob)  : 0

Total Pages Processed (Other): 26419

Total Pages Processed (Seg)  : 0

Total Pages Failing   (Seg)  : 0

Total Pages Empty            : 21757

Total Pages Marked Corrupt   : 0

Total Pages Influx           : 0

Total Pages Encrypted        : 0

Highest block SCN            : 296083261 (0.296083261)

這次檢查的有可能存在訛誤索引的資料檔案是sysaux,對於系統檔案無法通過重建索引處理,建議客戶重新恢復一個庫


2> 如何在ORA-600 [6200] 報錯中定位訛誤的索引

描述:

在訪問某張表時,你遇到ORA-600 [6200]報錯,這個報錯意味著相關索引被探測到存在訛誤。

標準的解決方法是drop掉索引併為這張表重建所有相關索引。

不過,我們可以從trace檔案當時生成的報錯中定位哪個索引出的問題。


例如:

例子中顯示的是從trace檔案中看到的索引報錯資訊。

    trace file報錯資訊:


      ksedmp: internal or fatal error

      ORA-00600: internal error code, arguments: [6200], [260], [262], [], [], [], [], []

     

      Block header dump: dba: 0x7b404757

       Object id on Block? Y

       seg/obj: 0x6190 csc: 0x00.4e537b5  itc: 2  flg: -typ: 2 - INDEX

           fsl: 0  fnx: 0x0 


    注意這裡seg/obj指出的Hex值,我們可以將其轉為十進位制值,這個值就是物件id號。

    0x6190 也就是24976   Hex = 00006190  Octal = 00000060620

    這樣我們就能在DBA_OBJECTS檢視中找到索引物件了.

    SVRMGR> SELECT OBJECT_ID, OBJECT_NAME FROM DBA_OBJECTS

              WHERE DATA_OBJECT_ID  = '24976';

     

    DATA_OBJEC OBJECT_NAME                                                                 

    ---------- ------------------------------------------------------

         24976 tab1_index5

 這個索引就是我們應該去重建的那個。


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

相關文章