ITPub博客

首页 > Linux操作系统 > Linux操作系统 > ORA-7445(kollalfn)错误

ORA-7445(kollalfn)错误

原创 Linux操作系统 作者:yangtingkun 时间:2010-05-29 23:59:10 0 删除 编辑

在测试访问远端LOB时,碰到了这个错误。

 

 

编写了一个很简单的函数,通过调用远端的这个函数返回LOB字段,结果出现了这个ORA-7445错误。

[oracle@yans1 ~]$ sqlplus test/test

SQL*Plus: Release 10.2.0.3.0 - Production on 星期六 5月 29 07:04:21 2010

Copyright (c) 1982, 2006, Oracle.  All Rights Reserved.


Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options

SQL> CREATE TABLE T_LOB (ID NUMBER, CONTENTS CLOB);

Table created.

SQL> DECLARE
  2     V_LOB CLOB;
  3  BEGIN
  4     INSERT INTO T_LOB
  5     VALUES (1, EMPTY_CLOB())
  6     RETURN  CONTENTS INTO V_LOB;
  7     FOR I IN 1..100 LOOP
  8        DBMS_LOB.WRITEAPPEND(V_LOB, 32767, LPAD('A', 32767, 'A'));
  9     END LOOP;
 10  END;
 11  /

PL/SQL procedure successfully completed.

SQL> commit;

Commit complete.

SQL> CREATE OR REPLACE FUNCTION F_LOB (P_ID IN NUMBER)
  2  RETURN CLOB AS
  3     V_LOB CLOB;
  4  BEGIN
  5     SELECT CONTENTS
  6     INTO V_LOB
  7     FROM T_LOB
  8     WHERE ID = P_ID;
  9     RETURN V_LOB;
 10  END;
 11  /

Function created.

在一个10g环境中,建立了一个包含LOB字段的表,并插入记录。然后建立了一个根据ID返回LOB结果的函数,下面在远端数据库中调用这个函数:

[oracle@localhost ~]$ sqlplus TEST/TEST

SQL*Plus: Release 9.2.0.4.0 - Production on 星期六 5月 29 06:49:37 2010

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.


连接到:
Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.4.0 - Production

SQL> CREATE DATABASE LINK TEST08 USING 'TEST08';

数据库链接已创建。

SQL> SELECT GLOBAL_NAME FROM GLOBAL_NAME@TEST08;

GLOBAL_NAME
------------------------------------------------------------------------------------------
TEST08

SQL> SELECT DBMS_LOB.GETLENGTH@TEST08(F_LOB@TEST08(1)) FROM T_LOB@TEST08;

DBMS_LOB.GETLENGTH@TEST08(F_LOB@TEST08(1))
------------------------------------------
                                   3276700

SQL> SELECT F_LOB@TEST08(1) FROM T_LOB@TEST08;
ERROR:
ORA-03113:
通信通道的文件结束

 

未选定行

通过DBMS_LOB对返回的LOB在远端进行处理后,可以得到正常的结果,如果尝试直接访问LOB,肯定是会出现错误的,但是不应该出现ORA-3113以及后台的ORA-7445错误:

Errors in file /opt/ora9/admin/testcen/udump/testcen_ora_14259.trc:
ORA-07445:
出现异常: 核心转储 [kollalfn()+21] [SIGSEGV] [Address not mapped to object] [0xC] [] []

对应的trace信息为:

[oracle@localhost bdump]$ more /opt/ora9/admin/testcen/udump/testcen_ora_14259.trc
/opt/ora9/admin/testcen/udump/testcen_ora_14259.trc
Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.4.0 - Production
ORACLE_HOME = /opt/ora9/product/9.2
System name:    Linux
Node name:      localhost.localdomain
Release:        2.6.9-5.ELsmp
Version:        #1 SMP Wed Jan 5 19:30:39 EST 2005
Machine:        i686
Instance name: testcen
Redo thread mounted by this instance: 1
Oracle process number: 17
Unix process pid: 14259, image: oracle@localhost.localdomain (TNS V1-V3)

