首页 > 解决方案 > ORA-28595: Extproc 代理: 无效的 DLL 路径

问题描述

我们有一些 Oracle 外部过程库(C 语言 .so 文件,全部为 32 位),我们正尝试将它们从 AIX/Oracle 11.2 迁移到 Linux/Oracle 12.2。他们在 Linux 上使用 gcc 成功重新编译。虽然这些库在 AIX/Oracle 中运行良好,但在 Linux/12c 环境中测试时,我们收到“ORA-28595: Extproc agent: Invalid DLL Path”错误。

Linux listener.ora 包含:

SID_LIST_EXTERNAL_PROCEDURE_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = swm1)
      (ORACLE_HOME = /u01/app/oracle/product/12.2.0/client32)
      (PROGRAM=extproc)
      (ENVS="EXTPROC_DLLS=ANY,LIBPATH=/u01/app/oracle/product/12.2.0/client32/lib,LD_LIBRARY_PATH=/swms/curr/lib,TRACE_LEVEL=ON")
 )
 )

每次测试后,我们可以在 hs/log 跟踪内容中看到如下内容:

Oracle Corporation --- THURSDAY  OCT 18 2018 16:37:43.679

    Version 12.2.0.1.0

HOA 10/18 16:37:43.679414000: (horcrase_AllocStackElt) Entered!
HOA 10/18 16:37:43.679437000: (horcrase_AllocStackElt) Exiting...
HOA 10/18 16:37:43.679448000: (horcrpuoe_PushOciEnv) Entered!
HOA 10/18 16:37:43.679457000: (horcrpuoe_PushOciEnv) Exiting...
HOA 10/18 16:37:43.679465000: (horcries_InitExtprocSession) Exiting...
HOA 10/18 16:37:43.679486000: (hotkisc_InitSessionContext) Exiting...
HOA 10/18 16:37:43.679496000: (hotkec_EstablishConnection) Entered!
2018/10/18-16:37:43.679812000: Entered shorcsju_spawn_jssu_unix
  HS: Parent extproc argv[1] = (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=BEQ)))
  HS: Parent extproc called nsgetaddr, addr = (ADDRESS=(PROTOCOL=ipc)(KEY=#20938.1.933310848))
  HS: Parent extproc received the IN param, flags_horrx = 0x1000
0: 31303030                             [1000]
  HS: Parent extproc is falling back to the old behavior with connect string = (ADDRESS=(PROTOCOL=BEQ)(PROGRAM=/u01/app/oracle/produ
ct/12.2.0/dbhome_1/bin/extproc)(ARGV0=/u01/app/oracle/product/12.2.0/dbhome_1/bin/extproc)(ARGS='(DESCRIPTION=(LOCAL=YES)(ADDRESS=(P
ROTOCOL=BEQ)))'))
  HS: Parent extproc called nsbequeath! status = 0
2018/10/18-16:37:43.695384000: Exiting shorcsju_spawn_jssu_unix, rc=0
  HS: Parent extproc is calling exit(0)!!!

奇怪的是它正在加载 64 位 bin/extproc,尽管我们在 listener.ora 中明确提供了 32 位 ORACLE_HOME。

虽然我们在 $ORACLE_HOME/hs/logs 中看到了类似上面的跟踪内容,但运行测试时 external_procedure_listener/trace/* 文件没有显示新的跟踪内容。

知道如何纠正这个问题吗?

标签: oracle

解决方案


推荐阅读