Volver al blog
Oracle 4 min de lectura

Symbol CreateIoCompletionPort was referenced: OHS y Forms no arrancan en AIX

En AIX, el OHS y los formularios de Forms mueren al cargar con un rtld 0712-001. El símbolo lo aporta el subsistema IOCP, que viene en estado Defined y Oracle necesita en Available.

Portada del artículo sobre el error 0712-001 Symbol CreateIoCompletionPort en AIX

Al trabajar con productos Oracle sobre servidores AIX puede ocurrir que, al arrancar un OHS o al abrir un formulario de Oracle Forms, el proceso muera antes de llegar a levantar. El log no habla de configuración ni de permisos, sino de un símbolo no resuelto en tiempo de carga: el enlazador dinámico de AIX no encuentra CreateIoCompletionPort. La causa no está en Oracle, sino en un dispositivo del sistema operativo que viene sin activar.

El error

0712-001 · 0509-036 · FRM-93546 · FRM-93552

Al arrancar el OHS:

<2017-12-29 14:52:03> <INFO> <OHS-4018> <Starting server ohs1>
<2017-12-29 14:52:04> <INFO> <OHS-0> <exec(): 0509-036 Cannot load program httpd because of the following errors:>
<2017-12-29 14:52:04> <INFO> <OHS-0> <rtld: 0712-001 Symbol CreateIoCompletionPort was referenced>
<2017-12-29 14:52:04> <INFO> <OHS-0> < from module /u01/app/oracle/product/fmw/wlserver/../lib/libclntsh.so(), but a runtime definition>
<2017-12-29 14:52:04> <INFO> <OHS-0> < of the symbol was not found.>
<2017-12-29 14:52:04> <INFO> <OHS-0> <rtld: 0712-001 Symbol GetMultipleCompletionStatus was referenced>
...
<2017-12-29 14:52:04> <INFO> <OHS-0> <rtld: 0712-002 fatal error: exiting.>
<2017-12-29 14:52:04> <SEVERE> <OHS-0> <Failed to start the server ohs1>

Y en el log de Forms, con el mismo símbolo pero cargando frmweb en lugar de httpd:

[2017-12-29T11:46:52.013-06:00] [WLS_FORMS] [ERROR] [FRM-93546] [oracle.forms.servlet] [tid: 171]
 [SRC_METHOD: getPidAndPort] external message from runtime process:
 exec(): 0509-036 Cannot load program frmweb because of the following errors:
[...] external message from runtime process: rtld: 0712-001 Symbol CreateIoCompletionPort was referenced
[...] external message from runtime process: from module /u01/app/oracle/product/fmw/lib/libclntsh.so(), but a runtime definition
[...] external message from runtime process: of the symbol was not found.
[...] external message from runtime process: rtld: 0712-001 Symbol GetMultipleCompletionStatus was referenced

El usuario final no ve nada de esto: solo recibe un aviso genérico de que el proceso de runtime terminó de forma anormal.

Diálogo de Oracle Forms con el error FRM-93552: no se puede conectar al proceso de tiempo de ejecución
Lo que ve el usuario de Forms: un FRM-93552 sin pistas sobre la causa real.

La causa

Los símbolos CreateIoCompletionPort y GetMultipleCompletionStatus los aporta el subsistema IOCP (I/O Completion Ports) de AIX, del que depende libclntsh.so, la librería cliente de Oracle. En una instalación limpia el dispositivo iocp0 queda en estado Defined, y los productos Oracle necesitan que esté en Available. Mientras siga en Defined, el enlazador no encuentra los símbolos y cualquier binario que dependa de esa librería —httpd, frmweb— falla al cargar.

La solución

Comprueba primero en qué estado está el IOCP:

-bash-4.2$ lsdev -c iocp
iocp0 Defined  I/O Completion Ports

Confirmado Defined, hay que cambiarlo a Available desde smitty. Los pasos siguientes se ejecutan como root:

# smitty iocp
  1. Selecciona Change / Show Characteristics of I/O Completion Ports y pulsa Enter.
  2. Con el tabulador, cambia el campo STATE to be configured at system restart a available y pulsa Enter.
  3. Comprueba que el comando termina en OK y sal de smitty con F10.
  4. Reinicia el servidor AIX para que el cambio tome efecto: shutdown -Fr.
Menú de smitty con la opción Change / Show Characteristics of I/O Completion Ports seleccionada
Menú de smitty iocp.
Pantalla de smitty con el campo STATE to be configured at system restart en available
El estado se configura para el próximo arranque del sistema.
Salida de smitty confirmando iocp0 changed y que el cambio se aplica en el próximo reinicio
iocp0 changed. El aviso lo dice explícitamente: el cambio no aplica hasta reiniciar.

Resultado

Tras el reinicio, vuelve a consultar el estado del dispositivo:

-bash-4.2$ lsdev -c iocp
iocp0 Available  I/O Completion Ports

Con el IOCP en Available, los símbolos se resuelven y tanto el OHS como los formularios de Forms arrancan con normalidad. Conviene dejar esta verificación dentro del checklist de preparación de cualquier servidor AIX que vaya a alojar productos Oracle: es un requisito del sistema operativo, no algo que la instalación de Oracle configure por ti.