У нас есть несколько библиотек внешних процедур Oracle (файлы языка .so, все 32-разрядные), которые мы пытаемся перенести из AIX / Oracle 11.2 в Linux / Oracle 12.2.Они успешно перекомпилированы с использованием gcc в Linux.Хотя эти библиотеки работали нормально в AIX / Oracle, при тестировании в среде Linux / 12c появляется ошибка «ORA-28595: Агент Extproc: неверный путь к DLL».
Слушатель Linux содержит:
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хотя мы явно предоставили 32-битный ORACLE_HOME в listener.ora.
Хотя мы видим содержимое трассировки, подобное приведенному выше, в файлах $ ORACLE_HOME / hs / logs, файлы external_procedure_listener / trace / * не показывают новое содержимое трассировкипри выполнении тестов.
Есть идеи, как это исправить?