ORA-600(qertbFetchByRowID)错误

以前也碰到过这个错误,不过由于无法直接连接数据库,没有办法深入分析。这次虽然同样没有办法连接数据库,但是获取了更详细的信息,基本确定导致问题的原因。
错误信息如下:

Wed May 09 10:41:32 2012
Errors IN file /oracle/admin/orcl/udump/orcl_ora_423466.trc:
ORA-00600: internal error code, arguments: [qertbFetchByRowID], [], [], [], [], [], [], []

其实从错误信息不难分析,导致问题的原因和索引有关,错误信息明确指出了问题发生在通过ROWID信息读取表时,而通过ROWID读取是索引扫描的标志。
一般来说这种问题是索引和表上数据的逻辑损坏造成的,如果问题出现在索引上,那么最简单的办法莫过于删除重建索引,或者使用ONLINE方式重建索引。
将索引删除后,问题果然不再出现,但是尝试重建索引时,引发了另一个ORA-600错误:

SQL> analyze TABLE tab_a validate STRUCTURE cascade online;
analyze TABLE tab_a validate STRUCTURE cascade online
ORA-01499: TABLE/INDEX CROSS reference failure - see trace file
SQL> ALTER INDEX ind_a rebuild online parallel 4;
ALTER INDEX ind_a rebuild online parallel 4
ORA-00600: internal error code, arguments: [kdsgrp1], [], [], [], [], [], [], []

告警日志中信息为:

Errors IN file /oracle/admin/orcl/udump/orcl_ora_618990.trc:
ORA-00600: internal error code, arguments: [kdsgrp1], [], [], [], [], [], [], []

详细TRACE中信息为:

*** 2012-05-09 13:52:41.518
ksedmp: internal OR fatal error
ORA-00600: internal error code, arguments: [kdsgrp1], [], [], [], [], [], [], []
CURRENT SQL statement FOR this SESSION:
ALTER INDEX ind_a rebuild online parallel 4
----- Call Stack Trace -----
calling              CALL     entry                argument VALUES IN hex      
location             TYPE     point                (? means dubious VALUE)     
-------------------- -------- -------------------- ----------------------------
ksedst+001c          bl       ksedst1              00000FFFF ? 000000000 ?
ksedmp+0290          bl       ksedst               104A557A8 ?
ksfdmp+0018          bl       03F4CD24             
kgerinv+00dc         bl       _ptrgl               
kgeasnmierr+004c     bl       kgerinv              70000002F81807C ? 0000000B8 ?
                                                   1F400000000 ? 110546478 ?
                                                   110546068 ?
kdsgrp+0460          bl       01FB9490             
kdsgnp+0444          bl       kdsgrp               70000002F8184ED ? 000000000 ?
                                                   110546070 ?
kdstf0011101km+0c24  bl       03F4A5C0             
kdsttgr+5244         bl       kdstf0011101km       110546068 ? 000010266 ?
                                                   70000022DCBB510 ?
                                                   FFFFFFFFFFF54F8 ? 0FFFFFFFF ?
                                                   000001FE8 ? 000000000 ?
                                                   000000000 ?
qertbFetch+09b8      bl       kdsttgr              110546068 ?
                                                   4842208000000001 ?
                                                   804000007BFB0 ? 000000000 ?
                                                   000000000 ? 000000000 ?
                                                   000000000 ? C4FB00000000 ?
qergiFetch+02a4      bl       03F49A98             
qertqoFetch+01f0     bl       01FB9488             
qertqiFetch+0158     bl       01FB9488             
qersoFetch+0110      bl       03F49A98             
qerliFetch+0188      bl       03F49A98             
qertqoFetch+01f0     bl       01FB9488             
qerpxFetch+0210      bl       01FB9488             
kdicrws+16e8         bl       01FB9488             
kdicdrv+09b8         bl       kdicrws              70000022DFE4DC0 ?
                                                   70000022DFE5500 ?
                                                   70000022DFE5500 ?
opiexe+28c4          bl       kdicdrv              B00000009 ? 100000001 ?
                                                   11043C340 ?
opiosq0+19f0         bl       opiexe               FFFFFFFFFFF8E70 ?
                                                   2824424042420820 ?
                                                   FFFFFFFFFFF8F30 ?
kpooprx+0168         bl       opiosq0              33C0D81A0 ? 1101957F8 ?
                                                   1100098E0 ? A4000110199810 ?
kpoal8+0400          bl       kpooprx              FFFFFFFFFFFB784 ?
                                                   FFFFFFFFFFFB508 ?
                                                   3B0000003B ? 100000001 ?
                                                   000000000 ? A40000000000A4 ?
                                                   000000000 ? 1103A0018 ?
opiodr+0ae0          bl       _ptrgl               
ttcpip+1020          bl       _ptrgl               
opitsk+1124          bl       ttcpip               1100CAB28 ? 000000000 ?
                                                   000000001 ? FFFFFFFFFFFB8B0 ?
                                                   000000001 ? 1100DFE78 ?
                                                   FFFFFFFFFFFB830 ? 11046F998 ?
opiino+0990          bl       opitsk               0FFFFD7C0 ? 000000000 ?
opiodr+0ae0          bl       _ptrgl               
opidrv+0484          bl       01FBA8D8             
sou2o+0090           bl       opidrv               3C02ABCD9C ? 4A039F928 ?
                                                   FFFFFFFFFFFF6C0 ?
opimai_real+01bc     bl       01FB868C             
main+0098            bl       opimai_real          000000000 ? 000000000 ?
__start+0090         bl       main                 000000000 ? 000000000 ?
--------------------- Binary Stack Dump ---------------------

可以看到,数据的损坏出在表块上,因此重建索引会导致错误。如果问题出现在表块上,那么除了利用DBMS_REPAIR包之类的进行修复外,还可以通过简单的PL/SQL将正常的数据导出。由于数据存在坏块,直接CREATE TABLE AS SELECT采用直接路径方式,会绕过数据的校验,因此错误数据仍然会插入。而EXP和EXPDP在导出的时候同样会报错,因此只有通过PL/SQL单条记录读取,如果正常就插入到目标表,如果出现读取异常,那么通过异常判断来过滤该错误。
ORA-600[kdsgrp1]错误:http://yangtingkun.itpub.net/post/468/524144

This entry was posted in BUG and tagged , , , , . Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *