JCLadvanced

Checkpoint/Restart and Job Recovery

Understand how long-running batch jobs use checkpoints to resume from a mid-point after failure instead of rerunning from the beginning.

Batch jobs that process massive files or run for hours can't afford to restart entirely from step one after a failure near the end — checkpoint/restart lets a job save its progress periodically and resume from the last checkpoint rather than from scratch. This is an advanced but genuinely important interview topic because production support teams live and die by their ability to recover a failed overnight batch cycle quickly.

Checkpoint/restart is a video game's save-point system — without it, dying at the final boss means replaying the entire level from the start; with periodic saves, you resume from the last checkpoint instead of losing hours of progress.

Key Concepts

1
At the JCL level, restart capability starts with the RESTART parameter on the JOB or EXEC statement, which tells the system to begin execution at a specific step (or step.procstep) rather than the first step — useful when an entire step failed and prior steps' output is still valid and doesn't need to be regenerated. This is coarse-grained: it restarts at a step boundary, not mid-step.
2
For genuinely long-running steps (a program processing millions of records for hours), COBOL programs can issue checkpoints via the SORT/COBOL runtime's checkpoint facility, writing periodic markers to a checkpoint dataset (SYSCHK) that record exactly how far processing got. On restart, the job can resume from the last checkpoint mid-step rather than reprocessing everything from that step's start, which can save enormous elapsed time on a failed nine-hour job caught at hour eight.
3
Interviewers often probe the operational reality here: checkpoint/restart requires disciplined design (idempotent processing, careful checkpoint dataset management, and coordination with the datasets being read/written) — it's not automatic, and a program not written with restart in mind cannot simply gain this capability by adding a RESTART= parameter after the fact.