Reading z/OS messages and codes
z/OS tells you what happened in a very consistent format. Once you can decode a message ID and a completion code, the system stops feeling cryptic and starts feeling verbose but honest.
Message IDs have a shape
A message like IEF450I or IGD17051I is not random. The first three letters identify the component that issued it, the digits identify the message, and the final letter tells you its severity.
| Prefix | Component |
|---|---|
| IEF, IEA | Base z/OS: job scheduling, allocation, system services |
| IGD | SMS — storage management and dataset placement |
| IKJ | TSO |
| ICH | RACF security |
| IDC | IDCAMS — the VSAM and catalog utility |
| IEB, ICE, SORT | Utilities: IEBGENER, IEBCOPY, DFSORT |
| DSN | DB2 |
| DFH | CICS |
| IGZ | COBOL run time |
Two kinds of ending: return codes and abends
A step either ends normally with a return code — a number the program chose to mean something — or it abends, meaning it stopped abnormally and z/OS gave it a completion code.
| Ending | Looks like | Means |
|---|---|---|
| Return code 0 | RC=0000 | Clean |
| Return code 4 | RC=0004 | Warning; usually fine but read it |
| Return code 8 | RC=0008 | Something the program considers a failure |
| Return code 12/16 | RC=0012 | Serious; step usually should not continue |
| System abend | S0C7, S806, SB37 | z/OS stopped it — the S means system |
| User abend | U4038, U1024 | The program or a product stopped itself |
The abends you will meet in your first month
| Code | Plain meaning | Usual cause |
|---|---|---|
| S0C7 | Bad numeric data | A field defined as numeric contains spaces or junk |
| S0C4 | Invalid storage reference | Reading past the end of a table or a bad pointer |
| S806 | Program not found | The load module is not in the libraries the step searched |
| S822 | Not enough region | REGION too small for what the program asked for |
| SB37 / SD37 / SE37 | Out of space | The dataset filled its allocation and could not extend |
| S013 | Open failed | Dataset attributes do not match what the program expects |
| U4038 | Language Environment abend | A run-time error; the real detail is in the CEE messages |
Common mistakes
A return code of 4 means the program noticed something. In a compile it may be a warning worth fixing; in a utility it may mean 'nothing was copied'.
The messages immediately before the abend usually name the dataset or field involved. The code alone tells you the category, not the cause.
Far more often the data is broken — an uninitialised field or a bad record arriving from upstream.
What you will see at work
- Teams keep informal lists of 'the abends this application gives us and what they really mean'. Ask for it; if there isn't one, start it.
- Message IDs are searchable and stable across releases, which makes them the right thing to put in a ticket title.
- When you escalate, quote the first error message in full, not a paraphrase.
Key terms
Check your understanding.
Take this lesson's quiz and save your progress. Free.