Mainframe Path Start learning free
Beginner7 min readLesson 4 of 4

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.

Anatomy of a message ID
IEFComponent prefix — here, job scheduling
450Message number
ISeverity: I=info, W=warning, E=error, A/D=action needed
PrefixComponent
IEF, IEABase z/OS: job scheduling, allocation, system services
IGDSMS — storage management and dataset placement
IKJTSO
ICHRACF security
IDCIDCAMS — the VSAM and catalog utility
IEB, ICE, SORTUtilities: IEBGENER, IEBCOPY, DFSORT
DSNDB2
DFHCICS
IGZCOBOL 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.

EndingLooks likeMeans
Return code 0RC=0000Clean
Return code 4RC=0004Warning; usually fine but read it
Return code 8RC=0008Something the program considers a failure
Return code 12/16RC=0012Serious; step usually should not continue
System abendS0C7, S806, SB37z/OS stopped it — the S means system
User abendU4038, U1024The program or a product stopped itself

The abends you will meet in your first month

CodePlain meaningUsual cause
S0C7Bad numeric dataA field defined as numeric contains spaces or junk
S0C4Invalid storage referenceReading past the end of a table or a bad pointer
S806Program not foundThe load module is not in the libraries the step searched
S822Not enough regionREGION too small for what the program asked for
SB37 / SD37 / SE37Out of spaceThe dataset filled its allocation and could not extend
S013Open failedDataset attributes do not match what the program expects
U4038Language Environment abendA run-time error; the real detail is in the CEE messages

Common mistakes

Treating RC=4 as success

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'.

Reading only the abend code

The messages immediately before the abend usually name the dataset or field involved. The code alone tells you the category, not the cause.

Assuming S0C7 means the program is broken

Far more often the data is broken — an uninitialised field or a bad record arriving from upstream.

What you will see at work

Key terms

Check your understanding.
Take this lesson's quiz and save your progress. Free.

Take the lesson quiz
← SDSF: watching the systemBack to z/OS fundamentals