ENG: | ORA-00600 kdsgrp1 |
При select приложение падает с ошибкой ORA-00600: internal error code, arguments: [kdsgrp1], [], [], [], [], [], [], [].
Чтение нужно начать с ORA-600 [kdsgrp1] (Doc ID 285586.1) здесь собраны все известные баги. Так же есть статья Causes and Solutions for ora-600 [kdsgrp1] (Doc ID 1332252.1) где рассматриваются основные причины ORA-00600 kdsgrp1.
В моем случае, причина ошибки — поврежденный индекс (index corruption) — это сразу видно по файлу трассировки.
Для разрешения ситуации нужно удалить и заново пересоздать поврежденный индекс.
В alert логе для этой ошибки есть запись, которая указывает на файл трассировки
Mon Feb 20 16:57:17 2012
Errors in file d:\oracle\product\10.2.0\admin\udump\dump_ora_6984.trc:
ORA-00600: internal error code, arguments: [kdsgrp1], [], [], [], [], [], [], []
В файле трассировки есть что-то типа (можно искать по «SESSION ID»)
*** 2012-02-20 16:57:17.079
*** ACTION NAME:() 2012-02-20 16:57:17.016
*** MODULE NAME:(TOAD 9.0.1.8) 2012-02-20 16:57:17.016
*** SERVICE NAME:(ud) 2012-02-20 16:57:17.016
*** SESSION ID:(131.893) 2012-02-20 16:57:17.016
row 0141c319.1e continuation at
file# 5 block# 115481 slot 31 not found
**************************************************
KDSTABN_GET: 0 ..... ntab: 1
curSlot: 31 ..... nrows: 32
**************************************************
*** 2012-02-20 16:57:17.094
ksedmp: internal or fatal error
ORA-00600: internal error code, arguments: [kdsgrp1], [], [], [], [], [], [], []
Current SQL statement for this session:
SELECT
ROWID, ID, RE_ID, TYPE_CODE,
DEPT_ID, DIF_PURPOSE
FROM REG_RT.RE_PURPOSES Tbl
Where
re_id = 81653029
check trace file d:oracleproduct10.2.0db_1rdbmstraceud_ora_0.trc for preloading .sym file messages
----- Call Stack Trace -----
calling call entry argument values in hex
location type point (? means dubious value)
-------------------- -------- -------------------- ----------------------------
_ksedst+38 CALLrel _ksedst1+0 0 1
_ksedmp+898 CALLrel _ksedst+0 0
_ksfdmp+14 CALLrel _ksedmp+0 3
_kgerinv+140 CALLreg 00000000 E66A3E0 3
_kgeasnmierr+19 CALLrel _kgerinv+0 E66A3E0 DA80020 3A29FF0 0
EEECD08
_kdsgrp+733 CALLrel _kgeasnmierr+0 E66A3E0 DA80020 3A29FF0 0
_kdsfbr+174 CALLrel _kdsgrp+0 8977480 0 8977480
_qertbFetchByRowID+ CALLrel _kdsfbr+0 8977480 4CC7610 0 1 0 0
840 8977428 0
_kpofrws+235 CALL??? 00000000 271BD4CC 127F4B4 EEED1A4 1F4
_opifch2+7757 CALLrel _kpofrws+0 5355CD4 271BEAD8 127F4B4
EEED1A4 1F4
_opifch+51 CALLrel _opifch2+0 89 5 EEED2C8
_opiodr+1286 CALLreg 00000000 5 2 EEEF68C
_ttcpip+853 CALLreg 00000000 5 2 EEEF68C 2
_opitsk+1107 CALL??? 00000000
_opiino+1087 CALLrel _opitsk+0 0 0
_opiodr+1286 CALLreg 00000000 3C 4 EEEFC28
_opidrv+819 CALLrel _opiodr+0 3C 4 EEEFC28 0
_sou2o+45 CALLrel _opidrv+0 3C 4 EEEFC28
_opimai_real+112 CALLrel _sou2o+0 EEEFC1C 3C 4 EEEFC28
_opimai+92 CALLrel _opimai_real+0 2 EEEFC54
_OracleThreadStart@ CALLrel _opimai+0
4+726
7C824826 CALLreg 00000000
В выделеном тексте видно что поврежден блок 115481 файла 5. С помощью запроса выявляем поврежденный индекс и пересоздаем его.
SELECT tablespace_name, segment_type, owner, segment_name FROM dba_extents WHERE file_id = <file_id> and <block_id> between block_id AND block_id + blocks - 1; SELECT tablespace_name, segment_type, owner, segment_name FROM dba_extents WHERE file_id = 5 and 115481 between block_id AND block_id + blocks - 1;
Запись ORA-00600 kdsgrp1 впервые появилась Dmitry Bobrovsky Blog
— Author: Dmitry Bobrovsky Google