z/OS and TSO message

IEF450I: Job step abended

IEF450I means a step in a batch job ended abnormally (abended). It names the job and step, then gives the system abend code (Sxxx), the user abend code (Uxxxx) and a reason code.

Also written as IEF450, IEF450I ABEND=, ABEND=S0C7 U0000, job step abended, IEF450I REASON=.

What it means

z/OS writes IEF450I when a job step ends with an abend instead of finishing normally. It's a summary line. It tells you which step failed and with what code, but not why.

The I at the end of the message number stands for informational. By the time you read it, the step has already ended.

Here is how to read the fields, using IEF450I PAYRUN01 STEP020 - ABEND=S0C7 U0000 REASON=00000007 as the example.

  • PAYRUN01 is the job name and STEP020 is the step name. If the step runs inside a cataloged procedure, the procedure step name appears as well.
  • ABEND=S0C7 is the system completion code, in hexadecimal. S000 means there was no system abend.
  • U0000 is the user completion code, in decimal. It's set when a program or product ends itself on purpose, such as U4038 from Language Environment. U0000 means there was no user abend.
  • REASON=00000007 is a hexadecimal reason code. Its meaning depends on the abend. For S806, 04 means the module wasn't found. For S0C4, 04 means a protection exception, while 10 and 11 mean the address wasn't valid. For S013, it's the 013 reason code.

Normally only one of S and U is non-zero. Steps after the failed one are skipped unless their COND parameter or an IF statement says to run them after an abend. Each skipped step gets IEF272I STEP WAS NOT EXECUTED.

Common causes

  • Bad data in a numeric field (S0C7), or a program using an address it isn't allowed to use (S0C4).
  • A program or a module it calls wasn't found (S806, with CSV003I).
  • An output data set ran out of space (SB37, SD37 or SE37).
  • The step ran out of CPU time (S322), or an operator cancelled it (S222).
  • RACF refused access to a data set (S913), or a data set couldn't be opened (S013).
  • A program ended itself with a user abend, such as U4038 from Language Environment or U0016 from a sort.

How to find the problem

  1. Open the job's output in SDSF and find IEF450I in the JES2 job log (JESMSGLG) or the system messages (JESYSMSG). Note the step name.
  2. Decide which code applies. If the S value isn't S000, it's a system abend, so look up that code. If the U value isn't U0000, it's a user abend, so read the failing program's own messages in its SYSOUT or SYSPRINT.
  3. Read the REASON value together with the abend page for that code. The same reason number means different things for different abends.
  4. Scroll up to the messages from the same step just before IEF450I. IEC141I, CSV003I, ICH408I, CEE messages and the IEA995I symptom dump usually name the data set, module or program offset involved.
  5. If a SYSUDUMP or CEEDUMP was written, it holds the details needed to find the failing statement. Also note which later steps show IEF272I, because you'll need that list to decide where to restart.

How to fix it

  • Fix the cause the abend code points to.
  • Before rerunning, check what the failed step left behind. Delete or reset partial output data sets, or the rerun may fail on a duplicate data set name.
  • Restart from the failed step with RESTART=STEP020 on the JOB statement instead of rerunning steps that already worked.
  • Use IF/THEN/ELSE in the JCL, such as IF (ABEND) THEN, for cleanup or alert steps that should run only after a failure.
  • Send user abends and data problems to the application team, operator cancels to operations, and recurring system-level abends to the systems programmers.

What it looks like

IEA995I SYMPTOM DUMP OUTPUT
  SYSTEM COMPLETION CODE=0C4  REASON CODE=00000004
IEF450I PAYRUN01 STEP020 - ABEND=S0C4 U0000 REASON=00000004  TIME=02.14.37
IEF272I PAYRUN01 STEP030 - STEP WAS NOT EXECUTED.

IEF450I PAYRUN02 SORT010 - ABEND=S000 U0016 REASON=00000000  TIME=03.05.11

Questions

What does U0000 mean when the abend is S0C4?

It means there was no user abend. The step failed with a system abend, so only the S value matters and the U value is zero.

Why is the REASON field zero?

Some abends don't use a reason code, and user abends often leave it at zero. The abend code alone, plus the messages before IEF450I, tell you what happened.

Is an abend the same as a non-zero return code?

No. A return code, such as RC 0008, means the program finished and reported a problem. An abend means the step was stopped abnormally and has no return code.