JCL - Definieren von Datensätzen

Ein Dataset-Name gibt den Namen einer Datei an und wird in der JCL mit DSN bezeichnet. Der DSN-Parameter bezieht sich auf den physischen Datasetnamen eines neu erstellten oder vorhandenen Datasets. Der DSN-Wert kann aus Unternamen mit einer Länge von jeweils 1 bis 8 Zeichen, getrennt durch Punkte und einer Gesamtlänge von 44 Zeichen (alphanumerisch) bestehen. Es folgt die Syntax:

DSN=&name | *.stepname.ddname

Temporary datasetsbenötigen nur Speicher für die Auftragsdauer und werden bei Abschluss des Auftrags gelöscht. Solche Datensätze werden als dargestelltDSN=&name oder einfach ohne DSN angegeben.

Wenn ein temporärer Datensatz, der von einem Jobschritt erstellt wurde, im nächsten Jobschritt verwendet werden soll, wird auf ihn verwiesen DSN=*.stepname.ddname. Das nennt manBackward Referencing.

Verketten von Datensätzen

Wenn es mehr als einen Datensatz desselben Formats gibt, können diese verkettet und als Eingabe in einem einzigen DD-Namen an das Programm übergeben werden.

//CONCATEX JOB CLASS=6,NOTIFY=&SYSUID
//*
//STEP10    EXEC PGM=SORT
//SORTIN    DD DSN=SAMPLE.INPUT1,DISP=SHR
//          DD DSN=SAMPLE.INPUT2,DISP=SHR
//          DD DSN=SAMPLE.INPUT3,DISP=SHR
//SORTOUT   DD DSN=SAMPLE.OUTPUT,DISP=(,CATLG,DELETE),
//          LRECL=50,RECFM=FB

Im obigen Beispiel werden drei Datensätze verkettet und als Eingabe im SORTIN DD-Namen an das SORT-Programm übergeben. Die Dateien werden zusammengeführt, nach den angegebenen Schlüsselfeldern sortiert und dann in eine einzelne Ausgabedatei SAMPLE.OUTPUT im Namen SORTOUT DD geschrieben.

Datensätze überschreiben

In einer standardisierten JCL werden das auszuführende Programm und die zugehörigen Datensätze in eine katalogisierte Prozedur eingefügt, die in der JCL aufgerufen wird. In der Regel müssen zu Testzwecken oder zur Behebung von Vorfällen möglicherweise andere als die im katalogisierten Verfahren angegebenen Datensätze verwendet werden. In diesem Fall kann das Dataset in der Prozedur in der JCL überschrieben werden.

//SAMPINST JOB 1,CLASS=6,MSGCLASS=Y,NOTIFY=&SYSUID
//*
//JSTEP1    EXEC CATLPROC,PROG=CATPRC1,DSNME=MYDATA.URMI.INPUT
//          DATAC=MYDATA.BASE.LIB1(DATA1)
//STEP1.IN1 DD DSN=MYDATA.OVER.INPUT,DISP=SHR
//*
//* The cataloged procedure is as below:
//*
//CATLPROC PROC PROG=,BASELB=MYCOBOL.BASE.LIB1
//*
//STEP1     EXEC PGM=&PROG
//STEPLIB   DD DSN=&BASELB,DISP=SHR
//IN1       DD DSN=MYDATA.URMI.INPUT,DISP=SHR
//OUT1      DD SYSOUT=*
//SYSOUT    DD SYSOUT=*
//SYSIN     DD MYDATA.BASE.LIB1(DATA1),DISP=SHR
//*
//STEP2     EXEC PGM=SORT

Im obigen Beispiel verwendet der Datensatz IN1 die Datei MYDATA.URMI.INPUT im PROC, die in der JCL überschrieben wird. Daher lautet die bei der Ausführung verwendete Eingabedatei MYDATA.OVER.INPUT. Bitte beachten Sie, dass der Datensatz als STEP1.IN1 bezeichnet wird. Wenn die JCL / PROC nur einen Schritt enthält, kann der Datensatz nur mit dem DD-Namen referenziert werden. Wenn die JCL mehr als einen Schritt enthält, muss das Dataset als JSTEP1.STEP1.IN1 überschrieben werden.

//SAMPINST  JOB 1,CLASS=6,MSGCLASS=Y,NOTIFY=&SYSUID
//*
//STEP      EXEC CATLPROC,PROG=CATPRC1,DSNME=MYDATA.URMI.INPUT
//          DATAC=MYDATA.BASE.LIB1(DATA1)
//STEP1.IN1 DD DSN=MYDATA.OVER.INPUT,DISP=SHR
//          DD DUMMY
//          DD DUMMY
//*

Im obigen Beispiel wird von den drei in IN1 verketteten Datensätzen der erste in der JCL überschrieben und der Rest wird als der in PROC vorhandene beibehalten.

GDGs in einer JCL definieren

Generierungsdatengruppen (GDGs) sind Gruppen von Datensätzen, die durch einen gemeinsamen Namen miteinander verbunden sind. Der gebräuchliche Name wird als GDG-Basis bezeichnet, und jeder der Basis zugeordnete Datensatz wird als GDG-Version bezeichnet.

