IBM Support

The DB2DIAG.LOG reports an ENOEXEC (8) error on a DLOPEN call

Troubleshooting


Problem

The db2diag.log reports several memory related error messages. This is commonly seen after a recent install/upgrade.  

Symptom



For further discussion on this topic, visit this developerWorks forum thread:
https://www.ibm.com/developerworks/community/forums/html/topic?id=ecac070f-dc7d-4a5d-8a74-c0e10de3983c



Symptom can be illustrated in the db2diag.log with messages similar to the following (make note of the "ENOEXEC" and "Cannot load module" messages):


2010-06-24-06.55.18.762285-240 E587150A1214    LEVEL: Error (OS)
PID     : 111111               TID  : 222      PROC : db2sysc 0
INSTANCE: db2inst1             NODE : 000
EDUID   : 258                  EDUNAME: db2sysc 0
FUNCTION: DB2 UDB, oper system services, sqloAIXLoadModuleTryShr, probe:130
CALLED  : OS, -, dlopen
OSERR   : ENOEXEC (8) "Exec format error"
MESSAGE : Attempt to load specified library failed.
DATA #1 : Library name or path, 36 bytes
                        /home/db2inst1/sqllib/lib64/libdb2iocp.a
DATA #2 : shared library load flags, PD_TYPE_LOAD_FLAGS, 4 bytes
DATA #3 : String, 619 bytes
0509-130 Symbol resolution failed for
/home/db2inst1/sqllib/lib64/libdb2iocp.a because:
0509-136 Symbol CreateIoCompletionPort (number 0) is
not exported from dependent module /unix.
0509-136 Symbol GetQueuedCompletionStatus (number 1)
is not exported from dependent module /unix.
0509-136 Symbol GetMultipleCompletionStatus (number 2)
is not exported from dependent module /unix.
0509-022 Cannot load module
/home/db2inst1/sqllib/lib64/libdb2iocp.a.
0509-026 System error: Cannot run a file that does not
have a valid format.
0509-192 Examine .loader section symbols with the
'dump -Tv' command.

2010-06-24-06.55.18.763703-240 E588365A907    LEVEL: Error (OS)
PID     : 111111               TID  : 222     PROC : db2sysc 0
INSTANCE: db2inst1             NODE : 000
EDUID   : 258                  EDUNAME: db2sysc 0
FUNCTION: DB2 UDB, oper system services, sqloAIXLoadModuleTryShr,probe:140
CALLED  : OS, -, dlopen
OSERR   : ENOEXEC (8) "Exec format error"
MESSAGE : Attempt to load specified library augmented with object name failed.
DATA #1 : Library name or path, 46 bytes /home/db2inst1/sqllib/lib64/libdb2iocp.a(shr_64.o)
DATA #2 : shared library load flags, PD_TYPE_LOAD_FLAGS, 4 bytes
262146
DATA #3 : String, 270 bytes
0509-022 Cannot load module
/home/db2inst1/sqllib/lib64/libdb2iocp.a(shr_64.o).
0509-153 File /home/db2inst1/sqllib/lib64/libdb2iocp.a
is not an archive or the file could not be
read properly.
0509-026 System error: Cannot run a file that does not
have a valid format.

2010-06-24-06.55.18.763997-240 I589273A564    LEVEL: Severe
PID     : 111111               TID  : 222     PROC : db2sysc 0
INSTANCE: db2inst1             NODE : 000
EDUID   : 258                  EDUNAME: db2sysc 0
FUNCTION: DB2 UDB, oper system services, sqloLioInitIocp, probe:200
CALLED  : DB2 UDB, oper system services, sqloLoadModule
RETCODE : ZRC=0x870F009B=-2029059941=SQLO_MOD_LOAD_FAILED
"Dynamic library load failed."
DATA #1 : Library name or path, 12 bytes
libdb2iocp.a
DATA #2 : Library Search Path, 23 bytes
/home/db2inst1/sqllib/lib64

Cause

AIX I/O Completion Ports (IOCP) are not enabled.
 

Environment

AIX 5.3 TL9 SP2 and AIX 6.1 TL2 and up.
 

Diagnosing The Problem


1. Enter the following command to check whether the IOCP module is installed on your system:

    $ lslpp -l bos.iocp.rte

If the module is installed the output should show:
    $ lslpp -l bos.iocp.rte

Example output from above command:

Fileset Level State Description
----------------------------------------------------------------------------
Path: /usr/lib/objrepos
bos.iocp.rte 5.3.10.0 COMMITTED I/O Completion Ports API

Path: /etc/objrepos
bos.iocp.rte 5.3.0.50 COMMITTED I/O Completion Ports API


2. Enter the following command to check whether the status of the IOCP ports is Available:
    $ lsdev -Cc iocp

The output should return the following if the ports are available:

iocp0 Available I/O Completion Ports
 

Resolving The Problem

If the IOCP port status is Defined, but not Available:

1. Log in to the server as root and issue the following command: # smitty iocp
2. Select "Change / Show Characteristics" of I/O Completion Ports.
3. Change the configured state at system restart from Defined to Available.
4. Reboot.
5. Enter the lsdev command again to confirm that the status of the IOCP port has changed to Available.

There is also a DB2 Registry variable to turn off the use of the IOCP ports, DB2_USE_IOCP. Setting this to off may result in performance degradation. This can be changed by turning off the "DB2_USE_IOCP" variable as the instance owner. If you change the DB2 registry setting, you will need to restart the instance:

    db2stop
    db2set DB2_USE_IOCP=OFF
    db2start
     



For further discussion on this topic, visit this developerWorks forum thread:
https://www.ibm.com/developerworks/community/forums/html/topic?id=ecac070f-dc7d-4a5d-8a74-c0e10de3983c

[{"Product":{"code":"SSEPGG","label":"Db2 for Linux, UNIX and Windows"},"Business Unit":{"code":"BU058","label":"IBM Infrastructure w\/TPS"},"Component":"Operating System \/ Hardware - OS Configuration","Platform":[{"code":"PF002","label":"AIX"}],"Version":"9.5;9.7","Edition":"","Line of Business":{"code":"LOB10","label":"Data and AI"}}]

Document Information

Modified date:
16 June 2018

UID

swg21430458