JCL - Definizione di set di dati

Un nome del set di dati specifica il nome di un file ed è indicato da DSN in JCL. Il parametro DSN fa riferimento al nome del set di dati fisico di un set di dati appena creato o esistente. Il valore DSN può essere composto da sotto-nomi di lunghezza da 1 a 8 caratteri ciascuno, separati da punti e di lunghezza totale di 44 caratteri (alfanumerici). La seguente è la sintassi:

DSN=&name | *.stepname.ddname

Temporary datasetsnecessitano di archiviazione solo per la durata del lavoro e vengono eliminati al completamento del lavoro. Tali set di dati sono rappresentati comeDSN=&name o semplicemente senza un DSN specificato.

Se un set di dati temporaneo creato da una fase di lavoro deve essere utilizzato nella fase di lavoro successiva, viene indicato come DSN=*.stepname.ddname. Questo è chiamatoBackward Referencing.

Set di dati concatenati

Se è presente più di un set di dati dello stesso formato, è possibile concatenarli e passare come input al programma in un unico nome 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

Nell'esempio precedente, tre set di dati vengono concatenati e passati come input al programma SORT nel nome DD SORTIN. I file vengono uniti, ordinati nei campi chiave specificati e quindi scritti in un unico file di output SAMPLE.OUTPUT nel nome DD SORTOUT.

Sostituzione dei set di dati

In un JCL standardizzato, il programma da eseguire e i relativi set di dati vengono inseriti in una procedura catalogata, che viene richiamata nel JCL. Di solito, a scopo di test o per risolvere un incidente, potrebbe essere necessario utilizzare set di dati diversi da quelli specificati nella procedura catalogata. In tal caso, il set di dati nella procedura può essere sovrascritto nel 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

Nell'esempio precedente, il set di dati IN1 utilizza il file MYDATA.URMI.INPUT in PROC, che viene sovrascritto in JCL. Quindi, il file di input utilizzato in esecuzione è MYDATA.OVER.INPUT. Si noti che il set di dati è denominato STEP1.IN1. Se è presente un solo passaggio in JCL / PROC, è possibile fare riferimento al set di dati solo con il nome DD. Allo stesso modo, se sono presenti più passaggi nel JCL, il set di dati deve essere sovrascritto come 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
//*

Nell'esempio precedente, dei tre set di dati concatenati in IN1, il primo viene sovrascritto in JCL e il resto viene mantenuto come quello presente in PROC.

Definizione di GDG in un JCL

I gruppi di dati di generazione (GDG) sono gruppi di set di dati correlati tra loro da un nome comune. Il nome comune è indicato come base GDG e ogni set di dati associato alla base è chiamato versione GDG.

Ad esempio, MYDATA.URMI.SAMPLE.GDG è il nome di base GDG. I set di dati sono denominati MYDATA.URMI.SAMPLE.GDG.G0001V00, MYDATA.URMI.SAMPLE.GDG.G0002V00 e così via. L'ultima versione del GDG è denominata MYDATA.URMI.SAMPLE.GDG (0), le versioni precedenti sono indicate come (-1), (-2) e così via. La prossima versione da creare in un programma è denominata MYDATA.URMI.SAMPLE.GDG (+1) nella JCL.

Crea / modifica GDG in un JCL

Le versioni GDG possono avere parametri DCB uguali o diversi. Un modello DCB iniziale può essere definito per essere utilizzato da tutte le versioni, ma può essere sovrascritto durante la creazione di nuove versioni.

//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)
//

Nell'esempio precedente, l'utilità IDCAMS definisce la base GDG in GDGSTEP1 con i seguenti parametri passati nell'istruzione SYSIN DD:

  • NAME specifica il nome del dataset fisico della base GDG.

  • LIMIT specifica il numero massimo di versioni che la base GDG può contenere.

  • EMPTY disincatalizza tutte le generazioni quando viene raggiunto il LIMITE.

  • NOEMPTY uncataloges la generazione meno recente.

  • SCRATCH elimina fisicamente la generazione quando non è catalogata.

  • NOSCRATCH non eliminare il dataset, ovvero è possibile fare riferimento utilizzando i parametri UNIT e VOL.

In GDGSTEP2, l'utilità IEFBR14 specifica i parametri DD del modello che devono essere utilizzati da tutte le versioni.

IDCAMS può essere utilizzato per modificare i parametri di definizione di un GDG come aumentare LIMIT, cambiare EMPTY in NOEMPTY, ecc. E le sue versioni correlate utilizzando il comando SYSIN è ALTER MYDATA.URMI.SAMPLE.GDG LIMIT(15) EMPTY.

Elimina GDG in un JCL

Utilizzando l'utility IEFBR14, possiamo eliminare una singola versione di un GDG.

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

Nell'esempio precedente, l'ultima versione di MYDATA.URMI.SAMPLE.GDG viene eliminata. Notare che il parametro DISP al normale completamento del lavoro è codificato come DELETE. Pertanto, il set di dati viene eliminato quando il lavoro completa l'esecuzione.

IDCAMS può essere utilizzato per eliminare il GDG e le sue versioni correlate utilizzando il comando SYSIN DELETE(MYDATA.URMI.SAMPLE.GDG) GDG FORCE/PURGE.

  • FORCEcancella le versioni GDG e la base GDG. Se una delle versioni GDG è impostata con una data di scadenza che deve ancora scadere, quelle non vengono eliminate e quindi la base GDG viene mantenuta.

  • PURGE cancella le versioni GDG e la base GDG indipendentemente dalla data di scadenza.

Utilizzo di GDG in un JCL

Nell'esempio seguente, l'ultima versione di MYDATA.URMI.SAMPLE.GDG viene utilizzata come input per il programma e una nuova versione di MYDATA.URMI.SAMPLE.GDG viene creata come output.

//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

Qui, se il GDG fosse stato indicato con il nome effettivo come MYDATA.URMI.SAMPLE.GDG.G0001V00, allora porta a cambiare il JCL ogni volta prima dell'esecuzione. L'uso di (0) e (+1) sostituisce dinamicamente la versione GDG per l'esecuzione.