Job Control Language (JCL) ist ein Sammelbegriff für die Skriptsprachen, die auf IBM-Mainframe-Betriebssystemen verwendet werden. Mit JCL wird dem System mitgeteilt, wie ein Batch-Job ausgeführt, welche Programme gestartet und welche Dateien oder Geräte für Ein- und Ausgabe verwendet werden sollen. JCL steuert außerdem die Reihenfolge von Verarbeitungsschritten, die Fehlerbehandlung und die Verwaltung von Ausgabekanälen.

Der Zweck der JCL besteht konkret darin, anzugeben

  • welches Programm oder welche Prozedur ausgeführt werden soll (z. B. ein COBOL- oder PL/I-Programm),
  • welche Eingabe- und Ausgabedateien oder -geräte verwendet werden (z. B. PDS, PS, VSAM),
  • wie Datensätze formatiert oder organisiert sind (DCB-Angaben),
  • unter welchen Bedingungen ein Schritt übersprungen oder abgebrochen werden soll (z. B. Konditionen basierend auf Rückgabecodes), und
  • wie Ausgabe (SYSOUT) zu behandeln bzw. wohin Protokolle zu senden sind.

Es existieren zwei unterschiedliche IBM-JCL-Familien:

  • eine für die Betriebssystem-Linie, die mit DOS/360 beginnt und deren letztes Mitglied z/VSE ist; und
  • die andere für die Abstammungslinie von OS/360 bis z/OS, wobei letztere jetzt JES-Erweiterungen, die Job Entry Control Language (JECL), enthält.

Beide JCL-Linien teilen einige grundlegende Konzepte (z. B. Job-, Step- und DD-Konstrukte), sind jedoch in Syntax, verfügbaren Parametern und Systemintegration deutlich unterschiedlich. Insbesondere hat z/OS zusätzliche Elemente wie JES2/JES3-spezifische Steuerungen, IF/THEN/ELSE-Logik und umfangreiche Prozedurmechanismen.

Grundaufbau einer JCL

Typische JCL-Anweisungen sind:

  • JOB – definiert den Jobkopf mit Angaben zu Jobname, Accounting, Priorität, Klasse und ggf. Umgebungsanforderungen (z. B. REGION).
  • EXEC – startet ein Programm oder ruft eine Prozedur auf. Beispiel: EXEC PGM=MYPROG oder EXEC PROC=MYPROC.
  • DD (Data Definition) – beschreibt Eingabe-/Ausgabedateien, Geräte, Volumes, Dispositionen und physikalische Parameter wie DCB-Attribute oder SPACE-Angaben.

Weitere wichtige JCL-Konzepte sind:

  • Disposition (DISP) – gibt an, ob eine Datei neu angelegt, überschrieben, behalten oder gelöscht werden soll (z. B. DISP=(NEW,CATLG,DELETE)).
  • UNIT / VOL= – spezifiziert das Gerät oder die Volume-Seriennummer, auf dem die Datei liegen soll.
  • SYSOUT / SYSIN – steuern, wohin Druck- oder Protokollausgaben gehen bzw. wo Steuerdaten für ein Programm herkommen.
  • CONCATENATION – mehrere DD-Eingabedateien können hintereinandergehängt werden, so dass ein Programm sie als eine logische Eingabe sieht.
  • Konditionale Steuerung – z. B. COND-Parameter oder in z/OS IF/THEN/ELSE, die Schritte überspringen, wenn vorherige Schritte bestimmte Return-Codes lieferten.
  • Prozeduren (PROC) – wiederverwendbare Gruppen von JCL-Steps; sie können katalogisiert oder im Stream eingebettet sein und Parameter bzw. symbolische Variablen (&PARAM) verwenden.

Unterschiede zwischen z/OS- und z/VSE-JCL

Wesentliche Unterschiede betreffen Syntaxdetails, verfügbare Steueroptionen und die Systemkomponenten, die Jobs verwalten:

  • z/OS
    • Nutzen JES2 oder JES3 als Job-Entry-System; JECL-Erweiterungen erlauben z. B. erweiterte SYSOUT-Steuerung, Routing und komplexe Prozeduren.
    • Unterstützt erweiterte IF/THEN/ELSE-Konstrukte und mehr Optionen für Konditionals und Paramerterübergabe an Prozeduren.
    • Weitreichende Unterstützung für moderne Storage-Typen (z. B. umfangreiche VSAM-Möglichkeiten), Schnittstellen zu DB2, z/OS UNIX (USS) und anderen Subsystemen.
  • z/VSE
    • Stammend aus der DOS/360-Linie, oft kompaktere Syntax und andere Befehlsnamen/Parameter.
    • Unterschiede bei Device- und Volume-Management sowie bei den verfügbaren DD-Attributen.
    • Andere Werkzeuge und Utilities zur Jobverwaltung; manche JCL-Konstrukte oder -Praktiken aus z/OS sind hier nicht verfügbar oder funktional anders umgesetzt.

Praktische Hinweise und typische Fehlerquellen

  • JCL ist streng in Bezug auf Syntax und Feldpositionen (historisch waren Spaltenbereiche wichtig). Ein falsch gesetztes Komma oder ein Tippfehler in einem Parameter führt oft zu Jobabbruch.
  • Rückgabecodes (Return Codes) der Programme sind entscheidend für die Steuerung: Diese werden zur bedingten Ausführung weiterer Steps herangezogen.
  • Beim Umgang mit DISP und Katalogisierung sollte man genau wissen, ob Dateien katalogisiert, temporär oder instream erzeugt werden sollen – falsche Angaben können zu Datenverlust führen.
  • Prozeduren sind praktisch für Wiederverwendung, können aber beim Einsatz von symbolischen Parametern schwer zu debuggen sein, wenn die Substitution nicht wie erwartet erfolgt.
  • Viele Organisationen verwenden Tools (Job-Schedulers, JCL-Wizards, Templates), die JCL automatisieren oder validieren; dennoch bleibt Verständnis der Basis-JCL wichtig für Fehlersuche und Performance-Tuning.

Wer nutzt JCL und wofür heute noch?

JCL wird primär von Batch-Entwicklern, Systemprogrammierern und Betriebspersonal auf Mainframes verwendet. Trotz modernerer Schnittstellen ist JCL nach wie vor zentral für:

  • geplante Stapelverarbeitung großer Unternehmensdatenmengen (Payroll, Abrechnung, Reporting),
  • Starten und Koordinieren von Subsystemen (z. B. Datenbank-Batches, Backups),
  • Integration mit Job-Schedulern und Monitoring-Lösungen,
  • und für die Verwaltung von Produktionsprozessen, bei denen hohe Zuverlässigkeit und Nachvollziehbarkeit erforderlich sind.

Zusammenfassend ist JCL eine spezialisierte Kontrollsprache für Mainframe-Batchverarbeitung. Sie ist mächtig, aber in vielen Details strikt und systemabhängig — insbesondere zwischen den Linien z/VSE und z/OS mit ihren jeweiligen JES- und Prozedurerweiterungen.