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.