After restoring the operating system of an Oracle database server from tape, we saw something wrong.
Could not load program sqlplus
[oracle@test oracle]$ sqlplus / as sysdba
Could not load program sqlplus:
rtld: 0712-001 Symbol CreateIoCompletionPort was referenced
from module /u01/app/oracle/product/19.0.0/db_1/lib/libttsh19.so(), but a runtime definition
of the symbol was not found.
rtld: 0712-001 Symbol GetMultipleCompletionStatus was referenced
from module /u01/app/oracle/product/19.0.0/db_1/lib/libttsh19.so(), but a runtime definition
of the symbol was not found.
rtld: 0712-002 fatal error: exiting.
Cannot load program tnsping
Even tnsping program cannot be loaded.
[oracle@test oracle]$ tnsping orclpdb
exec(): 0509-036 Cannot load program tnsping because of the following errors:
0509-130 Symbol resolution failed for tnsping because:
0509-136 Symbol CreateIoCompletionPort (number 426) is not exported from
dependent module /unix.
0509-136 Symbol GetMultipleCompletionStatus (number 427) is not exported from
dependent module /unix.
0509-192 Examine .loader section symbols with the
'dump -Tv' command.
Input/Output Completion Port (IOCP)
As you may have noticed, the key issue comes from CreateIoCompletionPort and GetMultipleCompletionStatus, which are subroutines in AIX 7.2.
Let's see how IBM defines them.
- CreateIoCompletionPort
- GetMultipleCompletionStatus
Dequeues multiple completion packets from a specified I/O completion port.
Creates an I/O completion port with no associated file descriptor or associates an opened socket or file with an existing or newly created I/O completion port.
It seems that we may have some problem at Input/Output Completion Port (IOCP).
Solution
Let's check IOCP status.
[root@test /]# lsdev -c iocp
iocp0 Defined I/O Completion Ports
As we can see, IOCP is not enabled. It should be enabled for an Oracle database server on AIX 7.2, but it's not.
To solve "Could not load program", we should enable AIX IOCP, just don't forget to reboot the database server in order to take it effect.