和第一次碰到这个错误不同,这次是在10.2环境中出现的。
ORA-600(17281)(1001)错误:http://yangtingkun.itpub.net/post/468/514806
告警日志中错误信息为:
Tue Jan 31 15:55:55 2012 Errors IN file /oracle/admin/ORCL/udump/orcl_ora_6225970.trc: ORA-00600: internal error code, arguments: [17281], [1001], [0x70000059AB9BE38], [], [], [], [], [] ORA-01001: invalid cursor |
详细TRACE信息如下:
Dump file /oracle/admin/ORCL/udump/orcl_ora_6225970.trc Oracle DATABASE 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production WITH the Partitioning, OLAP AND DATA Mining options ORACLE_HOME = /oracle/orcl/10.2.0 System name: AIX Node name: porcl2 Release: 1 Version: 6 Machine: 00F67AD94C00 Instance name: ORCL Redo thread mounted BY this instance: 1 Oracle process NUMBER: 503 Unix process pid: 6225970, image: oracleORCL@porcl2 *** SERVICE NAME:(SYS$USERS) 2012-01-31 15:55:55.419 *** SESSION ID:(4136.11880) 2012-01-31 15:55:55.419 *** 2012-01-31 15:55:55.419 ksedmp: internal OR fatal error ORA-00600: internal error code, arguments: [17281], [1001], [0x70000059AB9BE38], [], [], [], [], [] ORA-01001: invalid cursor CURRENT SQL statement FOR this SESSION: DECLARE cursor NlsParamsCursor IS SELECT * FROM nls_session_parameters;BEGIN SELECT Nvl(Lengthb(Chr(65536)), Nvl(Lengthb(Chr(256)), 1)) INTO :CharLength FROM dual; FOR NlsRecord IN NlsParamsCursor loop IF NlsRecord.parameter = 'NLS_DATE_LANGUAGE' THEN :NlsDateLanguage := NlsRecord.value; elsif NlsRecord.parameter = 'NLS_DATE_FORMAT' THEN :NlsDateFormat := NlsRecord.value; elsif NlsRecord.parameter = 'NLS_NUMERIC_CHARACTERS' THEN :NlsNumericCharacters := NlsRecord.value; elsif NlsRecord.parameter = 'NLS_TIMESTAMP_FORMAT' THEN :NlsTimeStampFormat := NlsRecord.value; elsif NlsRecord.parameter = 'NLS_TIMESTAMP_TZ_FORMAT' THEN :NlsTimeStampTZFormat := NlsRecord.value; END IF; END loop;END; ----- Call Stack Trace ----- calling CALL entry argument VALUES IN hex location TYPE point (? means dubious VALUE) -------------------- -------- -------------------- ---------------------------- ksedst+001c bl ksedst1 000000008 ? 000000000 ? ksedmp+0290 bl ksedst 1048E2120 ? ksfdmp+0018 bl 03F34B6C kgeriv+0108 bl _ptrgl kgeasi+0118 bl kgeriv 11046CD88 ? 1101B37C0 ? 104A364BC ? 7000000100067F8 ? 000000000 ? kgicli+0188 bl kgeasi 110190630 ? 1104AE040 ? 438100004381 ? 200000002 ? 200000002 ? 000000000 ? 0000003E9 ? 000000002 ? kgidlt+0398 bl kgicli 000000800 ? 000000001 ? kgidel+0018 bl kgidlt FFFFFFFFFFF91A8 ? 000000000 ? 000000001 ? 000000000 ? FFFFFFFFFFF9558 ? perabo+00ac bl kgidel FFFFFFFFFFF90E8 ? 1102247F0 ? perdcs+0034 bl perabo FFFFFFFFFFF9440 ? 110190630 ? FFFFFFFFFFF91A0 ? peidcs+01dc bl perdcs FFFFFFFFFFF92F0 ? 110190630 ? kkxcls+00a4 bl peidcs FFFFFFFFFFF9558 ? 11046A640 ? kxsClean+0044 bl kkxcls 1100C99F8 ? kxsCloseXsc+0444 bl kxsClean FFFFFFFFFFF9850 ? kksCloseCursor+031c bl kxsCloseXsc 11046D038 ? 000000000 ? opicca+00c4 bl kksCloseCursor 104A503C0 ? opiclo+0098 bl opicca 1001376F0 ? kpoclsa+0050 bl 03F35D58 opiodr+0adc bl _ptrgl ttcpip+1020 bl _ptrgl opitsk+10b0 bl ttcpip 1100C99F8 ? 90000000063A614 ? FFFFFFFFFFFB680 ? 2842288400000001 ? 9000000007307A8 ? 000000001 ? 11062EAF8 ? FFFFFFFFFFFB820 ? opiino+0990 bl opitsk 000010860 ? 000000000 ? opiodr+0adc bl _ptrgl opidrv+0474 bl opiodr 3C1028E590 ? 4102909B0 ? FFFFFFFFFFFF490 ? 0A0082608 ? sou2o+0090 bl opidrv 3C02AB579C ? 4A0071248 ? FFFFFFFFFFFF490 ? opimai_real+01bc bl 01FA4A34 main+0098 bl opimai_real 000000000 ? 000000000 ? __start+0070 bl main 000000000 ? 000000000 ? --------------------- Binary Stack Dump --------------------- |
查询MOS发现这是JDBC THIN CLIENT导致的,具体文档参考Intermittent ORA-600 [17281], ORA[1001] With JDBC Thin Client [ID 436914.1],这个问题与Bug 4359111非常类似,但是这个bug已经在10.2.0.2中被FIXED,而当前数据库的版本是10.2.0.3,而当前的问题影响的版本就包含10.2.0.3,且堆栈中的错误函数可以完全对应到文档给出的错误信息。
这个问题在10.2.0.4以后被修正,11g中同样修正了这个问题。如果短期数据库不会升级,且错误频繁发生,可以考虑替换客户端的ojdbc14.jar文件为10.2.0.4版,因为这个问题的解决是在JDBC客户端,因此客户端的驱动更新后,这个问题就可以被修正,而不需要升级数据库本身的版本。