記一次ORA-600[13011]

SunOS 5.10
Oracle 10.2.0.2.0
開發環境某一數據庫出現ora-600報錯。

alert.log中的報錯信息:
Thu Nov 13 15:11:43 2014
Errors in file /oracle/admin/sun/bdump/sun_j000_29589.trc:
ORA-00600: internal error code, arguments: [13011], [298314], [4277430], [0], [4277430], [17], [], []
Thu Nov 13 15:11:45 2014
Errors in file /oracle/admin/sun/bdump/sun_j000_29589.trc:
ORA-00600: internal error code, arguments: [], [], [], [], [], [], [], []
ORA-06512: at "REPADMIN.CEF_PUSH_PURGE", line 145
ORA-06512: at line 1

  /oracle/admin/sun/bdump/sun_j000_29589.trc trace文件中看到當前SQL是刪除system.def$_aqcall的一條記錄:
ksedmp: internal or fatal error
ORA-00600: internal error code, arguments: [13011], [298314], [4277430], [0], [4277430], [17], [], []
Current SQL statement for this session:
delete from system.def$_aqcall     where (enq_tid = :1)
根據MOS ORA -600 [13011] "Problem  occurred  when  trying  to  delete  a  row " (文檔 ID  28184.1) 各參數對比;


SQL> select object_type,object_name,owner from dba_objects where data_object_id='298314';

OBJECT_TYPE         OBJECT_NAME                              OWNER
------------------- ---------------------------------------- ------------------------------
TABLE               DEF$_AQCALL                              SYSTEM

關於DEF$_AQCALL表,該表是高級複製的默認隊列表,從 ORA-06512: at "REPADMIN.CEF_PUSH_PURGE", line 145這邊也能夠看出確實是高級複製出現了問題,複製及時完成後,該表會被清空。
出現該ora-600報錯是由於在更新語句中使用索引找到一條記錄,而後到表中去查詢時該記錄不存在,出現此報錯,通常解決方法是重建索引。----該段引自xifenfei( http://www.xifenfei.com/2623.html

首先對錶作分析:
SQL> analyze table system.DEF$_AQCALL validate structure cascade;
analyze table system.DEF$_AQCALL validate structure cascade
*
ERROR at line 1:
ORA-01499: table/index cross reference failure - see trace file


SQL> select index_name,owner,status from dba_indexes where table_name='DEF$_AQCALL';

INDEX_NAME                     OWNER                          STATUS
------------------------------ ------------------------------ --------
SYS_IL0000004874C00025$$       SYSTEM                         VALID
SYS_C001407                    SYSTEM                         VALID
DEF$_TRANORDER                 SYSTEM                         VALID

SQL> select index_name,column_name,column_position from dba_ind_columns where table_name='DEF$_AQCALL';

INDEX_NAME                     COLUMN_NAME                    COLUMN_POSITION
------------------------------ ------------------------------ ---------------
SYS_C001407                    ENQ_TID                                      1
SYS_C001407                    STEP_NO                                      2
DEF$_TRANORDER                 CSCN                                         1
DEF$_TRANORDER                 ENQ_TID                                      2

比對數據:全表掃描和走索引時數據對比:
SQL> select /*+ index(t DEF$_TRANORDER) */ CSCN,ENQ_TID from system.DEF$_AQCALL where CSCN is not null or ENQ_TID is not null
  2  minus
  3  select /*+ FULL(t1) */ CSCN,ENQ_TID from system.DEF$_AQCALL
  4  /

      CSCN ENQ_TID
---------- ------------------------------
4755684454 8.37.2233719
4755684456 3.14.2235620
4755684458 8.2.2233699
4755684460 10.30.2223096
果真索引上的記錄比表上的數據多了四條。

在線重建索引:
SQL>alter index system. DEF$_TRANORDER rebuild onlie;

Index altered.

再次對比索引上和表上的數據:
SQL> select /*+ index(t DEF$_TRANORDER) */ CSCN,ENQ_TID from system.DEF$_AQCALL where CSCN is not null or ENQ_TID is not null
  2  minus
  3  select /*+ FULL(t1) */ CSCN,ENQ_TID from system.DEF$_AQCALL
  4  /

no rows selected

沒有多餘數據,經過對alert.log的監控,後續未發現ora-600[13011]的報錯。
相關文章
相關標籤/搜索