今天无意中碰到一个小bug。
环境9204 FOR SOLARIS8,错误信息如下:
ORA-07445: exception encountered: core dump [0000000100D3E708] [SIGSEGV] [Address not mapped to object] [0x000000020] [] []
Current SQL statement for this session:
SELECT "A1"."PLAT_FATHER","ZH_NDMAIN"."F_LINK"@"GPODB.US.ORACLE.COM"("A1"."ID") FROM "PLT_PLAT" "A1" WHERE "A1"."PLAT_CLASS"=2 GROUP BY "A1"."PLAT_FATHER"
检查第一个有效的错误函数为:qxuagtag。
观察这个SQL,发现居然是我自己执行的,只不过并不是在这个数据库上执行的,原始SQL也不是上面这个。
原始SQL语句为:SELECT PLAT_FATHER, F_LINK(ID) FROM PLT_PLAT WHERE PLAT_CLASS = 2 GROUP BY PLAT_FATHER。这个SQL当时是在数据库GPODB.US.ORACLE.COM中执行的。
F_LINK是自定义聚集函数,详细描述在这里:http://yangtingkun.itpub.net/post/468/3380
由于PLT_PLAT是一个指向远端数据库的同义词,Oracle自动将远端站点作为了驱动站点,所以将SQL语句发送到目标库执行,在执行过程中由于找不到远端(也就是原始站点)的数据库链而报错。
关于这个问题的详细描述以前也讨论过,详细可以参考:
自定义聚集函数访问远端对象(一):http://yangtingkun.itpub.net/post/468/112489
自定义聚集函数访问远端对象(二):http://yangtingkun.itpub.net/post/468/112499
自定义聚集函数访问远端对象(三):http://yangtingkun.itpub.net/post/468/113687
问题并不奇怪,不过奇怪的是Oracle报了一个ORA-7445错误,而且第一个错误函数qxuagtag比较少见。查询了半天的METALINK,没有找到一个类似的情况。
其实问题本身到没有多大,解决起来也很简单,在上面的三个链接中有详细的描述,这里给出一个简单的解决方法:
SQL> COL LINK_ID FORMAT A70
SQL> SELECT /*+ DRIVING_SITE(ID) */ PLAT_FATHER, F_LINK(ID) LINK_ID
2 FROM PLT_PLAT, DUAL D
3 WHERE PLAT_CLASS = '2'
4 GROUP BY PLAT_FATHER;
PLAT_FATHER LINK_ID
------------------------ --------------------------------------------------------------------------
FR20T0000020000000000001 FR20T0000020000000000006,FR20T0000020000000000008,FR20T0000020000000000021
1 row selected.
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/4227/viewspace-69319/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/4227/viewspace-69319/