Oracle SQL中使用正则表达式 执行报ORA-07445 [_intel_fast_memcpy.A()+10] 错误

2014-11-24 18:45:13 · 作者: · 浏览: 0

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,在测试一下。