客户数据库出现ORA-600(qerrmOStart2)(1756)错误。
ORA-600(qerrmOStart2)错误:http://yangtingkun.itpub.net/post/468/527461
之前遇到过一次类似的qerrmOStart2错误,不过上次错误的第二个参数是1740。在上一篇文章中已经提到了,这个600错误只是一个表现,实际上真正的错误是第二个函数中体现的错误。
看一下具体的错误TRACE信息:
*** SERVICE NAME:(SYS$USERS) 2012-05-24 17:23:39.684
*** SESSION ID:(598.169) 2012-05-24 17:23:39.684
*** 2012-05-24 17:23:39.684
ksedmp: internal or fatal error
ORA-00600: internal error code, arguments: [qerrmOStart2], [1756], [ORA-01756: quoted string not properly terminated
], [], [], [], [], []
Current SQL statement for this session:
SELECT count(*) FROM ( SELECT * FROM (
select i_t 交易编号,
decode(type, '00500', '退货'),
am,
decode(flag, 'S', '成功', '失败')
from usr1.t_1@db01
where s_p = '3702491300'
and o_i_t = 96924977
) t where rownum <= 3000 ) tt
----- Call Stack Trace -----
calling call entry argument values in hex
location type point (? means dubious value)
-------------------- -------- -------------------- ----------------------------
ksedst+001c bl ksedst1 000000000 ? FFFFFFFFFFF78A4 ?
ksedmp+0290 bl ksedst 104A506E8 ?
ksfdmp+0018 bl 03F4BE78
kgerinv+00dc bl _ptrgl
kgesinv+0020 bl kgerinv FFFFFFFFFFF7BF0 ? 000000000 ?
10032BE9C ? 000000000 ?
000000000 ?
ksesin+006c bl kgesinv 000000000 ? 000000000 ?
FFFFFFFFFFF7C60 ? 1104B63E8 ?
11048EFB0 ?
OCIKSIN+0124 bl ksesin 105383C74 ? 200000002 ?
000000000 ? 0000006DC ?
000000001 ? 000000031 ?
FFFFFFFFFFF7C64 ?
FFFFFFFFFFF7C94 ?
qerrmOStart+01d4 bl 03F49D20
qerrmStart+0310 bl qerrmOStart 000000001 ? 110471728 ?
110489E88 ?
selexe+09d0 bl 01FB6A3C
opiexe+26fc bl selexe 110489E88 ? 700000917096A00 ?
102387EB0C8 ?
kpoal8+0edc bl opiexe FFFFFFFFFFFB874 ?
FFFFFFFFFFFB4E8 ?
FFFFFFFFFFF9A48 ?
opiodr+0ae0 bl _ptrgl
ttcpip+1020 bl _ptrgl
opitsk+1124 bl ttcpip 1100CB0D8 ? FFFFFFFFFFFB990 ?
000000001 ? 000000000 ?
FFFFFFFFFFFB910 ? 1100E0428 ?
000000000 ? 1104D0240 ?
opiino+0990 bl opitsk 000000000 ? 000000000 ?
opiodr+0ae0 bl _ptrgl
opidrv+0484 bl 01FB7E64
sou2o+0090 bl opidrv 3C02AB90DC ? 440660000 ?
FFFFFFFFFFFF7B0 ?
opimai_real+01bc bl 01FB5C2C
main+0098 bl opimai_real 000000000 ? 000000000 ?
__start+0098 bl main 000000000 ? 000000000 ?
--------------------- Binary Stack Dump ---------------------
从SQL语句本身分析,并不存在任何的语法错误,所有的单引号都是匹配的,而这种600错误的产生本身也说明不是简单的普通错误。
观察到这个SQL是通过数据库链访问远端表,且SQL语句本身包含了中文,那么出现这个问题就不奇怪了。显然导致问题的原因在于两个数据库的字符集不同,Oracle在进行字符集转换的时候把某个中文错误的分解出了一个单引号,导致语法分析时报错。
避免这个错误的最行之有效的方法就是去掉多字节字符,对于当前的SQL语句而言,只需要替换所有的中文字符,就可以避免这个错误的产生。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/4227/viewspace-740731/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/4227/viewspace-740731/