我们有一些Oracle外部过程库(C语言.so文件,全为32位),我们正尝试从AIX / Oracle 11.2迁移到Linux / Oracle 12.2。他们在Linux上使用gcc成功重新编译。虽然这些库在AIX / Oracle中运行良好,但是在Linux / 12c环境中进行测试时,却收到“ ORA-28595:Extproc代理:无效的DLL路径”错误。
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")
)
)
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)!!!
很好奇,即使我们在listener.ora中显式提供了32位ORACLE_HOME,它仍在加载64位bin / extproc。
虽然我们在$ ORACLE_HOME / hs / logs中看到了类似上面的跟踪内容,但是运行测试时external_procedure_listener / trace / *文件没有显示新的跟踪内容。
有什么主意要纠正吗?