oracle - 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/* 文件没有显示新的跟踪内容。
知道如何纠正这个问题吗?
解决方案
推荐阅读
- reactjs - 如何检测反应表中特定列的单元格值更改?
- javascript - 从弹出窗口到内容脚本的消息不起作用
- google-colaboratory - 有没有办法在 colab 程序中设置断点,然后检查变量值?
- android - 如何从 ram 中删除片段
- flutter - 获取 Dart UTC 日期的方法
- php - 由于不支持 PUT 方法而导致更新用户配置文件的问题 [Laravel]
- python - 如何在 Django 中显示图标?
- c++ - 如何访问 boost::interprocess 中的共享集?
- css - 带有字段集、Firefox 与 Chrome 的 flexbox CSS 不一致
- f# - 具有联合类型的过滤器列表