JCL - Definiowanie zestawów danych
Nazwa zbioru danych określa nazwę pliku i jest oznaczona przez DSN w JCL. Parametr DSN odnosi się do nazwy fizycznego zestawu danych nowo utworzonego lub istniejącego zestawu danych. Wartość DSN może składać się z pod-nazw, każda o długości od 1 do 8 znaków, oddzielonych kropkami, o łącznej długości 44 znaków (alfanumeryczne). Oto składnia:
DSN=&name | *.stepname.ddname
Temporary datasetswymagają przechowywania tylko na czas trwania zadania i są usuwane po zakończeniu zadania. Takie zbiory danych są reprezentowane jakoDSN=&name lub po prostu bez określonego DSN.
Jeśli tymczasowy zestaw danych utworzony przez krok zadania ma być użyty w następnym kroku zadania, odwołuje się do niego jako DSN=*.stepname.ddname. To się nazywaBackward Referencing.
Łączenie zestawów danych
Jeśli istnieje więcej niż jeden zestaw danych o tym samym formacie, można je połączyć i przekazać jako dane wejściowe do programu w jednej nazwie DD.
//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
W powyższym przykładzie trzy zestawy danych są łączone i przekazywane jako dane wejściowe do programu SORT w nazwie SORTIN DD. Pliki są scalane, sortowane według określonych pól kluczy, a następnie zapisywane w jednym pliku wyjściowym SAMPLE.OUTPUT w nazwie SORTOUT DD.
Zastępowanie zestawów danych
W znormalizowanym JCL program do wykonania i powiązane z nim zbiory danych są umieszczane w skatalogowanej procedurze, która jest wywoływana w JCL. Zwykle do celów testowania lub naprawy incydentu może zaistnieć potrzeba użycia innych zestawów danych niż określone w procedurze wpisanej do katalogu. W takim przypadku zestaw danych w procedurze może zostać zastąpiony w JCL.
//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
W powyższym przykładzie zestaw danych IN1 używa pliku MYDATA.URMI.INPUT w PROC, który jest nadpisywany w JCL. Stąd plik wejściowy używany podczas wykonywania to MYDATA.OVER.INPUT. Należy pamiętać, że zbiór danych nosi nazwę STEP1.IN1. Jeśli w JCL / PROC jest tylko jeden krok, wówczas do zbioru danych można odwołać się tylko z nazwą DD. Podobnie, jeśli w JCL jest więcej niż jeden krok, to zbiór danych ma zostać zastąpiony jako JSTEP1.STEP1.IN1.
//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
//*
W powyższym przykładzie z trzech zestawów danych połączonych w IN1, pierwszy z nich jest nadpisywany w JCL, a reszta jest zachowywana jako obecna w PROC.
Definiowanie GDG w JCL
Grupy danych generacji (GDG) to grupa zbiorów danych powiązanych ze sobą pod wspólną nazwą. Nazwa zwyczajowa jest nazywana bazą GDG, a każdy zestaw danych powiązany z bazą nazywany jest wersją GDG.
Na przykład MYDATA.URMI.SAMPLE.GDG jest nazwą podstawową GDG. Zestawy danych mają nazwy MYDATA.URMI.SAMPLE.GDG.G0001V00, MYDATA.URMI.SAMPLE.GDG.G0002V00 i tak dalej. Najnowsza wersja GDG jest nazywana MYDATA.URMI.SAMPLE.GDG (0), poprzednie wersje są określane jako (-1), (-2) i tak dalej. Następna wersja, która ma zostać utworzona w programie, jest oznaczona jako MYDATA.URMI.SAMPLE.GDG (+1) w JCL.
Utwórz / zmień GDG w JCL
Wersje GDG mogą mieć takie same lub różne parametry DCB. Początkowy model DCB można zdefiniować do użytku we wszystkich wersjach, ale można go zastąpić podczas tworzenia nowych wersji.
//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)
//
W powyższym przykładzie narzędzie IDCAMS definiuje bazę GDG w GDGSTEP1 z poniższymi parametrami przekazanymi w instrukcji SYSIN DD:
NAME określa nazwę fizycznego zbioru danych bazy GDG.
LIMIT określa maksymalną liczbę wersji, które może pomieścić baza GDG.
EMPTY Odkatalogowuje wszystkie pokolenia po osiągnięciu LIMITU.
NOEMPTY nie kataloguje najmniejszej generacji.
SCRATCH fizycznie usuwa generację, gdy jest nieskatalogowana.
NOSCRATCH nie usuwaj zbioru danych, tzn. można do niego odwołać się za pomocą parametrów UNIT i VOL.
W GDGSTEP2 narzędzie IEFBR14 określa parametry DD modelu, które mają być używane we wszystkich wersjach.
IDCAMS może być użyty do zmiany parametrów definicji GDG, takich jak zwiększenie LIMIT, zmiana EMPTY na NOEMPTY, itp., A powiązane wersje za pomocą polecenia SYSIN to ALTER MYDATA.URMI.SAMPLE.GDG LIMIT(15) EMPTY.
Usuń GDG w JCL
Używając narzędzia IEFBR14, możemy usunąć pojedynczą wersję GDG.
//GDGSTEP3 EXEC PGM=IEFBR14
//GDGDEL DD DSN=MYDATA.URMI.SAMPLE.GDG(0),
// DISP=(OLD,DELETE,DELETE)
W powyższym przykładzie usunięto najnowszą wersję MYDATA.URMI.SAMPLE.GDG. Należy pamiętać, że parametr DISP przy normalnym zakończeniu zadania jest kodowany jako DELETE. W związku z tym zestaw danych jest usuwany po zakończeniu wykonywania zadania.
IDCAMS może być użyty do usunięcia GDG i jego pokrewnych wersji za pomocą komendy SYSIN DELETE(MYDATA.URMI.SAMPLE.GDG) GDG FORCE/PURGE.
FORCEusuwa wersje GDG i bazę GDG. Jeśli którakolwiek z wersji GDG ma ustawioną datę ważności, która jeszcze nie wygasła, to te nie są usuwane, a tym samym baza GDG zostaje zachowana.
PURGE usuwa wersje GDG i bazę GDG bez względu na datę ważności.
Używanie GDG w JCL
W poniższym przykładzie najnowsza wersja MYDATA.URMI.SAMPLE.GDG jest używana jako dane wejściowe do programu, a nowa wersja MYDATA.URMI.SAMPLE.GDG jest tworzona jako dane wyjściowe.
//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
W tym przypadku, jeśli do GDG była mowa o rzeczywistej nazwie, takiej jak MYDATA.URMI.SAMPLE.GDG.G0001V00, prowadzi to do zmiany JCL za każdym razem przed wykonaniem. Użycie (0) i (+1) powoduje, że dynamicznie zastępuje on wersję GDG do wykonania.