S806 — module not found
z/OS could not find the load module to run or load in any library the step searched.
What happened
The step ends with S806, often before your program does anything. The system names the module it could not find.
CSV003I REQUESTED MODULE PAYCALX NOT FOUND CSV028I ABEND806-04 JOBNAME=PAYJOB01 STEPNAME=STEP020 IEF450I PAYJOB01 STEP020 - ABEND=S806 U0000 REASON=00000004
What it means
A program was requested — by PGM= on the EXEC statement, by a dynamic CALL, or by a system service — and z/OS searched its libraries without finding a Member of that name. Reason code 04 means not found; other reason codes point to problems such as I/O errors while searching.
The usual search order is modules already loaded for the job step, then STEPLIB or JOBLIB, then the link pack area, then the system link list. The first match wins.
Typical causes
- The module name is misspelled, in PGM= or in the variable used for a dynamic CALL.
- The module is not in any library in the step's STEPLIB or JOBLIB Concatenation.
- The link-edit failed, so the module was never created in the target library.
- A STEPLIB concatenation is missing the Language Environment, Db2 or vendor library a called routine lives in.
- The module was promoted to a different environment's library from the one the job uses.
Symptoms
The CSV003I message names the missing module, which is often not your main program but something it calls. Compare with S706, where the module is found but marked not executable, and with an older copy running silently, where nothing abends but your change does not show. In CICS the equivalent is a program-not-found condition or an APCT abend, not S806.
Where to look
- JESMSGLG: CSV003I and the abend line.
- JESJCL: the STEPLIB and JOBLIB concatenation the system actually used, after PROC expansion and overrides.
- ISPF 3.4 member lists of each library in the concatenation.
- The link-edit (binder) output from the build or promotion.
How to diagnose
- Read the module name in CSV003I. Is it your program or something called by it?
- Check the spelling in the JCL or the dynamic CALL variable.
- Open JESJCL and list the libraries searched, in order.
- Look for the member in each library.
- If it is missing, check the binder output and the promotion record.
- If it is a system or product routine, check the right runtime library is in the concatenation.
How to fix
Correct the name, add the right library to STEPLIB, or rebuild and promote the module through your normal process. Then restart the step. Because S806 usually happens before any data is processed, a restart from the failing step is normally safe, but confirm that with the job's Runbook.
How to prevent
- Use PROCs and symbolic library names so every job points to the right environment.
- Fail the build if the binder return code is not acceptable.
- Verify promotion by listing the target library after deployment.
- Keep STEPLIB concatenations short and documented.
Production considerations
Interview question
A job abends S806 right after a promotion. What do you check?
Stuck on something else?
Ask the community or search the full course.