Description:
Due to a rare, unpredictable, non-recreateable problem during the shutdown of the ENF address space, you may not be able to successfully restart ENF due to an enqueue problem. This situation has only been reported once, but due to the nature of the problem and the requirement to get the ENF address space running again without a system IPL, we wanted to provide this document to describe how to circumvent the situation.
The potential of this situation can only occur if running ENF with Datacom/AD as its database. Therefore if you have NODB defined in your ENF parameter file this scenario would not be possible.
Symptom:
A restart of ENF reveals the following messages:
CAIENF:DB00212I - CA Datacom SQL Version 14.0
CAIENF:DB00905I - DIRECTORY (CXX) VERSION 14.0 LEVEL 1 AD SIMPLIFY YES
CAIENF:DB00242E - REQUIRED ENQ NOT AVAILABLE, MUFNAME=ENFMUF1
CAIENF:DB00205E - MULTI-USER ERROR - 0004 MUFNAME=ENFMUF1 SVC=000
CAS9234E - DBMUFPR start failed, ended early or in error (CC=X'000004').
*CAS9203E - CA-ENF Initialization error - terminating
IEA989I SLIP TRAP ID=X13E MATCHED. JOBNAME=CAIENF , ASID=011B.
IEF450I CAIENF CAIENF - ABEND=S000 U0203 REASON=00000028 016 TIME=09.49.28
IEF404I CAIENF - ENDED - TIME=09.49.28
After realizing the above symptom, running the following Datacom utility may reveal that the MUF is disabled.
//REPORT EXEC PGM=DBUTLTY,REGION=4M
//STEPLIB DD DISP=SHR,DSN=yourHLQ.CUSLIB << cuslib from ENF task
// DD DISP=SHR,DSN=yourHLQ.CAAXLOAD
//SYSIN DD *
REPORT MEMORY=MVS
/*
//
Here is an example (edited) of the results from MEMORY report. In this example you can see two MUFs defined. The one for ENF shows "disabled" and the other shows "enabled"
MUF NAME STATUS REL JOB NAME JOB ID CXX NAME DC
ENFMUF1 DISABLED 14.0 CAIENF STC01189 ENFMUF1 AD
ADMUF01 ENABLED 11.0 DATACOM ADCXX AD
Resolution:
To circumvent this problem, the quickest and easiest thing to do is to reassemble the DBSIDPR module to contain a different MUFNAME. This will allow you to restart ENF. It is recommended to rename the existing DBSIDPR module in the CUSLIB so that you have the original copy to fallback to.
Prior to your next scheduled IPL you may elect to rerun this job to reassemble the DBSIDPR module to change the MUFNAME back to the original value OR more simply revert back to the saved copy of the original DBSIDPR module.
Here is some sample JCL to handle the reassemble of DBSIDPR. First edit member DBSIDPR in CUSMAC to specify a different MUFNAME that is unique to the environment. Change only TARGET_MUF_LIST=(muf_name) to specify a different MUFNAME to be used by ENF. Do not change any other values as they should remain set to what was defined when the MUF was originally built for ENF.
//ASM1 EXEC PGM=ASMA90,PARM='DECK,NOOBJECT'
//SYSLIB DD DISP=SHR,DSN=yourHLQ.CAAXMAC << MODIFY
// DD DISP=SHR,DSN=SYS1.MACLIB
//*
//SYSUT1 DD DSN=&&SYSUT1,UNIT=VIO,SPACE=(1700,(600,100))
//SYSUT2 DD DSN=&&SYSUT2,UNIT=VIO,SPACE=(1700,(300,50))
//SYSUT3 DD DSN=&&SYSUT3,UNIT=VIO,SPACE=(1700,(300,50))
//SYSTERM DD SYSOUT=*,DCB=BLKSIZE=1089
//SYSPRINT DD SYSOUT=*,DCB=BLKSIZE=1089
//SYSPUNCH DD DSN=&&DCMPUNCH,DISP=(NEW,PASS,DELETE),
// UNIT=VIO,SPACE=(TRK,(15,15)),
// DCB=(RECFM=FB,LRECL=80,BLKSIZE=3200)
//SYSIN DD DISP=SHR,DSN=yourHLQ.CUSMAC(DBSIDPR) << MODIFY
//* *-----------------------------------------------------------------*
//LINK EXEC PGM=IEWL,PARM='LIST,XREF,LET,NCAL',COND=(5,LT)
//SYSPRINT DD SYSOUT=*
//SYSLIN DD DSN=&&DCMPUNCH,DISP=(OLD,DELETE)
// DD DDNAME=SYSIN
//SYSLMOD DD DISP=SHR,DSN=yourHLQ.CUSLIB << CUSLIB FROM ENF
//SYSUT1 DD UNIT=VIO,SPACE=(1024,(200,20))
//SYSIN DD *
NAME DBSIDPR(R)
/*
//