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.