Beispielsweise ist MYDATA.URMI.SAMPLE.GDG der GDG-Basisname. Die Datensätze heißen MYDATA.URMI.SAMPLE.GDG.G0001V00, MYDATA.URMI.SAMPLE.GDG.G0002V00 usw. Die neueste Version der GDG wird als MYDATA.URMI.SAMPLE.GDG (0) bezeichnet, frühere Versionen als (-1), (-2) und so weiter. Die nächste Version, die in einem Programm erstellt werden soll, wird in der JCL als MYDATA.URMI.SAMPLE.GDG (+1) bezeichnet.

GDG in einer JCL erstellen / ändern

Die GDG-Versionen können gleiche oder unterschiedliche DCB-Parameter haben. Ein anfängliches Modell-DCB kann so definiert werden, dass es von allen Versionen verwendet wird, es kann jedoch beim Erstellen neuer Versionen überschrieben werden.

//GDGSTEP1 EXEC PGM=IDCAMS
//SYSPRINT DD  SYSOUT=*
//SYSIN    DD  *
           DEFINE GDG(NAME(MYDATA.URMI.SAMPLE.GDG)   -
           LIMIT(7)                           -
           NOEMPTY                            -
           SCRATCH)
/*
//GDGSTEP2 EXEC PGM=IEFBR14
//GDGMODLD DD  DSN=MYDATA.URMI.SAMPLE.GDG,
//         DISP=(NEW,CATLG,DELETE),
//         UNIT=SYSDA,
//         SPACE=(CYL,10,20),
//         DCB=(LRECL=50,RECFM=FB)
//

Im obigen Beispiel definiert das Dienstprogramm IDCAMS die GDG-Basis in GDGSTEP1 mit den folgenden Parametern, die in der SYSIN DD-Anweisung übergeben werden:

  • NAME Gibt den Namen des physischen Datensatzes der GDG-Basis an.

  • LIMIT Gibt die maximale Anzahl von Versionen an, die die GDG-Basis enthalten kann.

  • EMPTY katalogisiert alle Generationen, wenn das LIMIT erreicht ist.

  • NOEMPTY Unkatalogisiert die am wenigsten neuere Generation.

  • SCRATCH Löscht die Generierung physisch, wenn sie nicht katalogisiert ist.

  • NOSCRATCH Löschen Sie den Datensatz nicht, dh er kann mit den Parametern UNIT und VOL referenziert werden.

In GDGSTEP2 gibt das Dienstprogramm IEFBR14 Modell-DD-Parameter an, die von allen Versionen verwendet werden sollen.

IDCAMS kann verwendet werden, um die Definitionsparameter einer GDG zu ändern, z. B. LIMIT zu erhöhen, EMPTY in NOEMPTY zu ändern usw., und die zugehörigen Versionen mit dem Befehl SYSIN ALTER MYDATA.URMI.SAMPLE.GDG LIMIT(15) EMPTY.

Löschen Sie GDG in einer JCL

Mit dem Dienstprogramm IEFBR14 können wir eine einzelne Version einer GDG löschen.

//GDGSTEP3   EXEC PGM=IEFBR14
//GDGDEL     DD  DSN=MYDATA.URMI.SAMPLE.GDG(0),
//           DISP=(OLD,DELETE,DELETE)

Im obigen Beispiel wird die neueste Version von MYDATA.URMI.SAMPLE.GDG gelöscht. Bitte beachten Sie, dass der DISP-Parameter bei normaler Auftragserfüllung als DELETE codiert ist. Daher wird das Dataset gelöscht, wenn der Job die Ausführung abgeschlossen hat.

IDCAMS kann verwendet werden, um die GDG und die zugehörigen Versionen mit dem Befehl SYSIN zu löschen DELETE(MYDATA.URMI.SAMPLE.GDG) GDG FORCE/PURGE.

  • FORCElöscht die GDG-Versionen und die GDG-Basis. Wenn eine der GDG-Versionen mit einem Ablaufdatum festgelegt ist, das noch nicht abgelaufen ist, werden diese nicht gelöscht, und daher bleibt die GDG-Basis erhalten.

  • PURGE löscht die GDG-Versionen und die GDG-Basis unabhängig vom Ablaufdatum.

Verwenden von GDG in einer JCL

Im folgenden Beispiel wird die neueste Version von MYDATA.URMI.SAMPLE.GDG als Eingabe für das Programm verwendet und eine neue Version von MYDATA.URMI.SAMPLE.GDG als Ausgabe erstellt.

//CNDSAMP JOB CLASS=6,NOTIFY=&SYSUID
//*
//STP01   EXEC PGM=MYCOBB
//IN1     DD DSN=MYDATA.URMI.SAMPLE.GDG(0),DISP=SHR
//OUT1    DD DSN=MYDATA.URMI.SAMPLE.GDG(+1),DISP=(,CALTG,DELETE)
//        LRECL=100,RECFM=FB

Wenn hier die GDG mit dem tatsächlichen Namen MYDATA.URMI.SAMPLE.GDG.G0001V00 bezeichnet wurde, führt dies dazu, dass die JCL jedes Mal vor der Ausführung geändert wird. Durch die Verwendung von (0) und (+1) wird die Ausführung dynamisch durch die GDG-Version ersetzt.