*** 2010-05-29 08:24:22.838
*** SESSION ID:(16.1063) 2010-05-29 08:24:22.799
Exception signal: 11 (SIGSEGV), code: 1 (Address not mapped to object), addr: 0xc, PC: [0x979e3d5, kollalfn()+21]
Registers:
%eax: 0x00000000 %ebx: 0x0a4b929c %ecx: 0x00000056
%edx: 0x00000000 %edi: 0xb7a22b60 %esi: 0x0a4b929c
%esp: 0xbfff6584 %ebp: 0xbfff6658 %eip: 0x0979e3d5
%efl: 0x00010286
  kollalfn()+9 (0x979e3c9) mov %edi,0xfffffff8(%ebp)
  kollalfn()+12 (0x979e3cc) mov %esi,0xfffffffc(%ebp)
  kollalfn()+15 (0x979e3cf) mov %ebx,0xfffffff4(%ebp)
  kollalfn()+18 (0x979e3d2) mov 0x8(%ebp),%eax
> kollalfn()+21 (0x979e3d5) mov 0xc(%eax),%esi
  kollalfn()+24 (0x979e3d8) mov 0xc(%esi),%edx
  kollalfn()+27 (0x979e3db) mov 0x10(%edx),%ecx
  kollalfn()+30 (0x979e3de) call 0x979e3e3
  kollalfn()+35 (0x979e3e3) pop %ebx
*** 2010-05-29 08:24:22.949
ksedmp: internal or fatal error
ORA-07445:
出现异常: 核心转储 [kollalfn()+21] [SIGSEGV] [Address not mapped to object] [0xC] [] []
Current SQL statement for this session:
SELECT F_LOB@TEST08(1) FROM T_LOB@TEST08
----- Call Stack Trace -----
calling              call     entry                argument values in hex     
location             type     point                (? means dubious value)    
-------------------- -------- -------------------- ----------------------------
ksedmp()+269         call     ksedst()+0           1 ? 0 ? 0 ? 1 ? 33653900 ?
                                                   25003365 ?
ssexhd()+1108        call     ksedmp()+0           3 ? 0 ? 0 ? 0 ? 0 ? 0 ?
__pthread_sighandle  call     ssexhd()+0           B ? BFFF6218 ? BFFF6298 ? 0 ?
r_rt()+92                                          0 ? 961CDFB8 ?
kollalfn()+21        signal   __pthread_sighandle  B ? BFFF6218 ? BFFF6298 ?
                              r_rt()+0            
kpcxk2u()+7006       call     kollalfn()+0         0 ? 56 ? 0 ? A8481AC ?
ttccDefineConvert()  call     kpcxk2u()+0          B7A13734 ? B7A22B88 ? C3 ?
+372                                               BFFFB860 ? 14 ? B7A11E8C ?
ttccpwg()+1137       call     ttccDefineConvert()  B7A13734 ? B7A22B60 ?
                              +0                   B7A22B88 ? B7A11E8C ? 56 ?
                                                   70 ?
ttcfour()+371        call     ttccpwg()+0          AD58FA0 ? B7A13734 ?
                                                   B7A22CC4 ? B7A22B60 ? 0 ? 0 ?
                                                   BFFF9B14 ? 0 ? 0 ? BFFF6B1C ?
ttcdrv()+1131        call     ttcfour()+0          AD58FA0 ? B7A13734 ? 0 ? 0 ?
                                                   B7A22CC4 ? BFFF6B1C ?
nioqwa()+57          call     ttcdrv()+0           BFFF9694 ? 0 ?
upirtrc()+1680       call     nioqwa()+0           B7A137D8 ? 0 ? 969D848 ?
                                                   BFFF9694 ? B7A1375C ? 0 ?
