Oracle 版本:10.2.0.1
OS: Linux 64位
在SQL中使用了正则:
SELECT COUNT(*)
FROM T
WHERE REGEXP_LIKE(T.NOTE, '^(.|+)*((二种同时存在一种))+', 'i')
第一次可以执行,第二次执行报ORA-7445,session 中断。
Trace 文件中的记录如下:
Exception signal: 11 (SIGSEGV), code: 1(Address not mapped to object), addr: 0x5e, PC: [0x2a95574358,_intel_fast_memcpy.A()+10]
*** 2012-07-25 17:01:42.331
ksedmp: internal or fatal error
ORA-07445: exceptionencountered: core dump [_intel_fast_memcpy.A()+10] [SIGSEGV] [Address notmapped to object] [0x00000005E] [] []
MOS上有篇文档说明:
Ora-7445 [Kghalp] using REGEXP or TABLEfunctions [ID 415567.1]
在Oracle 10.1.0.4 到10.2.0.2 版本,在SQL 中使用正则表达式或者TABLE()函数。可能会触发ORA-7445的错误。MOS中提到的是:
ORA-07445: exception encountered: core dump[kghalp()+53]
这里的core dump 与我这里的有所不同,根据MOS的说明,在使用正则或者表函数导致的ORA-7445错误,core dump 还应该包含:kghalp evarxalc lxreggenpblxregcomp lxkRegexpComp ...
这里导致这个错误是Oracle 的 bug:4440681,不过我这里的现象和这个bug 有一定出入,但也排除了其他的几个可能的原因。还是怀疑和这个bug有关,该Bug 在oracle 10.2.0.3以后的版本中已经修复,让朋友将DB 升级到10.2.0.4,在测试一下。