JCL - Définition des ensembles de données

Un nom d'ensemble de données spécifie le nom d'un fichier et il est indiqué par DSN dans JCL. Le paramètre DSN fait référence au nom de l'ensemble de données physique d'un ensemble de données nouvellement créé ou existant. La valeur DSN peut être constituée de sous-noms de 1 à 8 caractères chacun, séparés par des points et d'une longueur totale de 44 caractères (alphanumériques). Voici la syntaxe:

DSN=&name | *.stepname.ddname

Temporary datasetsont besoin de stockage uniquement pour la durée du travail et sont supprimés à la fin du travail. Ces ensembles de données sont représentés commeDSN=&name ou simplement sans DSN spécifié.

Si un ensemble de données temporaire créé par une étape de tâche doit être utilisé dans l'étape de tâche suivante, il est référencé comme DSN=*.stepname.ddname. C'est appeléBackward Referencing.

Concaténation d'ensembles de données

S'il existe plusieurs ensembles de données du même format, ils peuvent être concaténés et transmis en tant qu'entrée au programme dans un seul nom 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

Dans l'exemple ci-dessus, trois ensembles de données sont concaténés et transmis en entrée au programme SORT dans le nom SORTIN DD. Les fichiers sont fusionnés, triés sur les champs clés spécifiés, puis écrits dans un seul fichier de sortie SAMPLE.OUTPUT dans le nom SORTOUT DD.

Remplacer les ensembles de données

Dans un JCL standardisé, le programme à exécuter et ses jeux de données associés sont placés dans une procédure cataloguée, appelée dans le JCL. Habituellement, à des fins de test ou pour résoudre un incident, il peut être nécessaire d'utiliser des ensembles de données différents de ceux spécifiés dans la procédure cataloguée. Dans ce cas, l'ensemble de données de la procédure peut être remplacé dans le 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

Dans l'exemple ci-dessus, l'ensemble de données IN1 utilise le fichier MYDATA.URMI.INPUT dans le PROC, qui est remplacé dans le JCL. Par conséquent, le fichier d'entrée utilisé lors de l'exécution est MYDATA.OVER.INPUT. Veuillez noter que l'ensemble de données est appelé STEP1.IN1. S'il n'y a qu'une seule étape dans le JCL / PROC, alors l'ensemble de données peut être référencé uniquement avec le nom DD. De même, s'il existe plusieurs étapes dans le JCL, l'ensemble de données doit être remplacé par 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
//*

Dans l'exemple ci-dessus, sur les trois ensembles de données concaténés dans IN1, le premier est remplacé dans le JCL et le reste est conservé comme celui présent dans PROC.

Définition des GDG dans un JCL

Les groupes de données de génération (GDG) sont des groupes d'ensembles de données liés les uns aux autres par un nom commun. Le nom commun est appelé base GDG et chaque ensemble de données associé à la base est appelé version GDG.

Par exemple, MYDATA.URMI.SAMPLE.GDG est le nom de base GDG. Les ensembles de données sont nommés MYDATA.URMI.SAMPLE.GDG.G0001V00, MYDATA.URMI.SAMPLE.GDG.G0002V00 et ainsi de suite. La dernière version du GDG est appelée MYDATA.URMI.SAMPLE.GDG (0), les versions précédentes sont appelées (-1), (-2) et ainsi de suite. La prochaine version à créer dans un programme est appelée MYDATA.URMI.SAMPLE.GDG (+1) dans le JCL.

Créer / modifier GDG dans un JCL

Les versions GDG peuvent avoir des paramètres DCB identiques ou différents. Un modèle initial DCB peut être défini pour être utilisé par toutes les versions, mais il peut être remplacé lors de la création de nouvelles versions.

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

Dans l'exemple ci-dessus, l'utilitaire IDCAMS définit la base GDG dans GDGSTEP1 avec les paramètres ci-dessous passés dans l'instruction SYSIN DD:

  • NAME spécifie le nom de l'ensemble de données physique de la base GDG.

  • LIMIT spécifie le nombre maximum de versions que la base GDG peut contenir.

  • EMPTY décatalogue toutes les générations lorsque la LIMITE est atteinte.

  • NOEMPTY décataloge la génération la moins récente.

  • SCRATCH supprime physiquement la génération lorsqu'elle n'est pas cataloguée.

  • NOSCRATCH ne supprimez pas le jeu de données, c'est-à-dire qu'il peut être référencé en utilisant les paramètres UNIT et VOL.

Dans GDGSTEP2, l'utilitaire IEFBR14 spécifie les paramètres DD du modèle à utiliser par toutes les versions.

IDCAMS peut être utilisé pour modifier les paramètres de définition d'un GDG tels que l'augmentation de LIMIT, le changement de EMPTY en NOEMPTY, etc., et ses versions associées à l'aide de la commande SYSIN sont ALTER MYDATA.URMI.SAMPLE.GDG LIMIT(15) EMPTY.

Supprimer GDG dans un JCL

En utilisant l'utilitaire IEFBR14, nous pouvons supprimer une seule version d'un GDG.

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

Dans l'exemple ci-dessus, la dernière version de MYDATA.URMI.SAMPLE.GDG est supprimée. Veuillez noter que le paramètre DISP à l'achèvement normal du travail est codé comme DELETE. Par conséquent, l'ensemble de données est supprimé lorsque l'exécution du travail est terminée.

IDCAMS peut être utilisé pour supprimer le GDG et ses versions associées à l'aide de la commande SYSIN DELETE(MYDATA.URMI.SAMPLE.GDG) GDG FORCE/PURGE.

  • FORCEsupprime les versions GDG et la base GDG. Si l'une des versions de GDG est définie avec une date d'expiration qui n'a pas encore expiré, celles-ci ne sont pas supprimées et la base GDG est donc conservée.

  • PURGE supprime les versions GDG et la base GDG quelle que soit la date d'expiration.

Utilisation de GDG dans un JCL

Dans l'exemple suivant, la dernière version de MYDATA.URMI.SAMPLE.GDG est utilisée comme entrée du programme et une nouvelle version de MYDATA.URMI.SAMPLE.GDG est créée en tant que sortie.

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

Ici, si le GDG avait été référencé par le nom réel tel que MYDATA.URMI.SAMPLE.GDG.G0001V00, cela conduit à changer le JCL à chaque fois avant l'exécution. L'utilisation de (0) et (+1) permet de substituer dynamiquement la version GDG pour l'exécution.