What it means
Every program on z/OS has to be loaded from a library before it can run. That applies to the program named on the EXEC statement and to every module it calls dynamically. The part of z/OS that does this is called contents supervision, which is where the CSV prefix comes from.
It searches in a fixed order. First it checks modules already loaded for the task. Next come the task libraries, meaning STEPLIB, or JOBLIB if the step has no STEPLIB. Under TSO and ISPF, libraries such as ISPLLIB play the same part. Then it tries the link pack area, and finally the system link list. If the module isn't in any of them, z/OS writes CSV003I with the module name and ends the step with system abend 806, reason 04.
The I at the end of the message number stands for informational. It tells you which name couldn't be found. The abend that follows is what stops the step.
Common causes
- The program name is misspelled in
EXEC PGM=or in a CALL statement. - The program was never put into the library. The compile or link-edit (bind) failed, or wrote to a different library, or the change wasn't promoted to production.
- STEPLIB or JOBLIB is missing, or points to the wrong library, such as test rather than production.
- The step has its own STEPLIB, so the JOBLIB isn't searched for that step. A program that lives only in the JOBLIB library is then not found.
- A COBOL program made a dynamic CALL to a subprogram that isn't in any library the step can see. Language Environment usually reports this with CEE3501S as well.
- The module was added to a library in the system link list, but LLA (library lookaside), which caches those directories, wasn't refreshed.
How to find the problem
- Read the module name in CSV003I and compare it with the PGM= value or the name being called. A one-letter difference is common.
- In the job output, open JESYSMSG and look at the STEPLIB and JOBLIB allocation lines for the failing step. They show exactly which libraries were searched.
- Look for the member in each of those libraries with ISPF option 3.4 or
LISTDS 'TEST.PAYROLL.LOADLIB' MEMBERS. Remember that a module can also be found under an alias name. - Check the latest compile and link-edit job for the program. If the binder step failed, the module may not have been saved at all. If it was saved but marked not executable, the step fails with S706 instead of S806.
- If the module should come from the link list, a systems programmer can show the current list with
D PROG,LNKLST.
How to fix it
- Correct the program name, or add a STEPLIB DD pointing to the library that holds it.
- If the program is missing from the library, rerun the build or promotion, check it ended cleanly, then rerun the failed step.
- If the step has a STEPLIB, add the JOBLIB library to that STEPLIB concatenation when the step needs both.
- For a dynamic CALL, make sure the subprogram's library is in the step's STEPLIB, or link the subprogram into the main program statically.
- For a module newly added to a link list library, ask the systems programmers to refresh LLA with an operator command such as
F LLA,REFRESH.
What it looks like
CSV003I REQUESTED MODULE PAYCALX NOT FOUND CSV028I ABEND806-04 JOBNAME=PAYRUN01 STEPNAME=STEP020 IEA995I SYMPTOM DUMP OUTPUT SYSTEM COMPLETION CODE=806 REASON CODE=00000004 IEF450I PAYRUN01 STEP020 - ABEND=S806 U0000 REASON=00000004