很奇怪的现象,我还没有摸到规律,大概是这样的:
1)我sqlplus登录进去执行一个SQL语句,过了半天系统提示3113错误。告警日志中有如下的错误
Fri Jan 15 15:07:36 2010
Errors in file /opt/oracle/oradb/admin/ossdb/udump/ossdb_ora_18639.trc:
ORA-07445: exception encountered: core dump [__GI_memcmp()+0] [SIGSEGV] [unknown code] [0x6040000000008000] [] []2)然后退出sqlplus,重新登录,重新执行这个SQL语句,一切正常。再退出,再执行也正常,试多次也正常
这个现象上午,下午都出现了一次,我现在还没有摸索出这个规律,第一步的这个错误什么规律下会出现。下面是详细的SQL语句
SQL> UPDATE moi_00000_00072_B SET (objectId) = (SELECT moi_00000_00072_A.objectId FROM moi_00000_00072_A WHERE (moi_00000_00072_B.moIndex = moi_00000_00072_A.moIndex) AND (moi_00000_00072_B.entityId = moi_00000_00072_A.entityId)) WHERE (EXISTS (SELECT 1 FROM moi_00000_00072_A WHERE (moi_00000_00072_B.moIndex = moi_00000_00072_A.moIndex) AND (moi_00000_00072_B.entityId = moi_00000_00072_A.entityId))) AND ((moi_00000_00072_B.objectId IS NULL) OR (moi_00000_00072_B.objectId = -1)) AND (moi_00000_00072_B.moIndex is not NULL) AND (moi_00000_00072_B.sessionId = 897);UPDATE moi_00000_00072_B SET (objectId) = (SELECT moi_00000_00072_A.objectId FROM moi_00000_00072_A WHERE (moi_00000_00072_B.moIndex = moi_00000_00072_A.moIndex) AND (moi_00000_00072_B.entityId = moi_00000_00072_A.entityId)) WHERE (EXISTS (SELECT 1 FROM moi_00000_00072_A WHERE (moi_00000_00072_B.moIndex = moi_00000_00072_A.moIndex) AND (moi_00000_00072_B.entityId = moi_00000_00072_A.entityId))) AND ((moi_00000_00072_B.objectId IS NULL) OR (moi_00000_00072_B.objectId = -1)) AND (moi_00000_00072_B.moIndex is not NULL) AND (moi_00000_00072_B.sessionId = 897)
*
ERROR at line 1:
ORA-03113: end-of-file on communication channel
SQL> SQL> UPDATE moi_00000_00072_B SET (objectId) = (SELECT moi_00000_00072_A.objectId FROM moi_00000_00072_A WHERE (moi_00000_00072_B.moIndex = moi_00000_00072_A.moIndex) AND (moi_00000_00072_B.entityId = moi_00000_00072_A.entityId)) WHERE (EXISTS (SELECT 1 FROM moi_00000_00072_A WHERE (moi_00000_00072_B.moIndex = moi_00000_00072_A.moIndex) AND (moi_00000_00072_B.entityId = moi_00000_00072_A.entityId))) AND ((moi_00000_00072_B.objectId IS NULL) OR (moi_00000_00072_B.objectId = -1)) AND (moi_00000_00072_B.moIndex is not NULL) AND (moi_00000_00072_B.sessionId = 897)
  2  ;
ERROR:
ORA-03114: not connected to ORACLE
SQL> conn testdb/1234
Connected.
SQL> UPDATE moi_00000_00072_B SET (objectId) = (SELECT moi_00000_00072_A.objectId FROM moi_00000_00072_A WHERE (moi_00000_00072_B.moIndex = moi_00000_00072_A.moIndex) AND (moi_00000_00072_B.entityId = moi_00000_00072_A.entityId)) WHERE (EXISTS (SELECT 1 FROM moi_00000_00072_A WHERE (moi_00000_00072_B.moIndex = moi_00000_00072_A.moIndex) AND (moi_00000_00072_B.entityId = moi_00000_00072_A.entityId))) AND ((moi_00000_00072_B.objectId IS NULL) OR (moi_00000_00072_B.objectId = -1)) AND (moi_00000_00072_B.moIndex is not NULL) AND (moi_00000_00072_B.sessionId = 897)
  2  ;0 rows updated.

解决方案 »

  1.   

    这种内部错误最好上metalink看看。bug,索引等等都可能引起这个错。
      

  2.   

    上metalink查了,7445的这类子错误还没有公示。
      

  3.   

    不可能。这个错误和00600一样,是很普遍的一个内部错误号。
    我现在手上没账号,你在Error Lookup Tool 一搜一大堆。
      

  4.   

    你看看别人怎么查的
    http://hi.baidu.com/edeed/blog/item/8cbee6cd4d1561580fb3458e.html
      

  5.   

    参考:
    http://ora-7445.ora-code.com/
      

  6.   

    各位误解我的意思了,我不是说7445查不到,而是7445下面的这个__GI_memcmp具体的子错误查不到。7445是一个通用的错误,按照7445来查询没有意义
      

  7.   

    根据memcmp是可以查到一个错误(只能查到一个),但是它的子错误码是kxscod/memcmp,跟我的不一样,而且这个BUG已经在10.2.0.2修复了,我的版本号是10.2.0.4,所以不可能是这个BUG.