ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 解决ORA-600(16164)错误的过程(一)

解决ORA-600(16164)错误的过程(一)

原创 Linux操作系统 作者:yangtingkun 时间:2009-01-04 23:58:54 0 删除 编辑

在数据库的alert文件中发现了这个错误,这个bug似乎是由MERGE语句引起的。

 

 

错误信息如下:

Errors in file /u1/oracle/admin/repdb01/bdump/repdb01_j000_20925.trc:
ORA-00600: internal error code, arguments: [16164], [0], [], [], [], [], [], []

对于的trace文件中信息为:

ksedmp: internal or fatal error
ORA-00600: internal error code, arguments: [16164], [0], [], [], [], [], [], []
Current SQL statement for this session:
MERGE /*+ append */ INTO
  MIS2_USER U
  USING (SELECT A.ID          USER_ID,
                A.CODE        CODE,
                A.ENABLE_FLAG USER_ENABLE_FLAG,
                B.ENABLE_FLAG ORG_ENABLE_FLAG,
                A.NAME        USER_NAME,
                B.NAME        ORG_NAME,
                C.DATA_ORG_ID ORG_ID,
                A.CREATE_DATE CREATE_DATE
           FROM GPO_USR_USER A, GPO_USR_ORG B, GPO_REG_ORG C
          WHERE A.ORG_ID = B.ID
            AND B.REG_ORG_ID = C.ID
            AND C.FACTORY_FLAG = '1'
         UNION ALL
         SELECT A.ID            USER_ID,
                A.USER_CODE     CODE,
                A.ENABLE_FLAG   USER_ENABLE_FLAG,
                B.ENABLE_FLAG   ORG_ENABLE_FLAG,
                A.USER_NAME     USER_NAME,
                B.NAME          ORG_NAME,
                A.DEFAULT_ORGID ORG_ID,
                A.CREATE_DATE   CREATE_DATE
           FROM USR_USER A, CAT_ORG B
          WHERE A.DEFAULT_ORGID = B.ID
            AND B.ORG_TYPE = '1') B
  ON (U.USER_ID = B.USER_ID)
  WHEN MATCHED THEN
    UPDATE
       SET U.CODE             = B.CODE,
           U.USER_ENABLE_FLAG = B.USER_ENABLE_FLAG,
           U.ORG_ENABLE_FLAG  = B.ORG_ENABLE_FLAG,
           U.USER_NAME        = B.USER_NAME,
           U.ORG_NAME         = B.ORG_NAME,
           U.ORG_ID           = B.ORG_ID
  WHEN NOT MATCHED THEN
    INSERT
      (USER_ID,
       CODE,
       USER_ENABLE_FLAG,
       ORG_ENABLE_FLAG,
       USER_NAME,
       ORG_NAME,
       ORG_ID,
       CREATE_DATE)
    VALUES
      (B.USER_ID,
       B.CODE,
       B.USER_ENABLE_FLAG,
       B.ORG_ENABLE_FLAG,
       B.USER_NAME,
       B.ORG_NAME,
       B.ORG_ID,
       B.CREATE_DATE)
----- PL/SQL Call Stack -----
  object      line  object
  handle    number  name
6b1cea980       474  procedure MIS2.P_INIT_DATA
6a33fd260         1  anonymous block
----- Call Stack Trace -----
calling              call     entry                argument values in hex     
location             type     point                (? means dubious value)    
-------------------- -------- -------------------- ----------------------------
ksedmp()+328         CALL     ksedst()+0           FFFFFFFF7FFF5350 ?
                                                   000000000 ? 000000000 ?
                                                   00000003E ?
                                                   FFFFFFFF7FFF5BE8 ?
                                                   1031D56C8 ?
kgeriv()+208         PTR_CALL 0000000000000000     000000000 ? 000103400 ?
                                                   0001035D9 ? 000102C00 ?
                                                   1035D9000 ? 1035D9C28 ?
kgeasi()+180         CALL     kgeriv()+0           1035D9E88 ? 1036C7148 ?

错误SQL是一条MERGE语句,而查询METALINK的结果也发现,这个bug确实和MERGE有关,且影响的数据库版本就是9204Oracle10.1.0.29.2.0.5中改正了这个bug

Metalink文档Doc ID:  2754863.8中,描述了这个错误,不过并没有对这个错误进行过多的描述,在bug文档Bug No. 2754863中,只是包含了一个引发这个错误的例子,并没有详细说明导致这个错误的原因,而且这个例子很复杂,SQL使用了CURSOR加表函数的方式获取用来关联的数据源,在获取内部查询数据的时候还指定了ROWNUM。由于例子过于复杂,多个地方都可能引发这个错误,所以无法判断导致问题的原因。

看来metalink只能给出错误的描述,在不升级版本的情况,没有办法指望metalink中的信息来解决问题了。

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/4227/viewspace-526607/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
暂无介绍

注册时间:2007-12-29

  • 博文量
    1954
  • 访问量
    10887890