ORA-00600: 内部错误代码,参数: [6122]


分析过程:
1、tjcw数据库后台alert告警大量出现如下的ora-00600错误告警
        Fri Jul 06 15:59:13 2012
        Errors in file f:\Oracle\admin\tjcw\udump\tjcw_ora_3200.trc:
        ORA-00600: 内部错误代码,参数: [6122], [0], [1], [0], [], [], [], []
       Recovery of Online Redo Log: Thread 1 Group 2 Seq 3588 Reading mem 0
       Mem# 0 errs 0: F:\ORACLE\ORADATA\TJCW\REDO02.LOG
2、从 f:\oracle\admin\tjcw\udump\tjcw_ora_3200.trc日志可以看到如下的信息。
     Block header dump:  0x0248f58c
       Object id on Block? Y
      seg/obj: 0x19d7e  csc: 0xbae.b4053409  itc: 120  flg: E  typ: 2 - INDEX
       brn: 0  bdba: 0x248f589 ver: 0x01
       inc: 0  exflg: 0
3、从oracle metalink的doc[ID 99300.1],可以看出ora-00600 [6122]和索引损坏有关。
4、从上面2,3两步基本上可以确认是索引损坏导致600错误。
5、现在需要证实是否真的是索引损坏导致的错误。
      A. 从seg/obj: 0x19d7e可以计算出这个Oracle的对象的object_id,因为是16机制,
           需要换算成10机制。
          0x19d7e=14+7*16+13*16*16+9*16*16*16+1*16*16*16*16=105854
      B. 找出是什么数据库对象。
          SQL> select owenr,object_name,object_type from dba_objects where     
                    object_id=105854;                                                                                  
          OWNER       OBJECT_NAME       OBJECT_TYPE                                         
            -----------          ---------------             ----------------------------------
          BDCWYB      SYS_EVENT_IDX_1   INDEX
     C. 这个索引存放在哪些Datafile上面。
          SQL>select distinct FILE_ID from dba_extents where wner='BDCWYB' and
            segment_name='SYS_EVENT_IDX_1';
         FILE_ID
           ----------
            9        
       SQL> select file_name from dba_data_files where file_id=9;     
           FILE_NAME                                                      
          ---------------------------------------------------------------
          F:\ORACLE\ORADATA\TJCW\USERS01.DBF  
    D. 是用Oracle dbv工具测试user01.dbf是否真的存在坏块. 从失败的页总数
        (索引):1再次确认存在索引坏块.                                                       
      C:\ >dbv file=F:\ORACLE\ORADATA\TJCW\USERS01.DBF
             blocksize=8192                                                                                           
       DBVERIFY: Release 9.2.0.1.0 - Production on 星期五 7月 6 15:46:23   
        2012                                          
       Copyright (c) 1982, 2002, Oracle Corporation.  All rights  
     reserved.                                                                                                                               
      DBVERIFY - 验证正在开始 : FILE =   
       F:\ORACLE\ORADATA\TJCW\USERS01.DBF                              
      Block Checking: DBA = 38335884, Block Type = KTB-managed data 
      block                              
    **** actual rows locked by itl 1  = 1 != # in trans. header = 2                                  
     ---- end index block validation                                                                  
      页 587148 失败,校验代码为 6401                                                                                                                                                                  
      DBVERIFY - 验证完成                                                                              
      检查的页总数         :589600                                                                    
      处理的页总数(数据):455602                                                                     
      失败的页总数(数据):0                                                                          
      处理的页总数(索引):113755                                                                     
      失败的页总数(索引):1                                                                          
      处理的页总数(其它):12760                                                                      
      处理的总页数 (段)  : 0                                                                           
      失败的总页数 (段)  : 0                                                                           
      空的页总数            :7483                                                                     
     标记为损坏的总页数:0                                                                            
    汇入的页总数           :0  
6、从上面的分析得知,确实是索引坏块导致的600错误,故需要重建索引,消除600告警.
处理步骤:
1. 从上面的分析得知确实是索引坏块导致的600错误,现在重建索引,不能使用rebuild index,因为索引损坏的部分是索引段头,rebuild index会报如下的错误。
      SQL> alter index BDCWYB.SYS_EVENT_IDX_1 
              rebuild;                                                                                         
    alter index BDCWYB.SYS_EVENT_IDX_1 rebuild         c                
*                                                                  
    ERROR 位于第 1 行:                                                 
   ORA-00600: 内部错误代码,参数: [6122], [0], [1], [0], [], [], [], []
    drop index BDCWYB.SYS_EVENT_IDX_1;
    create index BDCWYB.SYS_EVENT_IDX_1 on BDCWYB.SYS_EVENT(EVT_GUID) 
    tablespace users;
2. 索引重建好了之后之后,再次检查是否还存在坏块,现在无坏块。
       C:\>dbv file=F:\ORACLE\ORADATA\TJCW\USERS01.DBF blocksize=8192
     DBVERIFY: Release 9.2.0.1.0 - Production on 星期五 7月 6 16:35:38 2012
     Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.
     DBVERIFY - 验证正在开始 : FILE = F:\ORACLE\ORADATA\TJCW\USERS01.DBF
    DBVERIFY - 验证完成
      检查的页总数         :590720
      处理的页总数(数据):455602
      失败的页总数(数据):0
      处理的页总数(索引):114951
      失败的页总数(索引):0
      处理的页总数(其它):12760
      处理的总页数 (段)  : 0
      失败的总页数 (段)  : 0
      空的页总数            :7407
      标记为损坏的总页数:0
      汇入的页总数           :0

相关内容