kpurcsc()+172        call     upirtrc()+0          B7A13734 ? 5E ? BFFF95C8 ?
                                                   BFFF9694 ? BFFFA2D4 ? 0 ? 0 ?
                                                   B7A22D10 ? 1 ? 0 ? 0 ?
kpufch0()+2554       call     kpurcsc()+0          B7A2FD7C ? 5E ? BFFF95C8 ?
                                                   BFFF9694 ? BFFFA2D4 ? 0 ? 0 ?
                                                   B7A22D10 ? 1 ? 0 ? 0 ?
                                                   BFFF95B8 ?
kpufch()+765         call     kpufch0()+0          B7A22CC4 ? AD7961C ?
                                                   BFFFB7FC ? 2 ? 0 ? B7A2FD7C ?
                                                   B7A136F4 ? 0 ? 0 ? 0 ? 0 ?
                                                   0 ?
OCIStmtFetch()+50    call     kpufch()+0           B7A22CC4 ? AD7961C ? 0 ? 2 ?
                                                   0 ? 0 ?
kpnfch()+341         call     OCIStmtFetch()+0     B7A22CC4 ? AD7961C ? 1 ? 2 ?
                                                   0 ?
opifch2()+1726       call     kpnfch()+0           B7901DB8 ? B7A22CC4 ?
                                                   AD7961C ? 1 ? 2 ? 0 ?
opiall0()+4819       call     opifch2()+0          89 ? 5 ? BFFFD06C ?
kpoal8()+1865        call     opiall0()+0          5E ? 22 ? BFFFD118 ? 0 ?
                                                   BFFFD1B8 ? AD7915C ?
opiodr()+5238        call     kjxsupd()+1003       5E ? 14 ? BFFFDC4C ?
ttcpip()+2124        call     opiodr()+0           5E ? 14 ? BFFFDC4C ? 1 ?
opitsk()+1635        call     ttcpip()+0           AD53500 ? 5E ? BFFFDC4C ? 0 ?
                                                   BFFFE524 ? BFFFE520 ?
opiino()+602         call     opitsk()+0           0 ? 0 ? AD53500 ? ADAC8D0 ?
                                                   F2 ? 0 ?
opiodr()+5238        call     kjxsupd()+1003       3C ? 4 ? BFFFF8F0 ?
opidrv()+517         call     opiodr()+0           3C ? 4 ? BFFFF8F0 ? 0 ?
sou2o()+25           call     opidrv()+0           3C ? 4 ? BFFFF8F0 ?
main()+182           call     sou2o()+0            BFFFF8D4 ? 3C ? 4 ?
                                                   BFFFF8F0 ? 1 ? 0 ?
__libc_start_main()  call     main()+0             2 ? BFFFF964 ? BFFFF970 ?
+179                                               8208EF0 ? 0 ? 5CAA80 ?
.
.
.

在metalink上没有发现类似的描述,估计这种错误相对比较少见。错误本身不是什么大问题,但是不应该在普通报错的时候出现连接中断以及后台的ORA-7445错误。

SQL> SELECT * FROM V$VERSION;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bi
PL/SQL Release 10.2.0.3.0 - Production
CORE    10.2.0.3.0      Production
TNS for Linux: Version 10.2.0.3.0 - Production
NLSRTL Version 10.2.0.3.0 - Production

SQL> CREATE DATABASE LINK TESTCEN USING '172.25.88.94/TESTCEN';

Database link created.

SQL> SELECT F_LOB@TESTCEN(1) FROM T_LOB@TESTCEN;
ERROR:
ORA-22992: cannot use LOB locators selected from remote tables

 

no rows selected

通过10g调用9i上的函数返回LOB,就不会导致ORA-7445错误,而是报错ORA-22992,这是正常的结果。

 

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

下一篇: ITPUB知识索引贴
请登录后发表评论 登录
全部评论
暂无介绍

注册时间:2007-12-29

  • 博文量
    1964
  • 访问量
    11077198