本案例来自某省电信一套Oracle 11.2.0.4的rac,应用的存储过程调用一直在报ORA-00600: internal error code, arguments: [4097],对于经常搞恢复的人来说,这个错误非常熟悉,都不用分析直接重建undo即可,但是作为一个专业的troubleshooter,还是多少分析一下来龙去脉吧。。。
Mon Nov 22 19:56:16 2021 Errors in file /u01/oracle/diag/rdbms/gzdb/gzdb2/trace/gzdb2_ora_4166.trc (incident=356497): ORA-00600: internal error code, arguments: [ORA-00600: internal error code, arguments: [4097], [], [], [], [], [], [], [] ], [], [], [], [], [], [], [], [], [], [], [] ORA-02063: preceding line from GZINTF Incident details in: /u01/oracle/diag/rdbms/gzdb/gzdb2/incident/incdir_356497/gzdb2_ora_4166_i356497.trc Use ADRCI or Support Workbench to package the incident. See Note 411.1 at My Oracle Support for error and packaging details. Mon Nov 22 19:56:17 2021 Dumping diagnostic data in directory=[cdmp_20211122195617], requested by (instance=2, osid=4166), summary=[incident=356497]. Mon Nov 22 19:56:18 2021 Sweep [inc][356497]: completed Sweep [inc2][356497]: completed
复制
查看trace发现报错的sql是一个dblink插入远程库的sql
*** 2021-11-22 19:56:16.621 dbkedDefDump(): Starting incident default dumps (flags=0x2, level=3, mask=0x0) ----- Current SQL Statement for this session (sql_id=6n9rq3vxmnr36) ----- INSERT INTO INTF_CRM_CODE@GZINTF (CODEID, CODE, STARTCODE, ENDCODE, CATEGORY, AREA_CODE, PROCESS_STATE, INS_DATE, EDIT_DATE, STAFF_CODE ) VALUES (:B7 , :B6 , :B5 , :B4 , :B3 , :B2 , 0, SYSDATE, SYSDATE, :B1 ) ----- PL/SQL Stack ----- ----- PL/SQL Call Stack ----- object line object handle number name 0x6add29468 173 procedure TELEMENT.CODE_PUBLISH_BAT 0x73d9c6898 3 anonymous block ----- Call Stack Trace ----- calling call entry argument values in hex location type point (? means dubious value) -------------------- -------- -------------------- ---------------------------- skdstdst()+41 call kgdsdst() 000000000 ? 000000000 ? 7FFF3F418560 ? 7FFF3F418638 ? 7FFF3F41D0E0 ? 000000002 ? ksedst1()+103 call skdstdst() 000000000 ? 000000000 ? 7FFF3F418560 ? 7FFF3F418638 ? 7FFF3F41D0E0 ? 000000002 ? ksedst()+39 call ksedst1() 000000000 ? 000000001 ? 7FFF3F418560 ? 7FFF3F418638 ? 7FFF3F41D0E0 ? 000000002 ? dbkedDefDump()+2746 call ksedst() 000000000 ? 000000001 ? 7FFF3F418560 ? 7FFF3F418638 ? 7FFF3F41D0E0 ? 000000002 ? ksedmp()+41 call dbkedDefDump() 000000003 ? 000000002 ? 7FFF3F418560 ? 7FFF3F418638 ? 7FFF3F41D0E0 ? 000000002 ? ksfdmp()+69 call ksedmp() 000000003 ? 000000002 ? 7FFF3F418560 ? 7FFF3F418638 ? 7FFF3F41D0E0 ? 000000002 ? dbgexPhaseII()+1764 call ksfdmp() 000000003 ? 000000002 ? 7FFF3F418560 ? 7FFF3F418638 ? 7FFF3F41D0E0 ? 000000002 ? dbgexProcessError() call dbgexPhaseII() 7FF5719F2730 ? 7FF56E9E3898 ? +2680 7FFF3F421BB8 ? 7FFF3F418638 ? 7FFF3F41D0E0 ? 000000002 ? dbgeExecuteForError call dbgexProcessError() 7FF5719F2730 ? 7FF56E9E3898 ? ()+88 000000001 ? 000000000 ? 7FFF3F41D0E0 ? 000000002 ? dbgePostErrorKGE()+ call dbgeExecuteForError 7FF5719F2730 ? 7FF56E9E3898 ? 2136 () 000000001 ? 000000001 ? 000000000 ? 000000002 ? dbkePostKGE_kgsf()+ call dbgePostErrorKGE() 00C0B22C0 ? 7FF5719FFB00 ? 71 000000258 ? 000000001 ? 000000000 ? 000000002 ? kgesev()+280 call dbkePostKGE_kgsf() 00C0B22C0 ? 7FF5719FFB00 ? 000000258 ? 000000001 ? 000000000 ? 000000002 ? ksesec1()+170 call kgesev() 00C0B22C0 ? 7FF5719FFB00 ? 000000258 ? 000000001 ? 7FFF3F422760 ? 000000002 ? npierr()+878 call ksesec1() 00C0B22C0 ? 000000001 ? 00000004E ? 7FF56E68BDE0 ? 7FFF3F421CC0 ? 00000000A ? kpnerr()+240 call npierr() 7FF56E68A570 ? 000000258 ? 000000000 ? 00000005E ? 7FFF3F421CC0 ? 7FF56E68CE90 ? kpnpst()+276 call kpnerr() 7FF56E68A570 ? 000000258 ? 000000000 ? 00000005E ? 7FFF3F4256E8 ? 7FF56E68CE90 ? upirtrc()+1919 call kpnpst() 7FFF3F425860 ? 000000258 ? 000000005 ? 000000000 ? 7FFF3F4256E8 ? 7FF56E68CE90 ? kpurcsc()+98 call upirtrc() 7FFF3F425860 ? 000000258 ? 000000005 ? 000000000 ? 7FFF3F4256E8 ? 7FF56E88CC20 ? kpuexec()+10790 call kpurcsc() 7FFF3F425860 ? 000000258 ? 000000005 ? 000000000 ? 7FFF3F4256E8 ? 7FF56E88CC20 ? kpnexe()+1517 call kpuexec() 7FFF3F425860 ? 000000258 ? 7FFF3F4256E0 ? 000000000 ? 7FFF3F4256E8 ? 7FFF3F429438 ? opiexe()+32658 call kpnexe() 7FF56E883948 ? 7FF56E88CC20 ? 7FF56E698860 ? 7FF56E9A9950 ? 000000001 ? 400000000 ? opipls()+2164 call opiexe() 000000004 ? 000000005 ? 7FF56E698860 ? 7FF56E9A9950 ? 000000001 ? 400000000 ? opiodr()+917 call opipls() 000000066 ? 000000005 ? 7FF56E698860 ? 7FF56E9A9950 ? 000000001 ? 400000000 ? rpidrus()+211 call opiodr() 000000066 ? 000000007 ? 7FFF3F42C5E0 ? 7FF56E9A9950 ? 000000001 ? 400000000 ? skgmstack()+148 call rpidrus() 7FFF3F42BFB8 ? 000000007 ? 7FFF3F42C5E0 ? 7FF56E9A9950 ? 000000001 ? 400000000 ? rpiswu2()+690 call skgmstack() 7FFF3F42BF90 ? 00C0B1EE0 ? 00000F618 ? 009684840 ? 7FFF3F42BFB8 ? 400000000 ? rpidrv()+1327 call rpiswu2() 735D440A0 ? 000000056 ? 735D44124 ? 000000002 ? 7FFF3F42BFB8 ? 400000000 ? psddr0()+473 call rpidrv() 000000004 ? 000000066 ? 7FFF3F42C5E0 ? 000000038 ? 7FFF3F42BFB8 ? 400000000 ? psdnal()+457 call psddr0() 000000004 ? 000000066 ? 7FFF3F42C5E0 ? 000000030 ? 7FFF3F42BFB8 ? 400000000 ? pevm_EXECC()+314 call psdnal() 7FFF3F42DD40 ? 7FFF3F42DF50 ? 7FFF3F42C5E0 ? 7FF56E5C3C10 ? 671978B98 ? 400000000 ? pfrinstr_EXECC()+80 call pevm_EXECC() 7FF56E9D1AB0 ? 7FF56E6D66B8 ? 000000020 ? 7FF56E5C3C10 ? 671978B98 ? 400000000 ? pfrrun()+4191 call pfrinstr_EXECC() 7FF56E895E80 ? 6493730E2 ? 7FF56E895EF0 ? 7FF56E5C3C10 ? 671978B98 ? 600000020 ? plsql_run()+649 call pfrrun() 7FF56E895E80 ? 6493730E2 ? 7FF56E895EF0 ? 7FFF3F42DD40 ? 671978B98 ? 600000020 ? peicnt()+302 call plsql_run() 7FF56E895E80 ? 6493730E2 ? 7FF56E895EF0 ? 7FFF3F42DD40 ? 671978B98 ? 600000020 ? kkxexe()+525 call peicnt() 7FFF3F42DD40 ? 7FF56E895E80 ? 7FF56E895EF0 ? 7FFF3F42DD40 ? 671978B98 ? 000000000 ? opiexe()+18001 call kkxexe() 7FF56E5B8B90 ? 7FF56E895E80 ? 7FF56E895EF0 ? 7FFF3F42DD40 ? 671978B98 ? 000000000 ? kpoal8()+2118 call opiexe() 000000049 ? 000000003 ? 7FF56E895EF0 ? 7FFF3F42DD40 ? 671978B98 ? 000000000 ? opiodr()+917 call kpoal8() 00000005E ? 000000003 ? 7FF56E895EF0 ? 7FFF3F42DD40 ? 671978B98 ? 000000000 ? ttcpip()+2183 call opiodr() 00000005E ? 00000001C ? 7FFF3F432570 ? 7FFF3F42DD40 ? 671978B98 ? 000000000 ? opitsk()+1710 call ttcpip() 00C0CFF10 ? 009987830 ? 7FFF3F432570 ? 000000000 ? 7FFF3F431FC8 ? 7FFF3F43256C ? opiino()+969 call opitsk() 00C0CFF18 ? 000000000 ? 7FFF3F432570 ? 000000000 ? 7FFF3F431FC8 ? 7FFF3F43256C ? opiodr()+917 call opiino() 00000003C ? 000000004 ? 7FFF3F433D68 ? 000000000 ? 7FFF3F431FC8 ? 7FFF3F43256C ? opidrv()+570 call opiodr() 00000003C ? 000000004 ? 7FFF3F433D68 ? 000000000 ? 7FFF3F431FC8 ? 7FFF3F43256C ? sou2o()+103 call opidrv() 00000003C ? 000000004 ? 7FFF3F433D68 ? 000000000 ? 7FFF3F431FC8 ? 7FFF3F43256C ? opimai_real()+133 call sou2o() 7FFF3F433D40 ? 00000003C ? 000000004 ? 7FFF3F433D68 ? 7FFF3F431FC8 ? 7FFF3F43256C ? ssthrdmain()+265 call opimai_real() 000000002 ? 7FFF3F433F30 ? 000000004 ? 7FFF3F433D68 ? 7FFF3F431FC8 ? 7FFF3F43256C ? main()+201 call ssthrdmain() 000000002 ? 7FFF3F433F30 ? 000000001 ? 000000000 ? 7FFF3F431FC8 ? 7FFF3F43256C ? __libc_start_main() call main() 000000002 ? 7FFF3F4340D8 ? +245 000000001 ? 000000000 ? 7FFF3F431FC8 ? 7FFF3F43256C ? _start()+41 call __libc_start_main() 000A14EC0 ? 000000002 ? 7FFF3F4340C8 ? 000000000 ? 7FFF3F431FC8 ? 7FFF3F43256C ? --------------------- Binary Stack Dump ---------------------
复制
我们知道ORA-00600[4XXX]都是与undo息息相关的报错,而在call stack里并未找到ktu相关函数调用,所以怀疑是remote端数据库的undo异常导致的。
查看remote端,数据库为单实例10.2.0.4,从报错trace里可以看到同样的sql也是报的ORA-00600[4097]
ksedmp: internal or fatal error ORA-00600: internal error code, arguments: [4097], [], [], [], [], [], [], [] Current SQL statement for this session: INSERT INTO "INTF_CRM_CODE" "A1" ("CODEID","CODE","STARTCODE","ENDCODE","CATEGORY","AREA_CODE","PROCESS_STATE","INS_DATE","EDIT_DATE","STAFF_CODE") VALUES (:B7,:B6,:B5,:B4,:B3,:B2,0,SYSDATE@!,SYSDATE@!,:B1) ----- Call Stack Trace ----- calling call entry argument values in hex location type point (? means dubious value) -------------------- -------- -------------------- ---------------------------- ksedst()+31 call ksedst1() 000000000 ? 000000001 ? 7FFF81D3D320 ? 7FFF81D3D380 ? 7FFF81D3D2C0 ? 000000000 ? ksedmp()+610 call ksedst() 000000000 ? 000000001 ? 7FFF81D3D320 ? 7FFF81D3D380 ? 7FFF81D3D2C0 ? 000000000 ? ksfdmp()+21 call ksedmp() 000000003 ? 000000001 ? 7FFF81D3D320 ? 7FFF81D3D380 ? 7FFF81D3D2C0 ? 000000000 ? kgeriv()+176 call ksfdmp() 000000003 ? 000000001 ? 7FFF81D3D320 ? 7FFF81D3D380 ? 7FFF81D3D2C0 ? 000000000 ? kgesiv()+119 call kgeriv() 0068CE7C0 ? 00A516C20 ? 000000000 ? 000000000 ? 7FFF81D3D2C0 ? 000000000 ? ksesic0()+209 call kgesiv() 0068CE7C0 ? 00A516C20 ? 000001001 ? 000000000 ? 7FFF81D3E0A0 ? 000000000 ? ktugti()+3200 call ksesic0() 000001001 ? 0068CE940 ? 000000000 ? 00000009A ? 000000010 ? 101010101010101 ? ktbgfi()+3117 call ktugti() 1027BA02C ? 7FFF81D3E530 ? 000000000 ? 7FFF81D3E548 ? 000000000 ? 000000000 ? kdisdelete()+12464 call ktbgfi() 000000001 ? 7FFF81D3F8B4 ? 000000103 ? 000000000 ? 7FFF81D3F8B0 ? 1027BA014 ? kdisnew_bseg_srch_c call kdisdelete() 2B65E5197FE8 ? 7FFF81D40AE8 ? bk()+3175 000000003 ? 000000000 ? 203000176 ? 1027BA014 ? ktspfpblk()+395 call kdisnew_bseg_srch_c 7FFF81D40AE8 ? 7FFF81D40AE8 ? bk() 000000003 ? 000000000 ? 203000176 ? 1027BA014 ? ktspfsrch()+585 call ktspfpblk() 7FFF81D3FC90 ? 7FFF81D40AE8 ? 000000003 ? 000000000 ? 203000176 ? 1027BA014 ? ktspscan_bmb()+340 call ktspfsrch() 7FFF81D3FC90 ? 002407B0A ? 000000003 ? 000000000 ? 000000001 ? 000000000 ? ktspgsp_cbk1()+555 call ktspscan_bmb() 7FFF81D3FC90 ? 002407B0A ? 000000003 ? 000000000 ? 000000001 ? 000000000 ? ktspgsp_cbk()+133 call ktspgsp_cbk1() 000000000 ? 000000000 ? 000000000 ? 000000002 ? 7FFF81D40AE8 ? 000000000 ? kdisnew()+280 call ktspgsp_cbk() 000000000 ? 000000000 ? 000000000 ? 000000002 ? 7FFF81D40AE8 ? 000000000 ? kdisnewle()+129 call kdisnew() 2B65E5197FF0 ? 000000000 ? 7FFF81D40AE8 ? 000000002 ? 200000000 ? 000000000 ? kdisle()+4705 call kdisnewle() 2B65E5197FD8 ? 000000000 ? 7FFF81D40AE8 ? 7FFF81D40D40 ? 2B65E5148B40 ? 0000000A4 ? kdiins0()+27793 call kdisle() 1EE8FE6D8 ? 7FFF81D423E0 ? 7FFF81D42A40 ? 7FFF81D40D40 ? 81D51C5000000002 ? 7FFF81D51C50 ? kdiinsp()+106 call kdiins0() 1EE8FE6D8 ? 000000000 ? 000000000 ? 7FFF81D51C50 ? 000000000 ? 000000000 ? kauxsin()+1711 call kdiinsp() 1EE8FE6D8 ? 000000000 ? 000000000 ? 7FFF81D51C50 ? 000000000 ? 000000000 ? insidx()+963 call kauxsin() 1EE8FE740 ? 7FFF81D53470 ? 000000000 ? 2B65E517B2B8 ? 2B65E517B328 ? 2B65E517B348 ? insrowFastPath()+14 call insidx() 2B65E517B190 ? 2B65E517AC78 ? 7 1EE901A90 ? 2B65E517B2B8 ? 1EE8FE920 ? 2B65E517B348 ? insdrvFastPath()+76 call insrowFastPath() 2B65E517B190 ? 7FFF81D538E8 ? 5 1EE901A90 ? 2B65E517B2B8 ? 1EE8FE920 ? 2B65E517B348 ? inscovexe()+434 call insdrvFastPath() 2B65E517B190 ? 7FFF81D538E8 ? 1EE8FF530 ? 1EE901A90 ? 1EE8FE920 ? 2B65E517AC78 ? insExecStmtExecIniE call inscovexe() 1EE901A90 ? 1EE8FF530 ? ngine()+85 7FFF81D54B00 ? 2B65E517AC78 ? 1EE8FE920 ? 2B65E517AC78 ? insexe()+386 call insExecStmtExecIniE 1EE901A90 ? 1EE8FF530 ? ngine() 2B65E517AC78 ? 2B65E517AC78 ? 1EE8FE920 ? 2B65E517AC78 ? opiexe()+9270 call insexe() 1EE901058 ? 7FFF81D54B00 ? 1EE901A90 ? 2B65E517AC78 ? 1EE8FE920 ? 2B65E517AC78 ? kpoal8()+2289 call opiexe() 000000049 ? 000000003 ? 7FFF81D54FC0 ? 000000001 ? 1EE8FE920 ? 2B65E517AC78 ? opiodr()+984 call kpoal8() 00000005E ? 000000017 ? 7FFF81D57EA0 ? 000000001 ? 81D5000000000001 ? 2B65E517AC78 ? ttcpip()+1226 call opiodr() 00000005E ? 000000017 ? 7FFF81D57EA0 ? 000000000 ? 0059F5BF0 ? 2B65E517AC78 ? opitsk()+1322 call ttcpip() 0068D6490 ? 0052EA260 ? 7FFF81D57EA0 ? 000000000 ? 7FFF81D57998 ? 7FFF81D58008 ? opiino()+1026 call opitsk() 000000003 ? 000000000 ? 7FFF81D57EA0 ? 000000001 ? 000000000 ? 4E804ED00000001 ? opiodr()+984 call opiino() 00000003C ? 000000004 ? 7FFF81D59068 ? 000000000 ? 000000000 ? 4E804ED00000001 ? opidrv()+547 call opiodr() 00000003C ? 000000004 ? 7FFF81D59068 ? 000000000 ? 0059F56A0 ? 4E804ED00000001 ? sou2o()+114 call opidrv() 00000003C ? 000000004 ? 7FFF81D59068 ? 000000000 ? 0059F56A0 ? 4E804ED00000001 ? opimai_real()+163 call sou2o() 7FFF81D59040 ? 00000003C ? 000000004 ? 7FFF81D59068 ? 0059F56A0 ? 4E804ED00000001 ? main()+116 call opimai_real() 000000002 ? 7FFF81D590D0 ? 000000004 ? 7FFF81D59068 ? 0059F56A0 ? 4E804ED00000001 ? __libc_start_main() call main() 000000002 ? 7FFF81D590D0 ? +244 000000004 ? 7FFF81D59068 ? 0059F56A0 ? 4E804ED00000001 ? _start()+41 call __libc_start_main() 000723938 ? 000000002 ? 7FFF81D59228 ? 000000000 ? 0059F56A0 ? 000000002 ? --------------------- Binary Stack Dump ---------------------
复制
通常在trace的最后一个Block header dump极有可能是访问报错的block,所以搜索“Block header dump”先看看
Block header dump: 0x030001db Object id on Block? Y seg/obj: 0x5f48f csc: 0xfd4.83315956 itc: 2 flg: E typ: 2 - INDEX brn: 0 bdba: 0x300018a ver: 0x01 opc: 0 inc: 0 exflg: 0 Itl Xid Uba Flag Lck Scn/Fsc 0x01 0x0008.027.00149736 0x03448015.d5b7.07 --U- 1 fsc 0x0000.83315957 0x02 0x00ec.00e.000916f3 0x0347cae6.cf8e.08 C-U- 0 scn 0x0f1f.1adb7509
复制
报错的block是一个索引,dataobj#为 0x5f48f ,这明显是一个业务表上的索引,从ITL上的slot 0x01看出读取该块需要访问8号undo段头事务表的slot 27做块清除找到符合该次逻辑读的commit scn,那么看看8号undo段头事务表slot 27
index state cflags wrap# uel scn dba parent-xid nub stmt_num cmt ------------------------------------------------------------------------------------------------ ... 0x27 9 0x00 0x144b22 0x001e 0x0fe0.c8984e1b 0x03c8dd1f 0x0000.000.00000000 0x00000001 0x00000000 1637578830 ...
复制
可以看到索引块ITL中的XID的wrap#(0x149736)居然比事务表27 slot的wrap#要大,这明显是不可能的事情,所以报出了ORA-00600[4097]。
解决方法很简单就是重建undo表空间并删除老的undo表空间。 ORA-00600[4097] 一般在不一致的open数据库经常遇到,由于该环境为正常的生产环境,通常不会出现 ORA-00600[4097] ,所以个人怀疑有写丢失的可能性。
评论
