What it means
z/OS checks a job's JCL in two stages. First, when the job is submitted, the JCL is read and checked for syntax. Errors at that stage, such as a misspelled keyword, stop the job before it runs. They produce IEFC messages and IEFC452I JOB NOT RUN - JCL ERROR, not IEF453I.
The second stage happens as each step starts. z/OS allocates the step's data sets and devices. It finds existing data sets in the catalog, creates new ones and reserves space. If that fails, the step doesn't run, and the job ends with IEF453I JOB FAILED - JCL ERROR.
So the JCL may be perfectly written. The error is often about the state of the data sets when the step started. Earlier steps may also have run and finished. That matters when you decide how to rerun.
The I at the end of the message number stands for informational. It records that the job has ended.
Common causes
- An input data set isn't cataloged, shown by IEF212I DATA SET NOT FOUND. The name is misspelled, the job that creates it hasn't run, or a relative GDG generation doesn't exist.
- A new data set already exists, usually because an earlier failed run created it. SMS reports IGD17101I with DUPLICATE NAME EXISTS IN CATALOG, and non-SMS volumes report IEF253I.
- There wasn't enough space to create a new data set. For SMS-managed data sets this shows as IGD17272I, saying volume selection failed for insufficient space.
- RACF refused to let the job's user ID create the new data set, shown by an ICH408I just above.
- A symbol or variable used in the JCL resolved to a different data set name than expected, such as a date qualifier for a day with no data.
How to find the problem
- Open the job's output in SDSF and go to JESYSMSG. Find the step marked IEF272I STEP WAS NOT EXECUTED. The message just above it explains the failure.
- Note which steps ran before the failure. They show IEF142I STEP WAS EXECUTED with a condition code.
- Copy the data set name from the error message and check it with ISPF option 3.4 or
LISTCAT ENTRIES('PROD.PAYROLL.DAILY'). - If you submitted the job from TSO with NOTIFY, the notify message on your screen says JCL ERROR. The detail is still only in the job output.
- If there's no IEF453I but you see IEFC messages and IEFC452I JOB NOT RUN, the problem is JCL syntax. The IEFC message gives the statement number to fix.
How to fix it
- Correct the data set name, or run the job that creates the input first.
- For a duplicate name on a rerun, delete the leftover data set first, or add a cleanup step at the start of the job. An IEFBR14 step with
DISP=(MOD,DELETE)is the usual way. - For a space failure, ask for less primary space, or ask the storage administrators to check the storage group.
- For a security refusal, send the ICH408I message to your RACF administrator.
- Restart from the failed step with
RESTART=STEP020on the JOB statement. You don't need to rerun steps that finished, unless the failed step depends on something they must redo.
What it looks like
IEF142I PAYRUN01 STEP010 - STEP WAS EXECUTED - COND CODE 0000 IEF212I PAYRUN01 STEP020 PAYIN - DATA SET NOT FOUND IEF272I PAYRUN01 STEP020 - STEP WAS NOT EXECUTED. IEF453I PAYRUN01 - JOB FAILED - JCL ERROR - TIME=02.10.44