Archives de catégorie : JCL Info

JCL – IEBGENER

Les exemples qui suivent illustrent certaines des utilisations d’IEBGENER.
Vous pouvez utiliser le tableau 1 comme guide de référence rapide pour les exemples IEBGENER.
Les nombres dans la colonne Exemple font référence aux exemples qui suivent.

Tableau 1. Répertoire d’exemple IEBGENER

OpérationOrganisation du jeu de données PériphériqueCommentairesExemple
PRINTSéquentielDisque et imprimante
Le jeu de données est répertorié sur une imprimante.Exemple 1 : Impression d’un ensemble de données séquentielles
CONVERTSéquentiel à partitionnéBande et disqueSortie bloquée.
Trois membres doivent être créés.
Exemple 2 : Création d’un ensemble de données partitionnées à partir d’une entrée séquentielle
MERGESéquentiel vers partitionnéDisqueSortie bloquée.
Deux membres doivent être fusionnés dans l’ensemble de données existant.
Exemple 3 : convertir une entrée séquentielle en membres partitionnés
COPYSéquentielInstream et bandeSortie bloquée.Exemple 4 : entrée en flux, ensemble de données séquentielles sur volume de bande
COPY and reblockSéquentielDisque et bandeEffectue une copie de bande bloquée à partir du disque ; demande de tampon explicite.Exemple 5 : Produire une copie bloquée sur bande à partir d’un fichier disque non bloqué
COPY avec éditionSéquentielbandeSortie bloquée.
Ensemble de données édité comme un groupe d’enregistrements.
Exemple 6 : Modifier et copier un ensemble de données d’entrée séquentielle avec des étiquettes
COPY avec éditionSéquentielFichier z/OS UNIX sur disqueSortie bloquée.
Nouvelle longueur d’enregistrement spécifiée pour l’ensemble de données de sortie.
Deux groupes d’enregistrements spécifiés.
Exemple 7 : Modification et copie d’un fichier z/OS UNIX séquentiel dans un ensemble de données séquentiel
COPY avec validation DBCSSéquentielDisqueLes données DBCS sont validées et modifiées avant la copie.Exemple 8 : Éditer les données du jeu de caractères à deux octets

Les exemples qui utilisent un disque ou une bande à la place des numéros de périphérique réels doivent être modifiés avant utilisation.
Les numéros de périphérique réels dépendent de la manière dont votre installation a défini les périphériques sur votre système.

EXEMPLE

Exemple 1 : Impression d’un jeu de données séquentiel

Dans cet exemple, un ensemble de données séquentielles est imprimé.
La sortie imprimée est alignée à gauche, avec un enregistrement de 80 octets apparaissant sur chaque ligne de sortie imprimée.

//PRINT    JOB  ...
//STEP1    EXEC PGM=IEBGENER
//SYSPRINT DD  SYSOUT=A
//SYSIN    DD  DUMMY
//SYSUT1   DD  DSNAME=D80.DATA,DISP=SHR
//SYSUT2   DD  SYSOUT=A

Les instructions de contrôle des travaux sont les suivantes :

  • SYSIN DD définit un jeu de données factice.
    Étant donné qu’aucune modification n’est effectuée, aucune instruction de contrôle d’utilitaire n’est requise.
  • SYSUT1 DD définit le jeu de données séquentielles d’entrée.
  • SYSUT2 DD indique que la sortie doit être écrite sur le périphérique de sortie du système (imprimante).
    IEBGENER copie LRECL et RECFM à partir de l’ensemble de données SYSUT1 et le système détermine un BLKSIZE.

Exemple 2 : Création d’un ensemble de données partitionné à partir d’une entrée séquentielle

Dans cet exemple, un ensemble de données partitionné (composé de trois membres) est créé à partir d’une entrée séquentielle.

//TAPEDISK JOB  ...
//STEP1    EXEC PGM=IEBGENER
//SYSPRINT DD  SYSOUT=A
//SYSUT1   DD  DSNAME=INSET,UNIT=tape,LABEL=(,SL),
//             DISP=(OLD,KEEP),VOLUME=SER=001234
//SYSUT2   DD  DSNAME=NEWSET,UNIT=disk,DISP=(,KEEP),
//             VOLUME=SER=111112,SPACE=(TRK,(10,5,5)),
//             DCB=(RECFM=FB,LRECL=80,BLKSIZE=2000)
//SYSIN    DD  *
     GENERATE  MAXNAME=3,MAXGPS=2
       MEMBER  NAME=MEMBER1
GROUP1 RECORD  IDENT=(8,'FIRSTMEM',1)
       MEMBER  NAME=MEMBER2
GROUP2 RECORD  IDENT=(8,'SECNDMEM',1)
       MEMBER  NAME=MEMBER3
/*

Les instructions de contrôle sont les suivantes :

  • SYSUT1 DD définit le jeu de données d’entrée (INSET).
    L’ensemble de données est le premier ensemble de données sur un volume de bande.
  • SYSUT2 DD définit le jeu de données partitionné en sortie (NEWSET).
    L’ensemble de données doit être placé sur un volume de disque.
    Dix pistes d’espace primaire, cinq pistes d’espace secondaire et cinq blocs (256 octets chacun) d’espace de répertoire sont alloués pour permettre une expansion future de l’ensemble de données.
    Les enregistrements de sortie sont bloqués pour réduire l’espace requis par l’ensemble de données.
  • SYSIN DD définit l’ensemble de données de contrôle, qui suit dans le flux d’entrée.
    Les instructions de contrôle d’utilitaire sont utilisées pour créer des membres à partir de données d’entrée séquentielles ; les déclarations ne spécifient aucune modification.
  • GENERATE indique que trois noms de membre sont inclus dans les instructions MEMBER suivantes et que le paramètre IDENT apparaît deux fois dans les instructions RECORD suivantes.
  • La première instruction MEMBER affecte un nom de membre (MEMBER1) au premier membre.
  • La première instruction RECORD (GROUP1) identifie le dernier enregistrement à placer dans le premier membre.
    Le nom de cet enregistrement (FIRSTMEM) apparaît dans les huit premières positions de l’enregistrement d’entrée.
  • Les instructions MEMBER et RECORD restantes définissent les deuxième et troisième membres.
    Notez que, comme il n’y a pas d’instruction RECORD associée à la troisième instruction MEMBER, le reste du fichier d’entrée sera chargé en tant que troisième membre.

Exemple 3 : Convertir une entrée séquentielle en membres partitionnés

Dans cet exemple, l’entrée séquentielle est convertie en deux membres partitionnés.
Les membres nouvellement créés sont fusionnés dans un ensemble de données partitionné existant.
Les étiquettes utilisateur sur l’ensemble de données d’entrée sont transmises à la routine d’exit utilisateur.

//DISKTODK JOB  ...
//STEP1    EXEC PGM=IEBGENER
//SYSPRINT DD  SYSOUT=A
//SYSUT1   DD  DSNAME=INSET,UNIT=disk,DISP=(OLD,KEEP),
//             VOLUME=SER=111112,LABEL=(,SUL)
//SYSUT2   DD  DSNAME=EXISTSET,UNIT=disk,DISP=(MOD,KEEP),
//             VOLUME=SER=111113
     GENERATE  MAXNAME=3,MAXGPS=1
        EXITS  INHDR=ROUT1,INTLR=ROUT2
       MEMBER  NAME=(MEMX,ALIASX)
GROUP1 RECORD  IDENT=(8,'FIRSTMEM',1)
       MEMBER  NAME=MEMY

Les instructions de contrôle sont les suivantes :

  • SYSUT1 DD définit le jeu de données d’entrée (INSET).
    L’ensemble de données d’entrée, qui réside sur un volume de disque, possède des étiquettes d’utilisateur standard.
  • SYSUT2 DD définit le jeu de données partitionné en sortie (EXISTSET).
    Les membres créés au cours de cette étape de travail sont fusionnés dans l’ensemble de données partitionné.
  • L’instruction SYSIN DD est omise.
    Comme la ligne GENERATE ne commence pas par //, le système suppose qu’elle est précédée d’une ligne //SYSIN DD *.
    SYSIN DD définit l’ensemble de données de contrôle, qui suit dans le flux d’entrée.
    Les instructions de contrôle d’utilitaire sont utilisées pour créer des membres à partir de données d’entrée séquentielles ; les déclarations ne spécifient aucune modification.
    Un /* à la fin de tout ensemble de données DD * est inutile car une instruction JCL ou la fin du flot de travaux marque la fin de l’ensemble de données du flux d’entrée.
  • GENERATE indique qu’un maximum de trois noms et alias sont inclus dans les instructions MEMBER suivantes et qu’un paramètre IDENT apparaît dans une instruction RECORD suivante.
  • EXITS définit les routines utilisateur qui doivent traiter les étiquettes utilisateur.
  • La première instruction MEMBER affecte un nom de membre (MEMX) et un alias (ALIASX) au premier membre.
  • L’instruction RECORD identifie le dernier enregistrement à placer dans le premier membre.
    Le nom de cet enregistrement (FIRSTMEM) apparaît dans les huit premières positions de l’enregistrement d’entrée.
  • La seconde instruction MEMBER affecte un nom de membre (MEMY) au second membre.
    Le reste de l’ensemble de données d’entrée est inclus dans ce membre.

Exemple 4 : Entrée In-Stream, données séquentielles définies sur le volume de bande

Dans cet exemple, un ensemble de données séquentielles d’entrée en flux est copié sur un volume de bande.

//CDTOTAPE JOB  ...
//STEP1    EXEC PGM=IEBGENER
//SYSPRINT DD  SYSOUT=A
//SYSIN    DD  DUMMY
//SYSUT2   DD  DSNAME=OUTSET,UNIT=tape,LABEL=(,SL),
//             DISP=(,KEEP),VOLUME=SER=001234,
//             DCB=(RECFM=FB,LRECL=80,BLKSIZE=2000)
//SYSUT1   DD  *
  (in-stream data)
/*

Les instructions de contrôle des tâches sont les suivantes :

  • SYSIN DD définit un jeu de données factice.
    Aucune modification n’est effectuée ; par conséquent, aucune instruction de contrôle d’utilitaire n’est nécessaire.
  • SYSUT2 DD définit le jeu de données de sortie, OUTSET.
    L’ensemble de données est écrit sur un volume de bande avec des étiquettes standard IBM.
    L’ensemble de données doit résider en tant que premier (ou unique) ensemble de données sur le volume.
  • SYSUT1 DD définit les données en flux qui sont en fait un ensemble de données JES SYSIN.
    L’ensemble de données ne contient aucune déclaration.

Exemple 5 : Produire une copie bloquée sur bande à partir d’un fichier disque non bloqué

Dans cet exemple, une copie bloquée sur bande est réalisée à partir d’un fichier disque séquentiel non bloqué.
Étant donné que l’ensemble de données de disque a une taille de bloc relativement petite, le nombre de tampons explicitement demandés est supérieur à la valeur par défaut de cinq.
Cela améliore les performances en permettant un plus grand chevauchement de la lecture de l’ensemble de données SYSUT1 avec l’écriture de l’ensemble de données SYSUT2.

//COPYJOB  JOB
//STEP1    EXEC PGM=IEBGENER,REGION=318K
//SYSPRINT DD  SYSOUT=A
//SYSIN    DD  DUMMY
//SYSUT1   DD  DSNAME=INPUT,UNIT=disk,
//             DISP=OLD,VOL=SER=X13380,
//             DCB=(BUFNO=20,RECFM=F,LRECL=2000,BLKSIZE=2000)
//SYSUT2   DD  DSNAME=OUTPUT,UNIT=tape,DISP=(NEW,KEEP),
//             DCB=(RECFM=FB,LRECL=2000,BLKSIZE=32000)

Les instructions de contrôle de job sont les suivantes :

  • L’instruction EXEC nomme le programme IEBGENER et spécifie la taille de la région de stockage virtuel requise.
    (Le calcul de la taille de la région est décrit dans le tableau 1.)
  • L’instruction SYSIN DD est factice, car aucune modification ne doit être effectuée.
  • L’instruction SYSUT1 DD identifie un fichier disque d’entrée.
    Normalement, les informations DCB RECFM, LRECL et BLKSIZE ne doivent pas être spécifiées dans l’instruction DD pour un fichier de disque existant car les informations existent dans l’étiquette d’ensemble de données dans le VTOC ; il est spécifié dans cet exemple pour illustrer le contraste avec l’ensemble de données de sortie.
    Les informations de série sur l’unité et le volume pourraient être omises si l’ensemble de données était catalogué.
    Les informations DCB spécifient BUFNO = 20 pour permettre la lecture de jusqu’à vingt blocs à chaque rotation du disque, en supposant que la piste du disque contiendra autant de blocs.
  • L’instruction SYSUT2 DD identifie le jeu de données de bande de sortie et spécifie une taille de bloc de 32 000 octets.
    La valeur par défaut de cinq tampons devrait être suffisante pour suivre le rythme de l’entrée.

Exemple 6 : Modification et copie d’un ensemble de données d’entrée séquentiel avec étiquettes

Dans cet exemple, un ensemble de données d’entrée séquentiel est modifié et copié.

//TAPETAPE JOB  ...
//STEP1    EXEC PGM=IEBGENER
//SYSPRINT DD  SYSOUT=A
//SYSUT1   DD  DSNAME=OLDSET,UNIT=tape,DISP=(OLD,KEEP),
//             VOLUME=SER=001234,LABEL=(3,SUL)
//SYSUT2   DD  DSNAME=NEWSET,UNIT=tape,DISP=(NEW,PASS),
//             DCB=(RECFM=FB,LRECL=80),
//             VOLUME=SER=001235,LABEL=(,SUL)
//SYSIN    DD  *
     GENERATE  MAXFLDS=3,MAXLITS=11
       RECORD  FIELD=(10,'**********',,1),
               FIELD=(5,1,HE,11),FIELD=(1,'=',,16)
        EXITS  INHDR=ROUT1,OUTTLR=ROUT2
       LABELS  DATA=INPUT
       RECORD  LABELS=2
 
  (premier enregistrement de label d'en-tête)
  (second enregistrement de label d'en-tête)
 
       RECORD   LABELS=2
 
  (premier enregistrement de label d'en-queue)
  (second enregistrement de label d'en-queue)

/*

Les instructions de contrôle sont les suivantes :

  • SYSUT1 DD définit le jeu de données d’entrée séquentiel (OLDSET).
    L’ensemble de données a été initialement écrit en tant que troisième ensemble de données sur un volume de bande.
  • SYSUT2 DD définit le jeu de données de sortie séquentiel (NEWSET).
    L’ensemble de données est écrit en tant que premier ensemble de données sur un volume de bande.
    Les enregistrements de sortie sont bloqués pour réduire l’espace requis par l’ensemble de données et pour réduire le temps d’accès requis lorsque l’ensemble de données est ensuite consulté.
    Le paramètre BLKSIZE est omis afin que le système calcule une valeur optimale inférieure ou égale à 32,760 octets à moins que le programmeur système ne définisse la valeur par défaut différemment.
    L’ensemble de données est transmis à une étape de tâche suivante. Le LABEL=(,SUL) est obligatoire en raison des libellés utilisateur créés.
  • SYSIN DD définit l’ensemble de données de contrôle, qui suit dans le flux d’entrée.
  • GENERATE indique qu’un maximum de trois paramètres FIELD est inclus dans les instructions RECORD suivantes et qu’un maximum de 11 caractères littéraux sont inclus dans les paramètres FIELD suivants.
  • La première instruction RECORD contrôle l’édition, comme suit : les astérisques sont placés aux positions 1 à 10 ; les positions 1 à 5 de l’enregistrement d’entrée sont converties du mode H-set BCDIC en mode EBCDIC et déplacées vers les positions 11 à 15 ; et un signe égal est placé en position 16.
  • EXITS indique que les routines utilisateur spécifiées nécessitent un contrôle lorsque SYSUT1 est ouvert et lorsque SYSUT2 est fermé.
  • LABELS indique que les étiquettes sont incluses dans le flux d’entrée.
  • La deuxième instruction RECORD indique que les deux enregistrements suivants de SYSIN doivent être écrits en tant qu’étiquettes d’en-tête utilisateur sur SYSUT2.
  • La troisième instruction RECORD indique que les deux enregistrements suivants de SYSIN doivent être écrits en tant qu’étiquettes de fin utilisateur sur SYSUT2.

Exemple 7 : Modification et copie d’un fichier séquentiel z/OS UNIX dans un ensemble de données séquentiel

Dans cet exemple, le fichier az/OS UNIX System Services (z/OS UNIX) est modifié et copié.
La longueur d’enregistrement logique de l’ensemble de données de sortie est inférieure à celle de l’ensemble de données d’entrée.

//DISKDISK JOB  ...
//STEP1    EXEC PGM=IEBGENER
//SYSPRINT DD SYSOUT=A
//SYSUT1 DD PATH='/dist3/stor44/sales.mon',FILEDATA=TEXT,PATHOPTS=ORDONLY,
//          LRECL=100,BLKSIZE=1000,RECFM=FB
//SYSUT2   DD DSNAME=NEWSET,UNIT=disk,DISP=(NEW,KEEP),
//            VOLUME=SER=111113,DCB=(RECFM=FB,LRECL=80,
//            BLKSIZE=640),SPACE=(TRK,(20,10))
//SYSIN    DD *
     GENERATE MAXFLDS=4,MAXGPS=1
        EXITS IOERROR=ERRORRT
GRP1 RECORD IDENT=(8,'FIRSTGRP',1),FIELD=(21,80,,60),FIELD=(59,1,,1)
GRP2 RECORD FIELD=(11,90,,70),FIELD=(69,1,,1)
/*

Les instructions de contrôle sont les suivantes :

  • SYSUT1 DD définit le fichier d’entrée.
    Son nom est /dist3/stor44/sales.mon.
    Il contient du texte dans des enregistrements de 100 octets.
    Le délimiteur d’enregistrement n’est pas indiqué ici.
    Le fichier peut se trouver sur un système non System/390 disponible via NFS (Network File System).
  • SYSUT2 DD définit le jeu de données de sortie (NEWSET).
    Vingt pistes d’espace de stockage primaire et dix pistes d’espace de stockage secondaire sont allouées pour l’ensemble de données sur un volume de disque.
    La longueur d’enregistrement logique des enregistrements de sortie est de 80 octets et la sortie est bloquée.
  • SYSIN DD définit l’ensemble de données de contrôle, qui suit dans le flux d’entrée.
  • GENERATE indique qu’un maximum de quatre paramètres FIELD sont inclus dans les instructions RECORD ultérieures et qu’un paramètre IDENT apparaît dans une instruction RECORD ultérieure.
  • EXITS identifie la routine utilisateur qui gère les erreurs d’entrée/sortie.
  • La première instruction RECORD (GRP1) contrôle l’édition du premier groupe d’enregistrements.
    FIRSTGRP, qui apparaît dans les huit premières positions d’un enregistrement d’entrée, est défini comme étant le dernier enregistrement du premier groupe d’enregistrements.
    Les données des positions 80 à 100 de chaque enregistrement d’entrée sont déplacées vers les positions 60 à 80 de chaque enregistrement de sortie correspondant.
    (Cet exemple implique que les données dans les positions 60 à 79 des enregistrements d’entrée dans le premier groupe d’enregistrements ne sont plus nécessaires ; ainsi, la longueur de l’enregistrement logique est raccourcie de 20 octets.)
    Les données dans les positions restantes dans chaque enregistrement d’entrée sont transféré directement vers les enregistrements de sortie, comme spécifié dans le deuxième paramètre FIELD.
  • La deuxième instruction RECORD (GRP2) indique que le reste des enregistrements d’entrée doit être traité comme le deuxième groupe d’enregistrements.
    Les données des positions 90 à 100 de chaque enregistrement d’entrée sont déplacées vers les positions 70 à 80 des enregistrements de sortie.
    (Cet exemple implique que les données des positions 70 à 89 des enregistrements d’entrée du groupe 2 ne sont plus nécessaires ; ainsi, la longueur de l’enregistrement logique est raccourcie de 20 octets.)
    Les données des positions restantes dans chaque enregistrement d’entrée sont transférées directement aux enregistrements de sortie, comme spécifié dans le deuxième paramètre FIELD.

Exemple 8 : Modifier les données d’un jeu de caractères à deux octets

Dans cet exemple, un jeu de données modifié contenant des données de jeu de caractères à deux octets est créé.
Les caractères Shift-out/shift-in (< et >) sont insérés pour entourer les chaînes DBCS.

Les instructions de contrôle sont les suivantes :

  • SYSUT1 DD définit l’ensemble de données d’entrée, INPUT, qui réside sur un volume de disque.
  • SYSUT2 DD définit l’ensemble de données de sortie, OUTPUT, qui résidera sur un volume de disque.
  • SYSIN DD définit l’ensemble de données de contrôle, qui suit dans le flux d’entrée.
  • GENERATE indique qu’un maximum de quatre paramètres FIELD et de neuf caractères littéraux apparaîtront dans les instructions RECORD suivantes et que l’ensemble de données d’entrée contient des données DBCS.
  • RECORD spécifie comment les enregistrements d’entrée seront modifiés avant d’être placés dans l’ensemble de données de sortie.
    Le premier paramètre FIELD indique que les 20 premières positions (octets) des enregistrements d’entrée doivent être placées dans les 20 premières positions des enregistrements de sortie.
  • Le deuxième paramètre FIELD indique que les données des positions 33 à 48 doivent être vérifiées pour s’assurer qu’elles sont des données DBCS valides et que les caractères de décalage sortant/d’entrée
    doivent être insérés autour de ce champ.
    Pour que les données DBCS soient valides, chaque octet des caractères à 2 octets doit avoir une valeur hexadécimale comprise entre X’41’ et X’FE’, ou le caractère à 2 octets doit être un espace DBCS (X’4040′).
    Une fois la vérification et l’insertion terminées, ce champ doit être copié dans les enregistrements de sortie à partir de la position 21.
  • Le troisième paramètre FIELD agit sur le champ de 30 octets commençant à la position 50 dans les enregistrements d’entrée.
    Ce champ est vérifié pour les données DBCS valides, et les caractères de décalage sortant/décalage sont insérés autour du champ.
    Le champ résultant est copié dans les enregistrements de sortie à partir de la position 39.

Notez qu’en spécifiant les emplacements de sortie dans le paramètre FIELD, vous devez tenir compte des positions supplémentaires que les caractères SO/SI utiliseront.
Par exemple, la chaîne DBCS de huit caractères (16 octets) commençant à la position 21 ne se termine pas à la position 36, mais à la 38.
Les caractères SO/SI sont des caractères à un octet, de sorte que la paire occupera deux positions.

Le paramètre FIELD final efface les positions finales des enregistrements de sortie avec des astérisques.

JCL – IEBEDIT

Ces exemples montrent certaines des utilisations d’IEBEDIT.
Vous pouvez utiliser le tableau 1 comme guide de référence rapide.

Tableau 1. Répertoire d’exemple IEBEDIT

OpérationPériphériqueCommentairesExemple
EDITBandeCopiez un job dans le jeu de données de sortie.Exemple 1 : copie d’un travail
EDITBandeCopie sélectivement les steps de job de chacun des trois jobs.Exemple 2 : copie d’étapes à partir de trois Jobs
EDITDisque et bandeInclut un step de job et exclut step de job d’un autre job.Exemple 3 : Inclure un step de job, exclure un step d’un autre
EDITDisqueCopiez l’instruction JOB pour JOBA, le step de job STEPF et tous les steps qui suivent.Exemple 4 : Copier l’instruction pour JOBA et JOB STEPF
EDITBandeCopie l’intégralité de l’ensemble de données d’entrée. L’enregistrement ..* est converti en une instruction /* dans l’ensemble de données de sortie.Exemple 5 : Copier l’intégralité de l’ensemble de données d’entrée
EDITBandeCopie l’intégralité de l’ensemble de données d’entrée, y compris les instructions de contrôle JES2.Exemple 6 : copier l’ensemble de données pour inclure un nouveau délimiteur

Les exemples qui utilisent un disque ou une bande à la place des numéros de périphérique réels doivent être modifiés avant utilisation.
Les numéros de périphérique réels dépendent de la manière dont votre installation a défini les périphériques sur votre système.

EXEMPLE

Exemple 1 : Copier un job

Dans cet exemple, un job (JOBA), y compris toutes ses steps, est copié dans l’ensemble de données de sortie.
L’ensemble de données d’entrée contient trois jobs : JOBA, JOBB et JOBC.

//EDIT1    JOB  ...
//STEP1    EXEC PGM=IEBEDIT
//SYSPRINT DD  SYSOUT=A
//SYSUT1   DD  DSNAME=INJOBS,UNIT=tape,
//             DISP=(OLD,KEEP),VOL=SER=001234
//SYSUT2   DD  DSNAME=OUTTAPE,UNIT=tape,DISP=(NEW,KEEP),
//             VOL=SER=001235,DCB=(RECFM=FB,LRECL=80,BLKSIZE=80),
//SYSIN    DD  *
         EDIT  START=JOBA
/*

Les instructions de contrôle sont les suivantes :

  • SYSUT1 DD définit le jeu de données d’entrée, INJOBS.
    L’ensemble de données réside sur un volume de bande étiqueté standard (001234).
  • SYSUT2 DD définit le jeu de données de sortie, appelé OUTTAPE.
    L’ensemble de données doit résider en tant que premier ensemble de données sur un volume de bande étiqueté standard (001235).
    Le système sélectionnera une taille de bloc optimale.
  • SYSIN DD définit l’ensemble de données de contrôle, qui suit dans le flux d’entrée.
  • EDIT indique que JOBA doit être copié dans son intégralité.

Exemple 2 : Copier les étapes de trois jobs

Cet exemple copie les step de job de chacun des trois jobs.
L’ensemble de données d’entrée contient trois jobs : JOBA, qui comprend STEPA, STEPB, STEPC et STEPD ; JOBB, qui comprend STEPE, STEPF et STEPG ; et JOBC, qui comprend STEPH et STEPJ.

//EDIT2    JOB  ...
//STEP1    EXEC PGM=IEBEDIT
//SYSPRINT DD  SYSOUT=A
//SYSUT1   DD  DSN=INJOBS,DISP=(OLD,KEEP),VOLUME=SER=001234,
//             UNIT=tape
//SYSUT2   DD  DSN=OUTSTRM,UNIT=tape,DISP=(NEW,KEEP),
//             DCB=(RECFM=F,LRECL=80,BLKSIZE=80),LABEL=(2,SL)
//SYSIN    DD  *
       EDIT   START=JOBA,TYPE=INCLUDE,STEPNAME=(STEPC,STEPD)
       EDIT   START=JOBB,TYPE=INCLUDE,STEPNAME=STEPE
       EDIT   START=JOBC,TYPE=INCLUDE,STEPNAME=STEPJ
/*

Les instructions de contrôle sont les suivantes :

  • SYSUT1 DD définit le jeu de données d’entrée, INJOBS.
    L’ensemble de données réside sur un volume de bande étiqueté standard (001234).
  • SYSUT2 DD définit le jeu de données de sortie, OUTSTRM.
    L’ensemble de données doit résider en tant que deuxième ensemble de données sur un volume de bande étiqueté standard (001235).
    La taille de bloc courte est très inefficace.
  • SYSIN DD définit l’ensemble de données de contrôle, qui suit dans le flux d’entrée.
  • Les instructions EDIT copient les instructions JOB et les étapes de travail décrites comme suit :
    1. L’instruction JOB et les étapes STEPC et STEPD pour JOBA.
    2. L’instruction JOB et STEPE pour JOBB.
    3. L’instruction JOB et STEPJ pour JOBC.

Exemple 3 : inclure le step d’un job, exclure le step d’un autre

Cet exemple inclut une étape de travail d’un travail et exclut une étape de travail d’un autre travail.
L’ensemble de données d’entrée contient trois travaux : JOBA, qui comprend STEPA, STEPB, STEPC et STEPD ; JOBB, qui comprend STEPE, STEPF et STEPG ; et JOBC, qui comprend STEPH et STEPJ.

//EDIT3    JOB  ...
//STEP1    EXEC PGM=IEBEDIT
//SYSPRINT DD  SYSOUT=A
//SYSUT1   DD  DSNAME=INSET,UNIT=disk,DISP=(OLD,KEEP),
//             VOLUME=SER=111111
//SYSUT2   DD  DSNAME=OUTTAPE,UNIT=tape,LABEL=(,NL),
//             DCB=(DEN=2,RECFM=FB,LRECL=80,BLKSIZE=8160),
//             DISP=(,KEEP)
//SYSIN    DD  *
       EDIT    START=JOBB,TYPE=INCLUDE,STEPNAME=(STEPF-STEPG)
       EDIT    START=JOBC,TYPE=EXCLUDE,STEPNAME=STEPJ
/*

Les instructions de contrôle sont les suivantes :

  • SYSUT1 DD définit le jeu de données d’entrée, INSET. L’ensemble de données réside sur un volume de disque (111111).
  • SYSUT2 DD définit le jeu de données de sortie, OUTTAPE.
    L’ensemble de données doit résider en tant que premier ou unique ensemble de données sur un volume de bande sans étiquette (800 bits par pouce).
  • SYSIN DD définit l’ensemble de données de contrôle, qui suit dans le flux d’entrée.
  • Les instructions EDIT copient les instructions JOB et les étapes de travail comme suit :
    1. L’instruction JOB et les step STEPF et STEPG pour JOBB.
    2. L’instruction JOB et STEPH, à l’exception de STEPJ, pour JOBC.

Exemple 4 : Copier l’instruction pour JOBA et JOB STEPF

Cet exemple copie l’instruction JOB pour JOBA, le step de job STEPF et tous les steps qui la suivent.
L’ensemble de données d’entrée contient un job (JOBA), qui inclut STEPA à STEPL.
Les steps de job STEPA à STEPE ne sont pas incluses dans le jeu de données de sortie.

//EDIT4    JOB  ...
//STEP1    EXEC PGM=IEBEDIT
//SYSPRINT DD  SYSOUT=A
//SYSUT1   DD  DSNAME=INSTREAM,UNIT=disk,
//             DISP=(OLD,KEEP),VOLUME=SER=111111
//SYSUT2   DD  DSNAME=OUTSTREM,UNIT=disk,
//             DISP=(,KEEP),VOLUME=SER=222222,SPACE=(TRK,2)
//             DCB=(RECFM=FB,LRECL=80,BLKSIZE=24000),
//SYSIN    DD  *
         EDIT  START=JOBA,TYPE=POSITION,STEPNAME=STEPF
/*

Les instructions de contrôle sont les suivantes :

  • SYSUT1 DD définit le jeu de données d’entrée, INSTREAM.
    L’ensemble de données réside sur un volume de disque (111111).
  • SYSUT2 DD définit le jeu de données de sortie, OUTSTREAM.
    L’ensemble de données doit résider sur un volume de disque (222222).
    Deux pistes sont affectées au jeu de données de sortie.
  • SYSIN DD définit l’ensemble de données de contrôle, qui suit dans le flux d’entrée.
  • EDIT copie l’instruction JOB pour JOBA et les étapes de travail STEPF à STEPL.

Exemple 5 : Copier l’intégralité de l’ensemble de données d’entrée

Cet exemple copie l’intégralité du jeu de données d’entrée.
L’enregistrement contenant les caractères ..* dans les colonnes 1 à 3 est converti en une instruction /* dans le jeu de données de sortie.

//EDIT5    JOB  ...
//STEP1    EXEC PGM=IEBEDIT
//SYSPRINT DD  SYSOUT=A
//SYSUT2   DD  DSNAME=OUTTAPE,UNIT=tape,
//             VOLUME=SER=001234,DISP=(NEW,KEEP),
//             DCB=(RECFM=F,LRECL=80,BLKSIZE=80)
//SYSIN    DD  DUMMY
//SYSUT1   DD  DATA
//BLDGDGIX JOB ...
//         EXEC PGM=IEHPROGM
//SYSPRINT DD  SYSOUT=A
//DD1      DD  UNIT=disk,VOLUME=SER=111111,DISP=OLD
//SYSIN    DD  *
         BLDG   SCRATCH VTOC,VOL=3390=111111
..*
/*

Les instructions de contrôle sont les suivantes :

  • SYSUT2 DD définit le jeu de données de sortie, OUTTAPE.
    L’ensemble de données sera le premier ensemble de données sur un volume de bande (001234).
  • SYSIN DD définit un jeu de données de contrôle factice.
  • SYSUT1 DD définit le jeu de données d’entrée, qui suit dans le flux d’entrée.
    Le travail est arrêté lorsque l’instruction /* est rencontrée.
    (SYSUT1 inclut donc l’instruction DELETE JOB, l’instruction EXEC, les instructions SYSPRINT, DD1 et SYSIN DD.)

Exemple 6 : Copier l’intégralité de l’ensemble de données pour inclure un nouveau délimiteur

Cet exemple copie l’intégralité du jeu de données d’entrée, y compris l’instruction de contrôle JES2, car un nouveau délimiteur (JP) a été codé.
Sinon, le /* dans l’instruction de contrôle JES2 aurait arrêté l’entrée.

//EDIT6    JOB  ...
//STEP1    EXEC PGM=IEBEDIT
//SYSPRINT DD  SYSOUT=A
//SYSUT2   DD  DSN=TAPEOUT,UNIT=tape,
//             VOL=SER=001234,LABEL=(,SL),DISP=(NEW,KEEP)
//             DCB=(RECFM=FB,LRECL=80,BLKSIZE=800),
//SYSIN    DD  DUMMY
//SYSUT1   DD  DATA,DLM=JP
//LISTVTOC JOB ...
/*MESSAGE  JOB NEEDS VOLUME 338000
//FSTEP    EXEC PGM=IEHLIST
//SYSPRINT DD  SYSOUT=A
//DD2      DD  UNIT=disk,VOL=SER=338000,DISP=OLD
//SYSIN    DD  *
    LISTVTOC FORMAT,VOL=disk=338000
/*

Les instructions de contrôle sont les suivantes :

  • SYSUT2 DD définit le jeu de données de sortie, TAPEOUT.
    L’ensemble de données sera le premier ensemble de données sur un volume de bande d’étiquettes standard (001234).
  • SYSIN DD définit un jeu de données de contrôle factice.
  • SYSUT1 DD définit le jeu de données d’entrée, qui suit dans le flux d’entrée.
    Le paramètre DLM définit les caractères JP pour agir comme un délimiteur pour les données d’entrée.
  • IEBEDIT copie l’instruction JOB via l’instruction /* (y compris les instructions de travail LISTVTOC et MESSAGE, l’instruction FSTEP EXEC et les instructions SYSPRINT, DD2 et SYSIN DD).

JCL – IEBDG

Ces exemples illustrent certaines des utilisations d’IEBDG.
Vous pouvez utiliser le tableau 1 comme guide de référence rapide pour les exemples IEBDG.

Tableau 1. Répertoire d’exemples IEBDG

OpérationOrganisation de l’ensemble de
données
DispositifCommentairesExemple
Placez des zéros binaires dans les champs sélectionnés.SéquentielRubanEntrée et sortie bloquées.Exemple 1 : Placer des zéros binaires dans des enregistrements copiés à partir d’un ensemble de données
séquentiel
Motif alphabétique onduléSéquentielBande, disqueEntrée et sortie bloquées.Exemple 2 : modèle alphabétique d’ondulation de 10 octets
Créer des enregistrements de sortie à partir d’instructions de contrôle d’utilitaireSéquentielDisqueSortie bloquée.Exemple 3 : créer des enregistrements de sortie à partir des instructions de contrôle des services
publics
Modifier les enregistrements des membres partitionnés et du flux d’entréePartitionné, SéquentielDisqueLe reblocage est effectué. Chaque bloc d’enregistrements de sortie contient dix enregistrements d’entrée partitionnés modifiés et deux enregistrements de flux d’entrée.Exemple 4 : Utiliser les membres et les enregistrements d’entrée comme base du membre de sortie
Créer des membres partitionnés à partir d’instructions de contrôle d’utilitairePartitionnéDisqueSortie bloquée. Un ensemble d’instructions de contrôle d’utilité par membre.Exemple 5 : Créer des enregistrements dans trois ensembles de données de sortie et les écrire dans trois membres
d’ensembles de données partitionnés
Modèles fournis par l’utilisateur pour rouler et ondulerSéquentielDisqueLes enregistrements de sortie sont créés à partir des instructions de contrôle de l’utilitaire.Exemple 6 : Créer des enregistrements avec vos propres modèles

Les exemples qui utilisent un disque ou une bande à la place des numéros de périphérique réels doivent être modifiés avant utilisation.
Les numéros de périphérique réels dépendent de la manière dont votre installation définit les périphériques sur votre système.

EXEMPLE

Exemple 1 : Placer des zéros binaires dans des enregistrements copiés à partir d’un jeu de données séquentiel

Dans cet exemple, des zéros binaires sont placés dans deux champs de 100 enregistrements copiés à partir d’un ensemble de données séquentiel.
Après l’opération, chaque enregistrement de l’ensemble de données copié (OUTSET) contient des zéros binaires aux emplacements 20 à 29 et 50 à 59.

  //CLEAROUT JOB  ...
  //STEP1    EXEC PGM=IEBDG
  //SYSPRINT DD  SYSOUT=A
  //SEQIN    DD  DSNAME=INSET,UNIT=tape,DISP=(OLD,KEEP),
  //             DCB=(RECFM=FB,LRECL=80,BLKSIZE=800),
  //             LABEL=(,NL),VOLUME=SER=222222
  //SEQOUT   DD  DSNAME=OUTSET,UNIT=tape,DISP=(,KEEP),
  //             DCB=(RECFM=FB,LRECL=80,BLKSIZE=800),
  //             VOLUME=SER=222333,LABEL=(,NL)
  //SYSIN    DD  *
         DSD     OUTPUT=(SEQOUT),INPUT=(SEQIN)
         FD      NAME=FIELD1,LENGTH=10,STARTLOC=20
         FD      NAME=FIELD2,LENGTH=10,STARTLOC=50
         CREATE  QUANTITY=100,INPUT=SEQIN,NAME=(FIELD1,FIELD2)
         END
/*

Les instructions de contrôle sont les suivantes :

  • SEQIN DD définit un ensemble de données d’entrée séquentiel (INSET).
    L’ensemble de données a été écrit à l’origine sur un volume de bande sans étiquette.
  • SEQOUT DD définit le jeu de données de test (OUTSET).
    Les enregistrements de sortie sont identiques aux enregistrements d’entrée, à l’exception des emplacements 20 à 29 et 50 à 59, qui contiennent des zéros binaires à la fin de l’opération.
  • SYSIN DD définit l’ensemble de données de contrôle, qui suit dans le flux d’entrée.
  • DSD marque le début d’un ensemble d’instructions de contrôle d’utilitaire et fait référence aux instructions DD définissant les ensembles de données d’entrée et de sortie.
  • Les première et deuxième instructions FD créent deux champs de 10 octets (FIELD1 et FIELD2).
    Étant donné qu’aucun modèle n’est spécifié pour ces champs, chaque champ contient le remplissage par défaut de zéros binaires.
    Les champs doivent commencer aux 20e et 50e octets de chaque enregistrement de sortie.
  • CREATE construit 100 enregistrements de sortie dans lesquels le contenu des champs précédemment définis (FIELD1, FIELD2) est placé à leurs emplacements de départ respectifs dans chacun des enregistrements de sortie.
    Les enregistrements d’entrée de l’ensemble de données INSET sont utilisés comme base des enregistrements de sortie.
  • END signale la fin d’un ensemble d’instructions de contrôle d’utilitaire.

Exemple 2 : Modèle alphabétique d’ondulation (ripple) sur 10 octets

//RIPPLE   JOB  ...
//STEP1    EXEC PGM=IEBDG
//SYSPRINT DD  SYSOUT=A
//SEQIN    DD  DSNAME=INSET,UNIT=tape,VOL=SER=222222,
//             DCB=(RECFM=FB,LRECL=80,BLKSIZE=800),DISP=(OLD,KEEP)
//SEQOUT   DD  DSNAME=OUTSET,UNIT=disk,VOLUME=SER=111111,
//             DCB=(RECFM=FB,LRECL=80,BLKSIZE=800),
//             DISP=(,KEEP),SPACE=(TRK,(10,10))
//SYSIN    DD  *
     DSD     OUTPUT=(SEQOUT),INPUT=(SEQIN)
     FD      NAME=FIELD1,LENGTH=10,FORMAT=AL,ACTION=RP,STARTLOC=1
     CREATE  QUANTITY=100,INPUT=SEQIN,NAME=FIELD1
     END
/*

Les instructions de contrôle sont les suivantes :

  • SEQIN DD définit un ensemble de données séquentielles d’entrée (INSET).
    L’ensemble de données a été écrit à l’origine sur un volume de bande étiqueté standard.
  • SEQOUT DD définit le jeu de données de sortie de test (OUTSET).
    Dix pistes d’espace primaire et dix pistes d’espace secondaire sont allouées pour l’ensemble de données séquentielles sur un volume de disque.
  • SYSIN DD définit l’ensemble de données de contrôle, qui suit dans le flux d’entrée.
  • DSD marque le début d’un ensemble d’instructions de contrôle d’utilitaire et fait référence aux instructions DD définissant les ensembles de données d’entrée et de sortie.
  • L’instruction FD crée un champ de 10 octets dans lequel le modèle ABCDEFGHIJ est initialement placé.
    Les données sont ondulées après l’écriture de chaque enregistrement de sortie.
  • CREATE construit 100 enregistrements de sortie dans lesquels le contenu d’un champ préalablement défini (FIELD1) est inclus.
    L’instruction CREATE utilise les enregistrements d’entrée de l’ensemble de données INSET comme base des enregistrements de sortie.
  • END signale la fin d’un ensemble d’instructions de contrôle d’utilitaire.

Exemple 3 : Création d’enregistrements de sortie à partir d’instructions de contrôle d’utilitaire

Dans cet exemple, les enregistrements de sortie sont entièrement créés à partir d’instructions de contrôle d’utilitaire.
Trois champs sont créés et utilisés dans la construction des enregistrements de sortie.
Dans deux des champs, les données alphabétiques sont tronquées ; l’autre champ est un champ numérique qui est incrémenté (indexé) de un après l’écriture de chaque enregistrement de sortie.

La figure 1 montre le contenu des enregistrements de sortie à la fin du step du job.

Figure 1 : Contenue des enregistrements en sortie du step
                                                                       72
//UTLYONLY JOB  ...
//STEP1    EXEC PGM=IEBDG
//SYSPRINT DD  SYSOUT=A
//SEQOUT   DD  DSNAME=OUTSET,UNIT=disk,DISP=(,KEEP),
//             DCB=(RECFM=FB,LRECL=80,BLKSIZE=800),
//             SPACE=(TRK,(10,10)),VOLUME=SER=111111
//SYSIN    DD  DATA
   DSD OUTPUT=(SEQOUT)
   FD  NAME=CHAMP1,LENGTH=30,STARTLOC=1,FORMAT=AL,ACTION=TL
   FD  NAME=CHAMP2,LENGTH=30,STARTLOC=31,FORMAT=AL,ACTION=TR
   FD  NAME=CHAMP3,LENGTH=10,STARTLOC=71,PICTURE=10,                   X
               P'1234567890',INDEX=1
   CREATE QUANTITY=100,NAME=(FIELD1,FIELD2,FIELD3),FILL=X'FF'
   END
/*

Les instructions de contrôle sont les suivantes :

  • SEQOUT DD définit l’ensemble de données de sortie de test.
    Dix pistes d’espace primaire et dix pistes d’espace secondaire sont allouées pour l’ensemble de données séquentielles sur un volume de disque.
  • SYSIN DD définit l’ensemble de données de contrôle, qui suit dans le flux d’entrée.
  • DSD marque le début d’un ensemble d’instructions de contrôle d’utilitaire et fait référence à l’instruction DD définissant l’ensemble de données de sortie.
  • FD définit le contenu de trois champs à utiliser dans la construction des enregistrements de sortie.
    Le premier champ contient 30 octets de données alphabétiques à tronquer à gauche après l’écriture de chaque enregistrement de sortie.
    Le deuxième champ contient 30 octets de données alphabétiques à tronquer juste après l’écriture de chaque enregistrement de sortie.
    Le troisième champ est un champ de 10 octets contenant un nombre décimal condensé (1234567890) à augmenter de un après l’écriture de chaque enregistrement.
  • CREATE construit 100 enregistrements de sortie dans lesquels le contenu des champs précédemment définis (CHAMP1, CHAMP2 et CHAMP3) est inclus.
    Notez qu’après l’écriture de chaque enregistrement, CHAMP1et CHAMP2 sont restaurés en pleine largeur.
  • END signale la fin d’un ensemble d’instructions de contrôle d’utilitaire.

Exemple 4 : Utiliser les membres et les enregistrements d’entrée comme base du membre de sortie

Dans cet exemple, deux membres partitionnés et des enregistrements d’entrée du flux d’entrée sont utilisés comme base d’un membre de sortie partitionné.
Chaque bloc de 12 enregistrements de sortie contient 10 enregistrements modifiés d’un membre partitionné d’entrée et deux enregistrements du flux d’entrée.
La figure 2 montre le contenu du membre partitionné de sortie à la fin du step.

Figure 2. Membre partitionné en sortie à l’achèvement du step
//MIX      JOB  ...
//STEP1    EXEC PGM=IEBDG
//SYSPRINT DD  SYSOUT=A
//PARIN1   DD  DSNAME=INSET1(MEMBA),UNIT=disk,DISP=OLD,
//             DCB=(RECFM=FB,LRECL=80,BLKSIZE=800,DSORG=PS),
//             VOLUME=SER=111111
//PARIN2   DD  DSNAME=INSET2(MEMBA),UNIT=disk,DISP=OLD,
//             DCB=(RECFM=FB,LRECL=80,BLKSIZE=960,DSORG=PS),
//             VOLUME=SER=222222
//PAROUT   DD  DSNAME=PARSET(MEMBA),UNIT=disk,DISP=(,KEEP),
//             VOLUME=SER=333333,SPACE=(TRK,(10,10,5)),
//             DCB=(RECFM=FB,LRECL=80,BLKSIZE=960,DSORG=PO)
//SYSIN    DD  DATA
   DSD     OUTPUT=(PAROUT),INPUT=(PARIN1,PARIN2)
   FD      NAME=CHAMP1,LENGTH=13,PICTURE=13,BATIMENT  003'
   REPEAT  QUANTITY=10,CREATE=2
   CREATE  QUANTITY=10,INPUT=PARIN1,NAME=CHAMP1
   CREATE  QUANTITY=2,INPUT=SYSIN
 
  (enregistrements d'entrée 1 à 20)
 
$$$E
   REPEAT  QUANTITY=10,CREATE=2
   CREATE  QUANTITY=10,INPUT=PARIN2,NAME=CHAMP1
   CREATE  QUANTITY=2,INPUT=SYSIN
 
  (enregistrements d'entrée 21 à 40)
 
$$$E
   END
/*

Les instructions de contrôle sont les suivantes :

  • PARIN1 DD définit l’un des membres partitionnés en entrée.
  • PARIN 2 DD définit le second des membres partitionnés en entrée.
    (Notez que les membres proviennent de différents ensembles de données partitionnés.)
  • PAROUT DD définit le membre partitionné de sortie.
    Cet exemple suppose que l’ensemble de données partitionné n’existe pas avant le step ;
    c’est-à-dire que cette instruction DD alloue de l’espace pour l’ensemble de données partitionnées.
  • SYSIN DD définit l’ensemble de données de contrôle, qui suit dans le flux d’entrée.
  • DSD marque le début d’un ensemble d’instructions de contrôle d’utilitaire et fait référence aux instructions DD définissant les ensembles de données d’entrée et de sortie.
  • FD crée un champ de 13 octets dans lequel l’image BATIMENT 003 est placée.
  • La première instruction REPEAT indique que le groupe suivant de deux instructions CREATE doit être répété 10 fois.
  • La première instruction CREATE crée 10 enregistrements de sortie.
    Chaque enregistrement de sortie est construit à partir d’un enregistrement d’entrée (de l’ensemble de données partitionné INSET1) et du CHAMP1 précédemment défini.
  • La deuxième instruction CREATE indique que deux enregistrements doivent être construits à partir des enregistrements d’entrée inclus ensuite dans le flux d’entrée.
  • L’enregistrement $$$E sépare les enregistrements d’entrée de l’instruction REPEAT.
    Le groupe d’instructions REPEAT suivant est identique au groupe précédent, sauf que les enregistrements d’un membre partitionné différent sont utilisés comme entrée.
  • END signale la fin d’un ensemble d’instructions de contrôle d’utilitaire.

Exemple 5 : Créer des enregistrements dans trois ensembles de données de sortie et les écrire dans trois membres d’ensembles de données partitionnés

Restriction : Cet exemple ne fonctionnera pas si les ensembles de données sont des ensembles de données gérés par le système ou SMS.

Dans cet exemple, les enregistrements de sortie sont créés à partir de trois ensembles d’instructions de contrôle d’utilitaire et écrits dans trois membres dans un ensemble de données partitionnées.
Quatre champs sont créés et utilisés dans la construction des enregistrements de sortie.
Dans deux des champs (CHAMP1 et CHAMP3), les données alphabétiques sont décalées.
CHAMP2 est décimal zoné fixe et CHAMP4 est alphanumérique fixe.

La figure 3 montre les membres de l’ensemble de données partitionnées à la fin du step du job.

Figure 3. Membres de l’ensemble de données partitionnées à l’achèvement du step
//UTSTS    JOB  ...
//STEP1    EXEC PGM=IEBDG
//SYSPRINT DD  SYSOUT=A
//PAROUT1  DD  DSNAME=PARSET(MEMBA),UNIT=disk,DISP=(,KEEP),
//             VOLUME=SER=111111,SPACE=(TRK,(10,10,5)),
//             DCB=(RECFM=FB,LRECL=80,BLKSIZE=800)
//PAROUT2  DD  DSNAME=PARSET(MEMBB),UNIT=AFF=PAROUT1,
//             DCB=(RECFM=FB,LRECL=80,BLKSIZE=800)
//             DISP=OLD,VOLUME=SER=111111
//PAROUT3  DD  DSNAME=PARSET(MEMBC),UNIT=AFF=PAROUT1,
//             DCB=(RECFM=FB,LRECL=80,BLKSIZE=800)
//             DISP=OLD,VOLUME=SER=111111
//SYSIN    DD  DATA
       DSD     OUTPUT=(PAROUT1)
       FD      NAME=CHAMP1,LENGTH=30,FORMAT=AL,ACTION=SL
       FD      NAME=CHAMP2,LENGTH=20,FORMAT=ZD
       FD      NAME=FIELD3,LENGTH=20,FORMAT=AL,ACTION=SR
       FD      NAME=CHAMP4,LENGTH=30,FORMAT=AN
       CREATE  QUANTITY=4,NAME=(CHAMP1,CHAMP3,CHAMP2)
       END
       DSD     OUTPUT=(PAROUT2)
       CREATE  QUANTITY=4,NAME=(CHAMP2,(COPY=3,CHAMP3))
       END
       DSD     OUTPUT=(PAROUT3)
       CREATE  QUANTITY=4,NAME=(CHAMP4,CHAMP1)
       END
/*

Les instructions de contrôle sont les suivantes :

  • PAROUT1 DD définit le premier membre (MEMBA) de l’ensemble de données de sortie partitionnées.
    Cet exemple suppose que l’ensemble de données partitionnées n’existe pas avant cette étape de travail ;
    c’est-à-dire que cette instruction DD alloue de l’espace pour l’ensemble de données.
  • PAROUT2 et PAROUT3 DD définissent respectivement les deuxième et troisième membres de l’ensemble de données partitionné en sortie.
    Notez que chaque instruction DD spécifie DISP=OLD et UNIT=AFF=PAROUT1.
  • SYSIN DD définit l’ensemble de données de contrôle qui suit dans le flux d’entrée.
  • DSD marque le début d’un ensemble d’instructions de contrôle d’utilitaire et fait référence à l’instruction DD définissant le membre applicable à cet ensemble d’instructions de contrôle d’utilitaire.
  • FD définit le contenu d’un champ qui est utilisé dans la construction ultérieure des enregistrements de sortie.
  • CREATE construit quatre enregistrements à partir de combinaisons de champs précédemment définis.
  • END signale la fin d’un ensemble d’instructions de contrôle d’utilitaire.

Exemple 6 : Création d’enregistrements avec vos propres modèles

Dans cet exemple, 10 champs contenant des modèles de caractères fournis par l’utilisateur sont utilisés dans la construction des enregistrements de sortie.
Une fois qu’un enregistrement est écrit, chaque champ est roulé ou agité, comme spécifié dans l’instruction FD applicable.

La figure 4 montre le contenu des enregistrements de sortie à la fin du step.

Figure 4.
 Contenu des enregistrements de sortie à l’achèvement du step
//ROLLWAVE JOB  ...
//STEP1    EXEC PGM=IEBDG
//SYSPRINT DD  SYSOUT=A
//OUTSET   DD  DSNAME=SEQSET,UNIT=disk,DISP=(,KEEP),
//             VOLUME=SER=SAMP,SPACE=(TRK,(10,10)),
//             DCB=(RECFM=FB,LRECL=80,BLKSIZE=800)
//SYSIN    DD  *
  DSD    OUTPUT=(OUTSET)
  FD     NAME=CHAMP1,LENGTH=8,PICTURE=8,'   AAAAA',ACTION=RO
  FD     NAME=CHAMP2,LENGTH=8,PICTURE=8,'BBBBB   ',ACTION=RO
  FD     NAME=CHAMP3,LENGTH=8,PICTURE=8,'A   AA  ',ACTION=RO
  FD     NAME=CHAMP4,LENGTH=8,PICTURE=8,' BB    B',ACTION=RO
  FD     NAME=CHAMP5,LENGTH=8,PICTURE=8,'   AAA  ',ACTION=RO
  FD     NAME=CHAMP6,LENGTH=8,PICTURE=8,'   CCCCC',ACTION=WV
  FD     NAME=CHAMP7,LENGTH=8,PICTURE=8,'  DDDD  ',ACTION=WV
  FD     NAME=CHAMP8,LENGTH=8,PICTURE=8,'  C  CC ',ACTION=WV
  FD     NAME=CHAMP9,LENGTH=8,PICTURE=8,'  DD   D',ACTION=WV
  FD     NAME=CHAMP10,LENGTH=8,PICTURE=8,'  CCC   ',ACTION=WV
  CREATE QUANTITY=300,NAME=(CHAMP1,CHAMP2,CHAMP3,                       X
            CHAMP4,CHAMP5,CHAMP6,CHAMP7,CHAMP8,CHAMP9,CHAMP10)
  END
/*

Les instructions de contrôle sont les suivantes :

  • PAROUT1 DD définit le premier membre (MEMBA) de l’ensemble de données de sortie partitionnées.
    Cet exemple suppose que l’ensemble de données partitionnées n’existe pas avant ce step ;
    c’est-à-dire que cette instruction DD alloue de l’espace pour l’ensemble de données.
  • PAROUT2 et PAROUT3 DD définissent respectivement les deuxième et troisième membres de l’ensemble de données partitionné en sortie.
    Notez que chaque instruction DD spécifie DISP=OLD et UNIT=AFF=PAROUT1.
  • SYSIN DD définit l’ensemble de données de contrôle qui suit dans le flux d’entrée.
  • DSD marque le début d’un ensemble d’instructions de contrôle d’utilitaire et fait référence à l’instruction DD définissant le membre applicable à cet ensemble d’instructions de contrôle d’utilitaire.
  • FD définit le contenu d’un champ qui est utilisé dans la construction ultérieure des enregistrements de sortie.
  • CREATE construit quatre enregistrements à partir de combinaisons de champs précédemment définis.
  • END signale la fin d’un ensemble d’instructions de contrôle d’utilitaire.

JCL – IEBCOPY

Les exemples suivants illustrent certaines des utilisations d’IEBCOPY.
Le tableau 1 peut être utilisé comme guide de référence rapide pour les exemples IEBCOPY.
Les nombres dans la colonne Exemple font référence aux exemples qui suivent.

Tableau 1. Répertoire d’exemple IEBCOPY

OpérationPériphériqueCommentairesExemple
COPYDisqueCopiez un jeu de données complet d’un volume de disque à un autre.Exemple 1 : copier un jeu de données entier
COPYDisqueCopie trois jeux de données d’entrée dans un jeu de données de sortie existant.Exemple 2 : fusionner quatre ensembles de données
COPYDisqueSélectionne des membres dans deux jeux de données d’entrée et les copie dans un jeu de données de sortie existant.
Un membre remplace un membre portant le même nom qui existe déjà dans le jeu de données de sortie.
Exemple 3 : Copier et remplacer les membres sélectionnés d’un ensemble de données
UNLOAD et compresser sur placeDisque et bandeDécharge un jeu de données partitionné sur un volume de bande pour créer une copie de sauvegarde compressée.Exemple 4 : décharger et compresser un ensemble de données
COPY et compresser sur placeDisqueCopie deux jeux de données d’entrée dans un jeu de données de sortie existant, qui est compressé sur place.
Copie et remplace tous les membres d’un jeu de données.
Les membres de l’ensemble de données en sortie portent le même nom que ceux remplacés.
Exemple 5 : fusionner des ensembles de données et compresser l’ensemble de données fusionné
COPYDisquesSélectionne, supprime et copie des membres des jeux de données d’entrée vers un jeu de données de sortie.
Illustre diverses opérations de copie.
Exemple 6 : Opérations de copie multiples avec un jeu de données de sortie
COPYDisquesSélectionne, supprime et copie des membres des jeux de données d’entrée vers différents jeux de données de sortie.
Illustre diverses opérations de copie.
Exemple 7 : Opérations de copie multiples avec différents ensembles de données de sortie
LOADBande et disqueCharge un jeu de données séquentiel sur le disque.Exemple 8 : Chargement d’un ensemble de données
UNLOAD , LOAD et COPYDisque et bandeSupprimer, décharger, charger et copier les membres sélectionnés.Exemple 9 : Décharger les membres sélectionnés, charger, copier et fusionner
Modifier sur placeDisqueLes membres sélectionnés sont modifiés sur place.Exemple 10 : Modifier les modules de charge en place
COPY et REBLOCKDisque (3380)



Disque (3380)
Copie une bibliothèque de chargement sur des appareils avec différentes tailles de bloc optimales.
La nouvelle liaison doit avoir lieu avant que le membre puisse être ajouté à la bibliothèque de chargement.
Exemple 11 : Remplacement d’un module de chargement à l’aide de COPYMOD
COPY et REBLOCKDisque (3380)Les copies chargent la bibliothèque sur des appareils avec différentes tailles de bloc.
Reverrouille la bibliothèque à une taille compatible avec chaque périphérique sur lequel la bibliothèque sera copiée, puis copie sur ces périphériques.
Exemple 12 : Rebloquer la bibliothèque de chargement et la distribuer à différents types d’appareils
Convertir en PDSEDisqueConvertit un jeu de données partitionné en PDSE.Exemple 13 : Convertir un ensemble de données partitionné en PDSE
COPYDisqueCopiez un PDSE dans un PDSE.Exemple 14 : Copier des groupes d’un PDSE vers un PDSE
COPYDisquesCopiez un PDSE entier dans un PDSE avec l’option de remplacement (R).Exemple 15 : Copier des groupes d’un PDSE vers un PDSE avec REPLACE
COPYDisquesCopiez un groupe sélectionné en spécifiant un alias.Exemple 16 : Copier un groupe sélectionné d’un PDSE vers un PDSE
COPYGROUPDisquesCopiez un groupe sélectionné de membres PDS et leurs alias vers un autre PDS.Exemple 17 : Copier les membres sélectionnés et leurs alias d’un PDS vers un PDS
COPYGROUPDisquesCopier les membres sélectionnés d’un PDS vers un autre PDS.Exemple 18 : Copier les membres sélectionnés d’un PDS vers un PDS

Les exemples qui utilisent un disque ou une bande à la place des numéros de périphérique réels doivent être modifiés avant utilisation.
Les numéros de périphérique réels dépendent de la manière dont votre installation a défini les périphériques sur votre système.

Exemples

Exemple 1 : Copie un ensemble de données entier

Dans cet exemple, un ensemble de données partitionné (DATASET5) est copié d’un volume de disque à un autre.
La figure 1 montre les ensembles de données d’entrée et de sortie avant et après le traitement.

//COPY     JOB   ...
//JOBSTEP  EXEC  PGM=IEBCOPY
//SYSPRINT DD  SYSOUT=A
//SYSUT1   DD  DSNAME=DATASET5,UNIT=disk,VOL=SER=111113,
//             DISP=SHR
//SYSUT2   DD  DSNAME=DATASET4,UNIT=disk,VOL=SER=111112,
//             DISP=(NEW,KEEP),SPACE=(TRK,(5,1,2))

Les instructions de contrôle sont les suivantes :

  • SYSUT1 DD définit un ensemble de données partitionnées, DATASET5, qui contient deux membres (A et C).
  • SYSUT2 DD définit un nouveau jeu de données partitionné, DATASET4, qui doit être conservé après l’opération de copie.
    Cinq pistes sont allouées pour l’ensemble de données ; deux blocs sont alloués pour les entrées de répertoire.
  • Étant donné que l’ensemble de données partitionné ne comporte que deux membres, SYSUT3 et SYSUT4 DD ne sont pas nécessaires.
  • Étant donné que les ensembles de données d’entrée et de sortie sont identifiés comme SYSUT1 et SYSUT2, l’ensemble de données SYSIN n’est pas nécessaire.
    Le jeu de données SYSUT1 sera entièrement copié dans le jeu de données SYSUT2.
    Une fois l’opération de copie terminée, DATASET4 contiendra les mêmes membres que ceux de DATASET5.
    Cependant, il n’y aura pas d’espace intégré inutilisé dans DATASET4.
    Si vous copiez un PDSE, le traitement est le même, sauf qu’il n’y a pas d’espace intégré inutilisé dans un PDSE.

FIGURE 1 : Copie d’un ensemble de données partitionnées—copie complète

Exemple 2 : fusionner quatre ensembles de données

Dans cet exemple, les membres sont copiés à partir de trois jeux de données partitionnés en entrée (DATASET1, DATASET5 et DATASET6) vers un jeu de données partitionné en sortie existant (DATASET2).
La séquence dans laquelle les instructions de contrôle se produisent contrôle la manière et la séquence dans lesquelles les ensembles de données partitionnés sont traités.
La figure 2 montre les ensembles de données d’entrée et de sortie avant et après le traitement.

FIGURE 2 : Copie à partir de trois ensembles de données partitionnées en entrée

L’exemple suit :

//COPY     JOB   ...
//JOBSTEP  EXEC  PGM=IEBCOPY
//SYSPRINT DD  SYSOUT=A
//IN1      DD  DSNAME=DATASET1,UNIT=disk,VOL=SER=111112,
//             DISP=SHR
//IN5      DD  DSNAME=DATASET5,UNIT=disk,VOL=SER=111114,
//             DISP=OLD
//OUT2     DD  DSNAME=DATASET2,UNIT=disk,VOL=SER=111115,
//             DISP=(OLD,KEEP)
//IN6      DD  DSNAME=DATASET6,UNIT=disk,VOL=SER=111117,
//             DISP=(OLD,DELETE)
//SYSUT3   DD  UNIT=SYSDA,SPACE=(TRK,(1))
//SYSIN    DD  *
COPYOPER   COPY  OUTDD=OUT2
                 INDD=IN1
                 INDD=IN6
                 INDD=IN5
/*

Les instructions de contrôle sont les suivantes :

  • IN1 DD définit un ensemble de données partitionnées (DATASET1).
    Cet ensemble de données contient trois membres (A, B et F) dans un format fixe avec une longueur d’enregistrement logique de 80 octets et une taille de bloc de 80 octets.
  • IN5 DD définit un ensemble de données partitionnées (DATASET5).
    Cet ensemble de données contient deux membres (A et C) au format bloqué fixe avec une longueur d’enregistrement logique de 80 octets et une taille de bloc de 160 octets.
  • OUT2 DD définit un ensemble de données partitionnées (DATASET2).
    Cet ensemble de données contient deux membres (C et E) au format bloc fixe.
    Les membres ont une longueur d’enregistrement logique de 80 octets et une taille de bloc de 240 octets.
  • IN6 DD définit un ensemble de données partitionnées (DATASET6).
    Cet ensemble de données contient trois membres (B, C et D) au format de bloc fixe avec une longueur d’enregistrement logique de 80 octets et une taille de bloc de 400 octets.
    Cet ensemble de données doit être supprimé lorsque le traitement est terminé.
  • SYSUT3 définit un ensemble de données de déversement temporaire.
  • SYSIN DD définit l’ensemble de données de contrôle, qui suit dans le flux d’entrée.
    L’ensemble de données contient une instruction COPY et trois instructions INDD.
  • COPY indique le début de l’opération de copie.
    Le paramètre OUTDD spécifie DATASET2 comme ensemble de données de sortie.
  • La première instruction INDD spécifie DATASET1 comme premier ensemble de données d’entrée à traiter.
    Tous les membres (A, B et F) sont copiés dans DATASET2.
  • La deuxième instruction INDD spécifie DATASET6 comme deuxième ensemble de données d’entrée à traiter.
    Le traitement se déroule comme suit :
    1. Le remplacement n’étant pas spécifié, les membres B et C, qui existent déjà dans DATASET2, ne sont pas copiés dans DATASET2.
    2. Le membre D est copié dans DATASET2.
    3. Tous les membres de DATASET6 sont perdus lorsque l’ensemble de données est supprimé.
  • La troisième instruction INDD spécifie DATASET5 comme troisième ensemble de données d’entrée à traiter.
    Aucun membre n’est copié dans DATASET2 car tous existent dans DATASET2.

Exemple 3 : Copier et remplacer les membres sélectionnés d’un ensemble de données

Dans cet exemple, deux membres (A et B) sont sélectionnés à partir de deux ensembles de données partitionnées en entrée (DATASET5 et DATASET6) et copiés dans un ensemble de données partitionnées en sortie existant (DATASET1).
Le membre B remplace un membre portant le même nom qui existe déjà dans l’ensemble de données de sortie.
La figure 3 montre les ensembles de données d’entrée et de sortie avant et après le traitement.

FIGURE 3 : Copie sélective avec remplacement spécifié au niveau du membre

//COPY     JOB     ...
//JOBSTEP  EXEC  PGM=IEBCOPY
//SYSPRINT DD  SYSOUT=A
//OUT1     DD  DSNAME=DATASET1,UNIT=disk,VOL=SER=111112,
//             DISP=(OLD,KEEP)
//IN6      DD  DSNAME=DATASET6,UNIT=disk,VOL=SER=111115,
//             DISP=OLD
//IN5      DD  DSNAME=DATASET5,UNIT=disk,VOL=SER=111116,
//             DISP=(OLD,KEEP)
//SYSUT3   DD  UNIT=SYSDA,SPACE=(TRK,(1))
//SYSUT4   DD  UNIT=SYSDA,SPACE=(TRK,(1))
//SYSIN    DD  *
COPYOPER   COPY    OUTDD=OUT1,
                   INDD=IN5,IN6
           SELECT  MEMBER=((B,,R),A)
/*

Les instructions de contrôle sont les suivantes :

  • OUT1 DD définit un ensemble de données partitionnées (DATASET1), qui contient trois membres (A, B et F).
  • IN6 DD définit un ensemble de données partitionnées (DATASET6), qui contient trois membres (B, C et D).
  • IN5 DD définit un ensemble de données partitionnées (DATASET5), qui contient deux membres (A et C).
  • SYSUT3 et SYSUT4 DD définissent des ensembles de données de déversement temporaires. Une piste est allouée pour chacun sur un volume de disque.
  • SYSIN DD définit l’ensemble de données de contrôle, qui suit dans le flux d’entrée.
    L’ensemble de données contient une instruction COPY, une instruction INDD et une instruction SELECT.
  • COPY indique le début de l’opération de copie. L’utilisation d’une instruction SELECT provoque une copie sélective.
    Le paramètre OUTDD spécifie DATASET1 comme ensemble de données de sortie.
  • INDD spécifie DATASET5 comme premier ensemble de données d’entrée à traiter et DATASET6 comme deuxième ensemble de données d’entrée à traiter.
    Le traitement se déroule comme suit :
    1. Les membres sélectionnés sont recherchés sur DATASET5.
    2. Le membre A est trouvé, mais n’est pas copié dans DATASET1 car DATASET1 a déjà un membre nommé A et l’option de remplacement n’est pas spécifiée pour le membre A.
    3. Les membres sélectionnés introuvables sur DATASET5 sont recherchés sur DATASET6.
    4. Le membre B est trouvé et copié dans DATASET1, même s’il existe déjà un membre B de DATASET1 dans DATASET1, car l’option de remplacement est spécifiée pour le membre B au niveau du membre.
      Le pointeur dans le répertoire de DATASET1 est modifié pour pointer vers le nouveau membre (copié) B ; ainsi, l’espace occupé par l’ancien membre B est inutilisé.
  • SELECT spécifie les membres à sélectionner dans les ensembles de données d’entrée (DATASET5 et DATASET6) à copier dans l’ensemble de données de sortie (DATASET1).

Exemple 4 : Décharger et compresser un ensemble de données

Dans cet exemple, un ensemble de données partitionné est déchargé sur un volume de bande pour créer une copie de sauvegarde de l’ensemble de données.
Si cette étape réussit, l’ensemble de données partitionné doit être compressé sur place.

//SAVE     JOB  ...
//STEP1    EXEC PGM=IEBCOPY
//SYSPRINT DD  SYSOUT=A
//SYSUT1   DD  DSNAME=PARTPDS,UNIT=disk,VOL=SER=PCP001,
//             DISP=OLD
//SYSUT2   DD  DSNAME=SAVDATA,UNIT=tape,VOL=SER=TAPE03,
//             DISP=(NEW,KEEP),LABEL=(,SL)
//SYSUT3   DD  DSNAME=TEMP1,UNIT=disk,VOL=SER=111111,
//             DISP=(NEW,DELETE),SPACE=(80,(60,45))
//SYSIN    DD  DUMMY
//STEP2    EXEC PGM=IEBCOPY,COND=(0,NE),PARM='SIZE=500K'
//SYSPRINT DD  SYSOUT=A
//COMPDS   DD  DSNAME=PARTPDS,UNIT=disk,DISP=OLD,
//             VOL=SER=PCP001
//SYSUT3   DD  DSNAME=TEMPA,UNIT=disk,VOL=SER=111111,
//             DISP=(NEW,DELETE),SPACE=(80,(60,45))
//SYSIN    DD  *
           COPY OUTDD=COMPDS,INDD=COMPDS
/*

Les instructions de contrôle sont les suivantes :

  • SYSUT1 DD définit un ensemble de données partitionnées (PARTPDS) qui réside sur un volume de disque et est supposé avoir 700 membres.
    Le nombre de membres est utilisé pour calculer l’allocation d’espace sur SYSUT3.
  • SYSUT2 DD définit un ensemble de données séquentielles pour contenir PARTPDS sous forme déchargée.
    Des informations sur la taille des blocs peuvent éventuellement être ajoutées ; cet ensemble de données doit être NOUVEAU.
  • SYSUT3 DD définit le jeu de données de déversement temporaire.
    Le jeu de données SYSUT4 n’est jamais utilisé pour une opération de déchargement.
  • SYSIN DD définit le jeu de données de contrôle.
    Étant donné que SYSIN est fictif et que SYSUT2 définit un ensemble de données séquentiel, tous les membres de l’ensemble de données SYSUT1 seront déchargés dans l’ensemble de données SYSUT2.
  • La deuxième instruction EXEC marque le début de l’opération de compression sur place.
    Le paramètre SIZE indique que les tampons doivent être aussi grands que possible.
    Le paramètre COND indique que la compression sur place ne doit être effectuée que si l’opération de déchargement a réussi.
  • COMPDS DD définit un ensemble de données partitionné (PARTPDS) qui contient 700 membres et réside sur un volume de disque.
  • SYSUT3 DD définit l’ensemble de données de déversement temporaire à utiliser s’il n’y a pas assez d’espace dans la mémoire principale pour les entrées de répertoire de l’ensemble de données d’entrée.
    TEMPA contient un enregistrement de 80 caractères pour chaque membre.
  • SYSIN DD définit l’ensemble de données de contrôle, qui suit dans le flux d’entrée.
    L’ensemble de données contient une instruction COPY.
  • COPY marque le début de l’opération de copie.
    Étant donné que la même instruction DD est spécifiée pour les opérandes INDD et OUTDD, l’ensemble de données est compressé sur place.
    Si un PDSE est utilisé, cette étape ne sera pas traitée.

Si vous souhaitez décharger plusieurs ensembles de données en une seule utilisation d’IEBCOPY, vous devez utiliser une instruction COPY distincte pour chaque opération de déchargement.
Un seul ensemble de données d’entrée peut être spécifié dans une opération de déchargement.

Exemple 5 : Fusionner des ensembles de données et compresser l’ensemble de données fusionné

Dans cet exemple, deux ensembles de données partitionnées en entrée (DATASET5 et DATASET6) sont copiés dans un ensemble de données partitionné en sortie existant (DATASET1).
De plus, tous les membres de DATASET6 sont copiés ; les membres de l’ensemble de données de sortie portant le même nom que les membres copiés sont remplacés.
Après le traitement de DATASET6, l’ensemble de données de sortie (DATASET1) est compressé sur place.
La figure 4 montre les ensembles de données d’entrée et de sortie avant et après le traitement.

Figure 4 : Compress-in-Place suivant la copie complète avec “replace”

//COPY     JOB  ...
//JOBSTEP  EXEC PGM=IEBCOPY
//SYSPRINT DD  SYSOUT=A
//INOUT1   DD  DSNAME=DATASET1,UNIT=disk,VOL=SER=111112,
//             DISP=(OLD,KEEP)
//IN5      DD  DSNAME=DATASET5,UNIT=disk,VOL=SER=111114,
//             DISP=OLD
//IN6      DD  DSNAME=DATASET6,UNIT=disk,VOL=SER=111115,
//             DISP=(OLD,KEEP)
//SYSUT3   DD  UNIT=SYSDA,SPACE=(TRK,(1))
//SYSUT4   DD  UNIT=SYSDA,SPACE=(TRK,(1))
//SYSIN    DD  *
COPYOPER COPY  OUTDD=INOUT1,INDD=(IN5,(IN6,R),INOUT1)
/*

Les instructions de contrôle sont les suivantes :

  • INOUT1 DD définit un ensemble de données partitionné (DATASET1), qui contient trois membres (A, B et F).
  • IN5 DD définit un ensemble de données partitionnées (DATASET5), qui contient deux membres (A et C).
  • IN6 DD définit un ensemble de données partitionnées (DATASET6), qui contient trois membres (B, C et D).
  • SYSUT3 et SYSUT4 DD définissent des ensembles de données de déversement temporaires.
    Une piste est allouée pour chacun sur un volume de disque.
  • SYSIN DD définit l’ensemble de données de contrôle, qui suit dans le flux d’entrée.
    L’ensemble de données contient une instruction COPY.
  • COPY indique le début de l’opération de copie.
    L’opérande OUTDD spécifie DATASET1 comme ensemble de données de sortie.
    L’opérande INDD spécifie DATASET5 comme premier ensemble de données d’entrée à traiter.
    Il spécifie ensuite DATASET6 comme deuxième ensemble de données d’entrée à traiter.
    De plus, l’option de remplacement est spécifiée pour tous les membres copiés à partir de DATASET6.
    Enfin, il spécifie DATASET1 comme dernier ensemble de données d’entrée à traiter.
    Étant donné que DATASET1 est également le jeu de données de sortie, DATASET1 est compressé sur place.
    Toutefois, si DATASET1 est un PDSE, l’opération de compression sur place ne sera pas traitée.

Le traitement se déroule comme suit :

  1. Le membre A n’est pas copié de DATASET5 dans DATASET1 car il existe déjà sur DATASET1 et l’option de remplacement n’a pas été spécifiée pour DATASET5.
  2. Le membre C est copié de DATASET5 vers DATASET1, occupant le premier espace disponible.
  3. Tous les membres sont copiés de DATASET6 vers DATASET1, immédiatement après le dernier membre.
    Les membres B et C sont copiés même si l’ensemble de données de sortie contient déjà des membres portant les mêmes noms, car l’option de remplacement est spécifiée au niveau de l’ensemble de données.

Les pointeurs dans le répertoire de DATASET1 sont modifiés pour pointer vers les nouveaux membres B et C.
Ainsi, l’espace occupé par les anciens membres B et C est inutilisé.
Les membres actuellement sur DATASET1 sont compressés sur place, éliminant ainsi l’espace inutilisé intégré.

Exemple 6 : Opérations de copie multiples avec un jeu de données de sortie

Dans cet exemple, les membres sont sélectionnés, exclus et copiés à partir d’ensembles de données partitionnées d’entrée vers un ensemble de données partitionnées de sortie.
Cet exemple est conçu pour illustrer plusieurs opérations de copie.

La figure 5 et la figure 6 montrent les ensembles de données d’entrée et de sortie avant et après le traitement.

L’exemple suit :

  //COPY     JOB  ...
  //JOBSTEP  EXEC PGM=IEBCOPY
  //SYSPRINT DD  SYSOUT=A
  //INOUTA   DD  DSNAME=DATASETA,UNIT=disk,VOL=SER=111113,
  //             DISP=OLD
  //INB      DD  DSNAME=DATASETB,UNIT=disk,VOL=SER=111115,
  //             DISP=(OLD,KEEP)
  //INC      DD  DSNAME=DATASETC,UNIT=disk,VOL=SER=111114,
  //             DISP=(OLD,KEEP)
  //IND      DD  DSNAME=DATASETD,UNIT=disk,VOL=SER=111116,
  //             DISP=OLD
  //INE      DD  DSNAME=DATASETE,UNIT=disk,VOL=SER=111117,
  //             DISP=OLD
  //OUTX     DD  DSNAME=DATASETX,UNIT=disk,VOL=SER=111112,
  //             DISP=(NEW,KEEP),SPACE=(TRK,(3,1,2))
  //SYSUT3   DD  UNIT=SYSDA,SPACE=(TRK,(1))
  //SYSIN    DD  *
  COPERST1 COPY  O=OUTX,I=INOUTA
           COPY  OUTDD=INOUTA,INDD=INOUTA
                 INDD=INB
           COPY  OUTDD=INOUTA
                 INDD=IND
        EXCLUDE  MEMBER=MM
                 INDD=INC
         SELECT  MEMBER=((ML,MD,R))
                 INDD=INE
  /*

Les instructions de contrôle sont les suivantes :

  • INOUTA DD définit une donnée partitionnée, DATASETA, qui contient sept membres (MA, MB, MC, MD, ME, MF et MG).
  • INB DD définit un ensemble de données partitionné, DATASETB, qui contient deux membres (MA et MJ).
  • INC DD définit un ensemble de données partitionné, DATASETC, qui contient quatre membres (MF, ML, MM et MN).
  • IND DD définit un ensemble de données partitionné, DATASETD, qui contient deux membres (MM et MP).
  • INE DD définit un ensemble de données partitionné, DATASETE, qui contient quatre membres (MD, ME, MF et MT).
  • OUTX DD définit un ensemble de données partitionné (DATASETX).
    Ce jeu de données est nouveau et est à conserver après l’opération de copie.
    Trois pistes sont allouées pour l’ensemble de données sur un volume de disque.
    Deux blocs sont alloués pour les entrées de répertoire.
  • SYSUT3 définit un ensemble de données de déversement temporaire.
  • SYSIN DD définit l’ensemble de données de contrôle, qui suit dans le flux d’entrée.
    L’ensemble de données contient deux instructions COPY, plusieurs instructions INDD, une instruction SELECT et une instruction EXCLUDE.
  • La première instruction COPY indique le début de la première opération de copie.
    Cette opération de copie est effectuée pour créer une copie de sauvegarde de DATASETA.
  • La deuxième instruction COPY indique le début d’une autre opération de copie.
    Étant donné que DATASETA est spécifié dans les paramètres INDD et OUTDD, DATASETA est compressé sur place.
    L’ensemble de données de sortie est d’abord compressé sur place pour économiser de l’espace, car on sait qu’il contient de l’espace intégré inutilisé.
    L’instruction INDD suivante spécifie DATASETB comme prochain ensemble de données d’entrée à copier.
    Seul le membre MJ est copié, car DATASETA contient déjà un membre nommé MA.
  • La troisième instruction COPY indique le début de la troisième opération de copie.
    Le paramètre OUTDD spécifie DATASETA comme ensemble de données de sortie.
    Cette opération de copie contient plusieurs étapes de copie.
    La première instruction INDD spécifie DATASETD comme premier ensemble de données d’entrée à traiter.
    Seul le membre MP est copié dans DATASETA car l’instruction EXCLUDE spécifie que le membre MM doit être exclu de la première étape de copie dans cette opération de copie.

Figure 5. Opérations de copie multiples/étapes de copie (Partie 1 de 2)

Figure 6. Opérations de copie multiples/étapes de copie (Partie 2 de 2)

Exemple 7 : Opérations de copie multiples avec différents jeux de données de sortie

Dans cet exemple, les membres sont sélectionnés, exclus et copiés à partir d’ensembles de données partitionnées d’entrée vers un ensemble de données partitionnées de sortie.
Cet exemple est conçu pour illustrer plusieurs opérations de copie.
La figure 7, la figure 8 et la figure 9 montrent les ensembles de données d’entrée et de sortie avant et après le traitement.

L’exemple suit :

//COPY     JOB  ...
//JOBSTEP  EXEC PGM=IEBCOPY
//SYSPRINT DD  SYSOUT=A
//OUTA     DD  DSNAME=DATASETA,UNIT=disk,VOL=SER=111113,
//             DISP=OLD
//INOUTB   DD  DSNAME=DATASETB,VOL=SER=111115,UNIT=disk,
//             DISP=(OLD,KEEP)
//INOUTC   DD  DSNAME=DATASETC,VOL=SER=111114,UNIT=disk,
//             DISP=(OLD,KEEP)
//INOUTD   DD  DSNAME=DATASETD,VOL=SER=111116,DISP=OLD,
//             UNIT=disk
//INE      DD  DSNAME=DATASETE,VOL=SER=111117,DISP=OLD,
//             UNIT=disk
//SYSUT3   DD  UNIT=SYSDA,SPACE=(TRK,(1))
//SYSUT4   DD  UNIT=SYSDA,SPACE=(TRK,(1))
//SYSIN    DD  *
         COPY  OUTDD=OUTA
               INDD=INE
       SELECT  MEMBER=(MA,MJ)
               INDD=INOUTC
      EXCLUDE  MEMBER=(MM,MN)
         COPY  OUTDD=INOUTB,INDD=INOUTD
               INDD=((INOUTC,R),INOUTB)
         COPY  OUTDD=INOUTD,INDD=((INOUTB,R))
       SELECT  MEMBER=MM
/*

Les instructions de contrôle sont les suivantes :

  • OUTA DD définit un ensemble de données partitionné, DATASETA, qui contient trois membres (MA, MB et MD).
  • INOUTB DD définit un ensemble de données partitionnées, DATASETB, qui contient deux membres (MA et MJ).
  • INOUTC DD définit un ensemble de données partitionnées, DATASETC, qui contient quatre membres (MF, ML, MM et MN).
  • INOUTD DD définit un ensemble de données partitionné, DATASETD, qui contient deux membres (MM et MP).
  • INE DD définit un ensemble de données partitionné, DATASETE, qui contient trois membres (MA, MJ et MK).
  • SYSUT3 et SYSUT4 DD définissent des ensembles de données de déversement temporaires. Une piste est allouée pour chacun sur un volume de disque.
  • SYSIN DD définit l’ensemble de données de contrôle, qui suit dans le flux d’entrée.
    L’ensemble de données contient trois instructions COPY, deux instructions SELECT, une instruction EXCLUDE et plusieurs instructions INDD.
  • La première instruction COPY indique le début d’une opération de copie. L’opérande OUTDD spécifie DATASETA comme ensemble de données de sortie. La première instruction INDD spécifie DATASETE comme premier ensemble de données d’entrée à traiter. L’instruction SELECT spécifie que les membres MA et MJ doivent être copiés de DATASETE vers DATASETA. Le traitement se déroule comme suit :
    1. Le membre MA est recherché et trouvé, mais n’est pas copié car l’option de remplacement n’est pas spécifiée.
    2. Le membre MJ est recherché, trouvé et copié dans DATASETA.
    La deuxième instruction INDD marque la fin de la première étape de copie et le début de la deuxième étape de copie dans la première opération de copie.
    Il spécifie DATASETC comme deuxième ensemble de données d’entrée à traiter.
    Les membres MF et ML, qui ne sont pas nommés dans l’instruction EXCLUDE, sont copiés car DATASETA ne contient ni l’un ni l’autre.
    EXCLUDE spécifie que les membres MM et MN ne doivent pas être copiés de DATASETC vers DATASETA.
  • La deuxième instruction COPY indique le début d’une autre opération de copie.
    Le paramètre OUTDD spécifie DATASETB comme ensemble de données de sortie.
    Le paramètre INDD spécifie DATASETD comme premier ensemble de données d’entrée à traiter.
    Les membres MP et MM sont copiés dans DATASETB.
    L’instruction INDD suivante spécifie DATASETC comme deuxième et DATASETB comme troisième ensemble de données d’entrée à traiter.
    Les membres MF, ML, MM et MN sont copiés de DATASETC.
    Le membre MM est copié, bien que DATASETB contienne déjà un membre MM, car l’option de remplacement est spécifiée.
    Le pointeur dans le répertoire de DATASETB est modifié pour pointer vers le nouveau membre (copié) MM.
    Ainsi, l’espace occupé par l’élément remplacé MM est un espace encastré, inutilisé.
    DATASETB est ensuite compressé sur place pour supprimer l’espace intégré inutilisé.
    (DATASETB est spécifié comme jeux de données d’entrée et de sortie.)
  • La troisième instruction COPY indique le début de la dernière opération de copie.
    Le paramètre OUTDD spécifie DATASETD comme ensemble de données de sortie.
    Le paramètre INDD spécifie DATASETB comme ensemble de données d’entrée.
    SELECT spécifie que le membre MM doit être copié de DATASETB vers DATASETD.
    Étant donné que l’option de remplacement est spécifiée au niveau de l’ensemble de données, le membre MM est copié et remplace le membre MM de DATASETD.

Figure 7. Opérations de copie multiples/étapes de copie au sein d’un step de job (Partie 1 de 3)

Figure 8. Opérations de copie multiples/étapes de copie au sein d’un step de job (Partie 2 de 3)

Figure 9. Opérations de copie multiples/étapes de copie au sein d’une étape de tâche (Partie 3 de 3)

Exemple 8 : Chargement d’un jeu de données

Dans cet exemple, un ensemble de données séquentiel créé par une opération de déchargement IEBCOPY est chargé.

//LOAD     JOB  ...
//STEPA    EXEC PGM=IEBCOPY
//SYSPRINT DD  SYSOUT=A
//SYSUT1   DD  DSNAME=UNLOADSET,UNIT=tape,LABEL=(,SL),
//             VOL=SER=TAPE01,DISP=OLD
//SYSUT2   DD  DSNAME=DATASET4,UNIT=disk,VOL=SER=2222222,
//             DISP=(NEW,KEEP),SPACE=(CYL,(10,5,10))
//SYSUT3   DD  DSN=TEMP1,UNIT=disk,VOL=SER=111111,
//             DISP=(NEW,DELETE),SPACE=(80,(15,1))
//SYSIN    DD  DUMMY
/*

Les instructions de contrôle sont les suivantes :

  • SYSUT1 DD définit un ensemble de données séquentielles précédemment créé par une opération de déchargement IEBCOPY.
    L’ensemble de données contient 28 membres dans une organisation séquentielle.
  • SYSUT2 DD définit un nouvel ensemble de données partitionnées sur un volume de disque.
    Cet ensemble de données est à conserver après l’opération de chargement.
    Dix cylindres sont alloués pour l’ensemble de données ; dix blocs sont alloués pour les entrées de répertoire.
  • SYSUT3 DD définit un jeu de données de déversement temporaire sur un volume de disque.
  • SYSIN DD définit le jeu de données de contrôle.

Exemple 9 : décharger les membres sélectionnés, charger, copier et fusionner

Dans cet exemple, les membres sont sélectionnés, exclus, déchargés, chargés et copiés.
Le traitement se déroulera comme suit :

  1. décharger, exclure les membres
  2. décharger, sélectionner des membres
  3. charger et copier pour fusionner les membres
//COPY     JOB  ...
//STEP     EXEC PGM=IEBCOPY
//SYSPRINT DD  SYSOUT=A
//PDS1     DD  DSNAME=ACCOUNTA,UNIT=disk,VOL=SER=333333,
//             DISP=OLD
//PDS2     DD  DSNAME=ACCOUNTB,UNIT=disk,VOL=SER=333333,
//             DISP=OLD
//SEQ1     DD  DSNAME=SAVAC,UNIT=disk,VOL=SER=333333,
//             DISP=(NEW,KEEP),SPACE=(CYL,(5,2))
//SEQ2     DD  DSNAME=SAVACB,UNIT=tape,VOL=SER=T01911,
//             DISP=(NEW,KEEP),LABEL=(,SL)
//NEWUP    DD  DSNAME=NEWACC,UNIT=tape,VOL=SER=T01219,
//             DISP=OLD,LABEL=(,SL)
//MERGE    DD  DSNAME=ACCUPDAT,UNIT=disk,VOL=SER=222222,
//             DISP=OLD
//SYSUT3   DD  DSNAME=TEMP1,VOL=SER=666666,UNIT=disk,
//             DISP=(NEW,DELETE),SPACE=(80,(1,1))
//SYSUT4   DD  DSNAME=TEMP2,VOL=SER=666666,UNIT=disk,
//             DISP=(NEW,DELETE),SPACE=(256,(1,1)),DCB=(KEYLEN=8)
//SYSIN    DD  *
     COPY      OUTDD=SEQ1,INDD=PDS1
     EXCLUDE   MEMBER=(D,C)
     COPY      OUTDD=SEQ2,INDD=PDS2
     SELECT    MEMBER=(A,K)
     COPY      OUTDD=MERGE,INDD=((NEWUP,R),PDS1,PDS2)
     EXCLUDE   MEMBER=A
/*

Les instructions de contrôle sont les suivantes :

  • PDS1 DD définit un ensemble de données partitionné appelé ACCOUNTA qui contient six membres (A, B, C, D, E et F).
  • PDS2 DD définit un ensemble de données partitionné appelé ACCOUNTB qui contient trois membres (A, K et L).
  • SEQ1 DD définit un nouveau jeu de données séquentiel appelé SAVAC.
  • SEQ2 DD définit un nouvel ensemble de données séquentielles appelé SAVACB sur un volume de bande.
    La bande porte des étiquettes standard IBM.
  • NEWUP DD définit un ancien ensemble de données séquentiel appelé NEWACC qui est la forme déchargée d’un ensemble de données partitionné qui contient huit membres (A, B, C, D, M, N, O et P).
    Il réside sur un volume de bande.
  • MERGE DD définit un ensemble de données partitionné appelé ACCUPDAT qui contient six membres (A, B, C, D, Q et R).
  • SYSUT3 et SYSUT4 DD définissent des ensembles de données de déversement temporaires.
  • SYSIN DD définit l’ensemble de données de contrôle, qui suit dans le flux d’entrée.
  • La première instruction COPY indique le début de la première opération de copie.
    Le paramètre OUTDD spécifie que SAVAC est le jeu de données de sortie et le paramètre INNDD spécifie que ACCOUNTA est le jeu de données d’entrée.
    Étant donné que SAVAC est un ensemble de données séquentiel, ACCOUNTA sera déchargé lors de cette opération de copie.
    L’instruction EXCLUDE spécifie que les membres D et C ne doivent pas être déchargés vers SAVAC avec le reste d’ACCOUNTA.
  • La deuxième instruction COPY indique le début de la deuxième opération de copie.
    Le paramètre OUTDD spécifie que SAVACB est le jeu de données de sortie et le paramètre INDD spécifie que ACCOUNTB est le jeu de données d’entrée.
    Étant donné que SAVACB est un ensemble de données séquentiel, ACCOUNTB sera déchargé lors de cette opération de copie.
    L’instruction SELECT spécifie que les membres A et K sont les seuls membres de ACCOUNTB qui doivent être déchargés vers SAVACB.
  • La troisième instruction COPY indique le début de la dernière opération de copie.
    Le paramètre OUTDD spécifie que ACCUPDAT est le jeu de données de sortie.
    L’instruction EXCLUDE spécifie que le membre A est exclu de cette opération de copie.
    Les trois ensembles de données spécifiés dans le paramètre INDD seront traités comme suit :
    1. Le jeu de données NEWACC est un jeu de données séquentiel, il est donc chargé dans ACCUPDAT.
      Etant donné que l’option de remplacement est spécifiée, les membres B, C et D de NEWACC remplacent les membres portant le même nom dans ACCUPDAT.
      Les membres restants de NEWACC sont également copiés dans ACCUPDAT, à l’exception de A, qui est exclu de l’opération de copie.
    2. L’ensemble de données ACCOUNTA est un ensemble de données partitionné, ses membres sont donc copiés dans ACCUPDAT.
      Le remplacement n’étant pas spécifié, seuls les membres E et F sont copiés.
    3. L’ensemble de données ACCOUNTB est un ensemble de données partitionné, de sorte que ses membres sont copiés dans ACCUPDAT.
      Seuls les membres K et L sont copiés.

Exemple 10 : Modifier les modules de chargement en place

Dans cet exemple, tous les membres de l’ensemble de données MODLIBJ, les membres MODX, MODY et MODZ de l’ensemble de données MODLIBK et tous les membres de l’ensemble de données MODLIBL, à l’exception de MYMACRO et MYJCL, sont modifiés sur place.

//ALTERONE JOB  ...
//STEPA    EXEC PGM=IEBCOPY
//SYSPRINT DD  SYSOUT=A
//SYSUT3   DD  UNIT=SYSDA,SPACE=(TRK,(5,1))
//LIBJ     DD  DSNAME=MODLIBJ,DISP=(OLD,KEEP)
//LIBK     DD  DSNAME=MODLIBK,DISP=(OLD,KEEP)
//LIBL     DD  DSNAME=MODLIBL,DISP=(OLD,KEEP)
//SYSIN    DD  *
     ALTERMOD  OUTDD=LIBJ
     ALTERMOD  OUTDD=LIBK,LIST=NO
     SELECT    MEMBER=(MODX,MODY,MODZ)
     ALTERMOD  OUTDD=LIBL
     EXCLUDE   MEMBER=(MYMACRO,MYJCL)
/*

Les instructions de contrôle sont les suivantes :

  • LIBJ DD définit l’ensemble de données partitionné MODLIBJ, qui a été précédemment créé et catalogué.
  • LIBK DD définit le jeu de données partitionné MODLIBK, qui a été précédemment créé et catalogué.
  • LIBL DD définit l’ensemble de données partitionné MODLIBL, qui a été préalablement créé et catalogué.
  • SYSIN DD définit l’ensemble de données de contrôle, qui suit dans le flux d’entrée.
  • La première instruction ALTERMOD spécifie que l’ensemble de données défini dans LIBJ doit être modifié sur place.
  • La deuxième instruction ALTERMOD plus l’instruction SELECT suivante indiquent que les membres MODX, MODY et MODZ doivent être modifiés sur place.
    Le reste de MODLIBK est inchangé.
  • La troisième instruction ALTERMOD plus l’instruction EXCLUDE suivante indiquent que tout MODLIBL doit être modifié sur place, à l’exception des membres appelés MYMACRO et MYJCL.
    Ces membres restent inchangés.

Exemple 11 : Remplacement d’un module de chargement à l’aide de COPYMOD

Dans cet exemple, un module de chargement dans une bibliothèque de chargement existante est remplacé par un autre module.
Le nouveau module réside à l’origine sur un périphérique DASD 3390, tandis que la bibliothèque de chargement sur laquelle il est copié réside sur un 3380.
Étant donné que le module a une taille de bloc supérieure à la taille de bloc affectée au jeu de données de sortie, le module doit être rebloqué avant il est ajouté à la bibliothèque de chargement.

Cet exemple illustre comment vous pouvez transférer des modules de charge entre des appareils de différentes tailles.
Dans ce cas, les modules mis à jour sont créés sur un 3390 et testés avant d’être ajoutés à la bibliothèque de chargement pour une utilisation générale.

//STEP1    EXEC PGM=IEBCOPY
//REPLACE  JOB  ...
//SYSPRINT DD  SYSOUT=A
//TESTLIB  DD  DSN=JOHNDOE.COBOL.TESTLOAD,DISP=SHR,UNIT=3390,
//             VOL=SER=TEST01,DCB=(BLKSIZE=23470)
//PRODLIB  DD  DSN=PAYROLL.MASTER.LOADLIB,DISP=(OLD,KEEP)
//             UNIT=3380,VOL=SER=PROD01,DCB=(BLKSIZE=19069)
//SYSIN    DD  *
           COPYMOD OUTDD=PRODLIB,INDD=TESTLIB
           SELECT MEMBER=((WAGETAX,,R))
/*

Les instructions de contrôle sont les suivantes :

  • TESTLIB DD définit une bibliothèque de chargement sur un périphérique d’accès direct 3390.
    Il a une taille de bloc de 23470.
  • PRODLIB DD définit une bibliothèque de chargement sur un équipement à accès direct 3380.
    Il a une taille de bloc de 19069.
  • SYSIN DD définit l’ensemble de données de contrôle, qui suit dans le flux d’entrée.
  • L’instruction COPYMOD identifie PAYROLL.MASTER.LOADLIB comme ensemble de données de sortie et JOHNDOE.COBOL.TESTLOAD comme ensemble de données d’entrée.
    L’instruction SELECT indique que le module de chargement WAGETAX doit être copié à partir de l’ensemble de données d’entrée et doit remplacer tout membre portant ce nom qui se trouve dans l’ensemble de données de sortie.
    Le membre est également rebloqué en 19069.

Notez que, dans ce cas, COPYMOD doit être utilisé pour copier le membre WAGETAX dans PAYROLL.MASTER.LOADLIB.
Étant donné que la taille de bloc d’origine de WAGETAX est supérieure à la plus grande taille de bloc pouvant résider dans l’ensemble de données de sortie, tenter cette opération avec l’instruction COPY échouerait.
Le problème serait attribué à une erreur de validation DCB en raison d’une taille de bloc incorrecte.

Exemple 12 : Rebloquer la bibliothèque de chargement et la distribuer à différents types d’équipements

Dans cet exemple, une bibliothèque de chargement est distribuée (en la copiant) aux périphériques dont la taille de bloc maximale diffère de celle sur laquelle réside la bibliothèque de chargement d’origine.
La bibliothèque est d’abord rebloquée à une taille de bloc maximale compatible avec chacun des appareils sur lesquels la bibliothèque sera copiée.
Ensuite, la bibliothèque est copiée sur ces appareils.

Cet exemple illustre comment des bibliothèques de chargement peuvent être développées sur un type de périphérique à accès direct, puis distribuées à d’autres types de périphériques à accès direct.

//RBLKCOPY JOB  ...
//REBLOCK  EXEC PGM=IEBCOPY
//SYSPRINT DD   SYSOUT=A
//TESTED   DD   DSN=TESTED.MASTER.LOADLIB,DISP=SHR
//STDSIZE  DD   DSN=PROGRAM.MASTER.LOADLIB,DISP=(OLD,KEEP),
//              UNIT=3390,VOL=SER=PROG01,DCB=(BLKSIZE=23470)
//SYSIN    DD   *
           COPYMOD OUTDD=STDSIZE,INDD=TESTED,MAXBLK=13030
/*
//DISTRIB  EXEC PGM=IEBCOPY
//SYSPRINT DD   SYSOUT=A
//STDSIZE  DD   DSN=PROGRAM.MASTER.LOADLIB,DISP=SHR
//LIB3350  DD   DSN=PROGRAM.LIB3380.LOADLIB,DISP=(OLD,KEEP),
//              UNIT=3380,VOL=SER=PACK01,DCB=(BLKSIZE=19069)
//LIB3330  DD   DSN=PROGRAM.LIB3380.LOADLIB,DISP=(OLD,KEEP),
//              UNIT=3380,VOL=SER=PACK02,DCB=(BLKSIZE=13030)
//SYSIN    DD   *
           COPY OUTDD=LIB3380,INDD=STDSIZE
           COPY OUTDD=LIB3380,INDD=STDSIZE
/*

Les instructions de contrôle sont les suivantes :

  • L’instruction REBLOCK EXEC commence l’étape de reblocage.
  • TESTED DD définit la bibliothèque de chargement cataloguée TESTED.MASTER.LOADLIB.
  • STDSIZE DD définit un ensemble de données existant, PROGRAM.MASTER.LOADLIB, qui réside sur un périphérique d’accès direct 3390 et a une taille de bloc de 23470.
  • L’instruction COPYMOD dans l’ensemble de données SYSIN spécifie que TESTED.MASTER.LOADLIB doit être fusionné dans PROGRAM.MASTER.LOADLIB.
    Il spécifie également que PROGRAM.MASTER.LOADLIB doit être rebloqué avec une taille de bloc maximale de 13030.
    Cette taille de bloc est choisie car elle est suffisamment petite pour tenir sur les périphériques d’accès direct 3380 et 3390.
  • L’instruction DISTRIB EXEC commence l’étape de distribution, où l’ensemble de données rebloqué est copié sur des périphériques avec des tailles de bloc maximales différentes.
  • STDSIZE DD définit le même ensemble de données qui a été rebloqué à l’étape précédente.
  • LIB3380 DD définit l’ensemble de données PROGRAM.LIB3380.LOADLIB, qui réside sur un périphérique d’accès direct 3380.
  • Les instructions COPY du jeu de données SYSIN spécifient que le jeu de données PROGRAM.MASTER.LOADLIB doit être copié dans les jeux de données de sortie sans être rebloqué.
    Si PROGRAM.MASTER.LOADLIB n’avait pas été rebloqué à la plus petite taille de bloc, cette étape se terminerait sans succès.

Exemple 13 : Conversion d’un ensemble de données partitionné en PDSE

Dans cet exemple, un ensemble de données partitionné est converti en PDSE.

//CONVERT   JOB  ...
//STEP1     EXEC PGM=IEBCOPY
//SYSPRINT  DD  SYSOUT=A
//SYSUT1    DD  DSNAME=PDSSET,DISP=SHR,DSNTYPE=PDS
//SYSUT2    DD  DSNAME=PDSESET,LIKE=PDSSET,DSNTYPE=LIBRARY,
//          DISP=(NEW,CATLG),STORCLAS=SCLASX,DATACLAS=DCLASY

Les instructions de contrôle sont les suivantes :

  • SYSUT1 DD définit le jeu de données d’entrée, PDS, qui est un jeu de données partitionné.
    Le mot clé DSNTYPE n’a aucun effet car il s’agit d’un ensemble de données existant.
  • SYSUT2 DD définit le jeu de données de sortie, PDSE, qui est un jeu de données partitionné étendu.
    Ce nouvel ensemble de données sera géré par SMS car il possède une classe de stockage.
    Le paramètre LIKE indique que les attributs DCB et SPACE pour PDSESET doivent être copiés à partir de PDSSET.
    Le paramètre DSNTYPE définit le nouvel ensemble de données comme un PDSE plutôt que comme un ensemble de données partitionnées.
    DATACLAS=DCLASY identifie le PPDSE comme un objet de programme PDSE avec une longueur d’enregistrement logique indéfinie.
    Le sous-système de gestion du stockage choisit un volume approprié pour l’allocation, en fonction de la définition de SCLASX.
  • Étant donné que les noms symboliques SYSUT1 et SYSUT2 sont utilisés pour définir les ensembles de données d’entrée et de sortie, aucun ensemble de données SYSIN n’est requis.

Exemple 14 : Copier des groupes d’un PDSE vers un PDSE

Dans cet exemple, les membres et leurs alias (groupes) sont copiés d’un PDSE vers un PDSE (copie complète de l’ensemble de données).

Voir Copie d’objets programme (instructions COPYGRP et COPYGROUP) pour plus d’informations sur la copie de groupes.

//CPYGRP    JOB  ...
//STEP1     EXEC PGM=IEBCOPY
//SYSPRINT  DD  SYSOUT=A
//DDIN      DD  DSNAME=PDSESETA,DISP=SHR
//DDOUT     DD  DSNAME=PDSESETB,LIKE=PDSESETA,DSNTYPE=LIBRARY,
//          DISP=(NEW,CATLG)
//SYSUT3    DD  UNIT=SYSDA,SPACE=(TRK,(1,1))
//SYSIN     DD  *
GROUPCPY   COPYGRP  INDD=DDIN,OUTDD=DDOUT
/*

Les instructions de contrôle sont les suivantes :

  • DDIN DD définit l’ensemble de données d’entrée, PDSESETA, qui est un ensemble de données partitionné étendu.
    DDOUT DD définit le jeu de données de sortie, PDSESETA, qui est un jeu de données partitionné étendu.
    Le sous-paramètre LIKE indique que les attributs DCB et SPACE pour PDSSETB doivent être copiés à partir de PDSESETA.
    Le sous-paramètre DSNTYPE définit le nouvel ensemble de données comme un PDSE.
    Le sous-système de gestion de stockage choisit un volume approprié pour l’allocation.
  • SYSUT3 DD définit un ensemble de données de déversement temporaire.
  • SYSIN DD définit l’ensemble de données de contrôle, qui suit dans le flux d’entrée.
    L’ensemble de données contient une instruction COPYGRP, une instruction INDD et une instruction OUTDD.
  • COPYGRP indique le début de l’opération de copie.
    Le paramètre INDD affiche PDSESETA comme ensemble de données d’entrée.
    Le paramètre OUTDD affiche PDSSETB comme ensemble de données de sortie.

Exemple 15 : Copier des groupes d’un PDSE vers un PDSE avec remplacement

Dans cet exemple, les membres et leurs alias sont copiés en groupes d’un PDSE vers un PDSE avec l’option de remplacement (R).

Voir JCL – Remplacement des objets programme pour plus d’informations sur le remplacement des groupes par COPYGRP.

//CPYGRP    JOB  ...
//STEP1     EXEC PGM=IEBCOPY
//SYSPRINT  DD  SYSOUT=A
//DDIN      DD  DSNAME=PDSESETA,DISP=SHR
//DDOUT     DD  DSNAME=PDSESETB,LIKE=PDSESETA,DSNTYPE=LIBRARY,
//          DISP=(NEW,CATLG)
//SYSUT3    DD  UNIT=SYSDA,SPACE=(TRK,(1,1))
//SYSIN     DD  *
GROUPCPY   COPYGRP  INDD=((DDIN,R)),OUTDD=DDOUT
/*

Les instructions de contrôle sont les suivantes :

  • DDIN DD définit l’ensemble de données d’entrée, PDSE, qui est un ensemble de données partitionné étendu.
    DDOUT DD définit l’ensemble de données de sortie, PDSE, qui est un ensemble de données partitionné étendu. Le paramètre DSNTYPE définit le nouvel ensemble de données comme un PDSE.
    Le sous-système de gestion de stockage choisit un volume approprié pour l’allocation.
  • SYSUT3 DD définit un ensemble de données de déversement temporaire.
  • SYSIN DD définit l’ensemble de données de contrôle, qui suit dans le flux d’entrée.
    L’ensemble de données contient une instruction COPYGRP, une instruction INDD et une instruction OUTDD.
  • COPYGRP indique le début de l’opération de copie.
    Le paramètre ((INDD,R)) affiche PDSESETA comme ensemble de données d’entrée contenant des membres pour remplacer les membres portant le même nom dans PDSSETB.
    Le paramètre OUTDD affiche PDSSETB comme ensemble de données de sortie.

Exemple 16 : Copier un groupe sélectionné d’un PDSE vers un PDSE

Dans cet exemple, un membre sélectionné et ses alias sont copiés d’un PDSE vers un PDSE.
Le nom du membre ou un maximum de huit caractères peuvent être indiqués dans l’instruction SELECT.

Voir JCL – Copie des objets du programme (instructions COPYGRP et COPYGROUP) pour plus d’informations sur la sélection de groupes sur COPYGRP.

//CPYGRP    JOB  ...
//STEP1     EXEC PGM=IEBCOPY
//SYSPRINT  DD  SYSOUT=A
//DDIN      DD  DSNAME=PDSESETA,DISP=SHR
//DDOUT     DD  DSNAME=PDSESETB,LIKE=PDSESETA,DSNTYPE=LIBRARY,
//          DISP=(NEW,CATLG)
//SYSUT3    DD  UNIT=SYSDA,SPACE=(TRK,(1,1))
//SYSIN     DD  *
GROUPCPY   COPYGRP  INDD=DDIN,OUTDD=DDOUT
           SELECT   MEMBER=(ALIAS001)
/*

Les instructions de contrôle sont les suivantes :

  • DDIN DD définit l’ensemble de données d’entrée, PDSE, qui est un ensemble de données partitionné étendu.
    DDOUT DD définit l’ensemble de données de sortie, PDSE, qui est un ensemble de données partitionné étendu.
    Tous les PDSE doivent être gérés par le sous-système de gestion du stockage.
    Le paramètre LIKE indique que les attributs DCB et SPACE pour PDSSETB doivent être copiés à partir de PDSESETA.
    Le paramètre DSNTYPE définit le nouvel ensemble de données comme un PDSE.
    Le sous-système de gestion de stockage choisit un volume approprié pour l’allocation.
  • SYSUT3 DD définit un ensemble de données de déversement temporaire.
  • SYSIN DD définit l’ensemble de données de contrôle, qui suit dans le flux d’entrée.
    L’ensemble de données contient une instruction COPYGRP, une instruction INDD et une instruction OUTDD.
  • COPYGRP indique le début de l’opération de copie.
    Le paramètre INDD affiche PDSESETA comme ensemble de données d’entrée.
    Le paramètre OUTDD affiche PDSSETB comme ensemble de données de sortie.
  • L’instruction SELECT indique qu’un groupe portant l’alias ALIAS001 doit être sélectionné dans l’ensemble de données d’entrée (PDSESETA) et copié dans l’ensemble de données de sortie (PDSESETB).

Exemple 17 : Copier les membres sélectionnés et leurs alias d’un PDS vers un PDS

Dans cet exemple, les membres sélectionnés et leurs alias sont copiés d’un PDS vers un PDS, tandis qu’une instruction EXCLUDE est utilisée pour empêcher la copie d’autres membres et de leurs alias.
Les instructions SELECT et EXCLUDE ne peuvent être utilisées que si l’opération est un COPYGROUP et que le masque de modèle de filtre de nom de membre est utilisé pour les deux.
Reportez-vous aux descriptions des instructions SELECT et EXCLUDE pour plus de détails sur l’utilisation du masque de modèle de filtre de nom de membre.

//CPYGROUP JOB ...
//STEP1    EXEC PGM=IEBCOPY
//SYSPRINT DD SYSOUT=*
//DDIN     DD DISP=SHR,DSN=PDSA
//DDOUT    DD DISP=(NEW,CATLG),DSN=PDSB,LIKE=PDSA,DSNTYPE=PDS
//SYSIN    DD *
CPYLBL1   COPYGROUP INDD=DDIN,OUTDD=DDOUT
          SELECT MEMBER=(ABCDEFGH,BCD*,%D*,GHIJKLMN)
          EXCLUDE MEMBER=(DEF*,EFGHIJKL,%GHI*)
/*

Les instructions de contrôle sont les suivantes :

  • DDIN DD définit l’ensemble de données d’entrée, PDSA, un ensemble de données partitionnées avec les membres suivants :
    1. ABCDEFGH
    2. BCDEFGHI
    3. CDEFGHIJ
    4. DEFGHIJK
    5. EFGHIJKL
    6. FGHJKLM
    7. GHIJKLMN
  • DDOUT DD définit l’ensemble de données de sortie, PDSB, un ensemble de données partitionné.
  • Le paramètre LIKE indique que les attributs DCB et SPACE pour PDSB doivent être copiés à partir de PDSA.
  • Le paramètre DSNTYPE définit l’ensemble de données en tant que PDS.
  • Le sous-système de gestion de stockage choisit un volume approprié pour l’ensemble de données nouvellement alloué.
  • SYSIN DD définit l’ensemble de données de contrôle, qui suit dans le flux d’entrée.
    L’ensemble de données contient une instruction COPYGROUP, une instruction SELECT et une instruction EXCLUDE.
  • COPYGROUP indique le début d’une opération de copie de groupe.
  • Le paramètre INDD affiche PDSA comme ensemble de données d’entrée.
  • Le paramètre OUTDD affiche PDSB comme ensemble de données de sortie.
  • L’instruction SELECT utilise le masquage du modèle de filtre et indique que tout membre correspondant au modèle de masquage et tous ses alias seront sélectionnés dans l’ensemble de données d’entrée et copiés dans l’ensemble de données de sortie.
    Dans cet exemple, les membres ABCDEFGH, BCDEFGHI, CDEFGHIJ et GHIJKLMN et leurs alias seront copiés.
  • L’instruction EXCLUDE peut être utilisée pour le masquage de modèle de filtre pour une opération COPYGROUP uniquement lorsqu’une instruction SELECT de masquage de filtre est présente.
    Cela empêchera les membres correspondants et tous leurs alias d’être copiés dans le jeu de données de sortie.
    Dans cet exemple, les membres DEFGHIJK, EFGHIJKL et FGHIJKLM et leurs alias ne seront pas copiés.

Exemple 18 : Copier des membres sélectionnés d’un PDS vers un PDS

Dans cet exemple, les membres sélectionnés sont copiés d’un PDS vers un PDS.
Cet exemple diffère de l’exemple 16 en ce que COPYGROUP permet aux membres d’être copiés avec leurs alias d’un PDS vers un PDS, tandis que COPYGRP ne copie les alias que lorsque l’un ou les deux ensembles de données d’entrée et de sortie est un PDSE.
Si les deux sont des PDS, cela entraînera une opération COPY.

Voir JCL – Copie des objets du programme  (instructions COPYGRP et COPYGROUP) pour plus d’informations sur la sélection de groupes avec COPYGROUP et les différences entre les instructions COPYGROUP et COPYGRP.

//CPYGROUP JOB ...
//STEP1    EXEC PGM=IEBCOPY
//SYSPRINT DD SYSOUT=*
//DDIN     DD DISP=SHR,DSN=PDSA,DSNTYPE=PDS
//DDOUT    DD DSN=PDSB,LIKE=PDSA,DSNTYPE=PDS,DISP=(NEW,CATLG)
//SYSIN    DD *
CPYLBL2   COPYGROUP INDD=DDIN,OUTDD=DDOUT
          SELECT MEMBER=(MEMBER02)
          SELECT MEMBER=(MEMBER03)
/*

Les instructions de contrôle sont les suivantes :

  • DDIN DD définit l’ensemble de données d’entrée, PDSA, qui est un ensemble de données partitionnées.
  • DDOUT DD définit l’ensemble de données de sortie, PDSB, qui est un ensemble de données partitionnées.
  • Le paramètre LIKE indique que les attributs DCB et SPACE pour PDSB doivent être copiés à partir de PDSA.
  • Le paramètre DSNTYPE définit le nouvel ensemble de données en tant que PDS.
  • Le sous-système de gestion de stockage choisit un volume approprié pour l’allocation.
  • SYSIN DD définit l’ensemble de données de contrôle, qui suit dans le flux d’entrée.
    L’ensemble de données contient une instruction COPYGROUP et deux instructions SELECT.
  • COPYGROUP indique le début d’une opération de copie de groupe.
  • Le paramètre INDD affiche PDSA comme ensemble de données d’entrée.
  • Le paramètre OUTDD affiche PDSB comme ensemble de données de sortie.
  • L’instruction SELECT indique que le membre MEMBER02, MEMBER03 et tous leurs alias doivent être sélectionnés dans l’ensemble de données d’entrée (PDSA) et copiés dans l’ensemble de données de sortie (PDSB).

JCL – Remplacement des objets programme

Si l’option de remplacement (R) est indiquée sur le paramètre INDD :

  • Les membres de l’ensemble de données de sortie et leurs alias seront remplacés s’ils ont les mêmes noms de membre et d’alias que les membres et les alias de l’ensemble de données d’entrée.
    Exemple :
    L’ensemble de données d’entrée a le membre A avec l’alias B ; l’ensemble de données de sortie a le membre A avec l’alias B.
    Le membre et l’alias de l’ensemble de données d’entrée remplaceront le membre et l’alias de l’ensemble de données de sortie.
  • La copie échouera si l’alias d’un membre dans les données de sortie est le même que l’alias d’un membre nommé différemment dans l’ensemble de données d’entrée.
    Exemple :
    L’ensemble de données d’entrée a le membre A avec l’alias B ; l’ensemble de données de sortie a le membre C avec l’alias B.
    La copie échouera car l’alias B pointe vers un membre avec un nom différent sur l’ensemble de données de sortie.
  • Si les membres et les alias de l’ensemble de données de sortie ne correspondent pas aux membres et aux alias de l’ensemble de données d’entrée, tous les membres et alias de l’ensemble de données d’entrée sont copiés.
    Exemple :
    L’ensemble de données d’entrée a le membre A avec l’alias B ; l’ensemble de données de sortie a le membre C avec l’alias D.
    Après la copie, l’ensemble de données de sortie contiendra A avec l’alias B et C avec l’alias D.

L’instruction EXCLUDE n’est pas prise en charge.

JCL – Copie des objets du programme 

Il est recommandé d’utiliser l’instruction COPYGRP ou COPYGROUP pour copier des modules de chargement PDS ou des objets de programme PDSE et leurs alias depuis ou vers un ensemble de données PDSE.
Les objets programme peuvent avoir des alias de plus de huit caractères.
L’utilisation de l’instruction COPYGRP ou COPYGROUP garantit que ces alias plus longs sont copiés avec leur membre.

Utilisez l’instruction COPYGRP ou COPYGROUP pour commencer une copie, un déchargement ou un chargement de groupe.
Un groupe se compose d’un membre et de tous ses alias. COPYGRP ou COPYGROUP traite le groupe comme une seule entité.

COPYGRP peut être utilisé pour copier un ensemble de données lorsque l’ensemble de données d’entrée ou l’ensemble de données de sortie, ou les deux, sont PDSE :
– PDSE vers PDSE 
– PDSE vers PDS
– PDS vers PDSE

COPYGROUP peut être utilisé pour copier un ensemble de données lorsque l’ensemble de données d’entrée ou l’ensemble de données de sortie, ou les deux, sont PDS ou PDSE :
– PDSE vers PDSE
– PDSE vers PDS
– PDS vers PDSE
– PDS vers PDS

Pour décharger des groupes :

  • Utilisation de COPYGRP : PDSE vers PS
  • Utilisation de COPYGROUP : PDSE vers PS ou PDS vers PS

Pour charger des groupes :

  • Utilisation de COPYGRP : PS vers PDSE 
  • Utilisation de COPYGROUP : PS vers PDSE ou PS vers PDS

Si aucun ensemble de données n’est un PDSE, la demande est traitée comme une opération COPY soumise aux exigences de syntaxe de COPYGRP.

Lors de l’utilisation de l’instruction COPYGRP ou COPYGROUP :

  • Tous les alias d’un groupe seront copiés avec le membre ou ni les alias ni le membre d’un groupe ne seront copiés.
  • Il ne peut y avoir qu’un seul INDD par opération de copie.
  • Vous pouvez utiliser l’instruction SELECT pour copier sélectivement des membres.
    Le nom du membre ou un alias peut être spécifié pour copier le membre et tous ses alias.
  • N’indiquez pas de remplacement (R) sur l’instruction SELECT.
  • L’instruction EXCLUDE n’est pas prise en charge.

JCL – IEBCOMPR

Les exemples du tableau 1 illustrent certaines des utilisations d’IEBCOMPR.
Les nombres dans la colonne Exemple font référence aux exemples qui suivent.
Les exemples qui utilisent un disque ou une bande à la place des noms ou des numéros de périphérique réels doivent être modifiés avant utilisation.
Les noms ou numéros de périphérique réels dépendent de la façon dont votre installation a défini les périphériques sur votre système.

Tableau 1. Répertoire d’exemple IEBCOMPR

Opération
Organisation du jeu de donnéesPériphériqueCommentairesExemple
COMPARESéquentielCassette 9 pistes Aucune routine utilisateur.
Entrée bloquée.
Exemple 1 : Comparer des ensembles de
données résidant sur bande
COMPARESéquentielCassette 7 pistesAucune routine utilisateur.
Entrée bloquée.
Exemple 2 : Comparer des ensembles de données séquentielles résidant sur bande
COMPARESéquentielBande 7 pistes et bande 9 pistes Routines utilisateur.
Entrée bloquée.
Bandes de différentes densités.
Exemple 3 : Comparer des ensembles de données séquentielles écrites à différentes densités
COMPARESéquentielFlux d’ entrée système
Bande 9 pistes
Aucune routine utilisateur.
Entrée bloquée.
Exemple 4 : Comparer des ensembles de données séquentielles : flux d’entrée et entrée de bande
COPY (avec IEBGENER) et COMPARESéquentielDisque ou bandeAucune routine utilisateur.
Entrée bloquée.
Deux étapes de travail ; les ensembles de données sont transmis à la deuxième étape du travail.
Exemple 5 : copier et comparer un ensemble de données séquentielles en deux steps de job
COMPAREpartitionné
DisqueAucune routine utilisateur.
Entrée bloquée.
Exemple 6 : Comparer deux ensembles de données partitionnés
COPY (avec IEBCOPY) et COMPAREpartitionnéDisqueRoutine utilisateur.
Entrée bloquée.
Deux étapes de travail ; les ensembles de données sont transmis à la deuxième étape du travail.
Exemple 7 : Copier et comparer un ensemble de données partitionnées en deux steps de job
COMPAREPDSE
DisqueAucune routine utilisateur.
Ensembles de données gérés par SMS.
Exemple 8 : Comparer deux PDSE

EXEMPLE

Exemple 1 : Comparer des ensembles de données résidant sur bande

Dans cet exemple, deux ensembles de données séquentielles résidant sur des volumes de bande à 9 pistes sont comparés.

//TAPETAPE JOB  ...
//         EXEC PGM=IEBCOMPR
//SYSPRINT DD  SYSOUT=A
//SYSUT1   DD  DSNAME=SET1,UNIT=tape,LABEL=(,NL),
//             DCB=(RECFM=FB,LRECL=80,BLKSIZE=2000),
//             DISP=(OLD,KEEP),VOLUME=SER=001234
//SYSUT2   DD  DSNAME=SET2,UNIT=tape,LABEL=(,NL),
//             DCB=(RECFM=FB,LRECL=80,BLKSIZE=1040),
//             DISP=(OLD,KEEP),VOLUME=SER=001235
//SYSIN    DD  DUMMY
/*

Les instructions de contrôle de travail sont décrites comme suit :

  • SYSUT1 DD définit un ensemble de données d’entrée (SET1), qui réside sur un volume de bande 9 pistes sans étiquette.
  • SYSUT2 DD définit un ensemble de données d’entrée (SET2), qui réside sur un volume de bande 9 pistes sans étiquette.
  • SYSIN DD définit un jeu de données factice.
    Étant donné qu’aucune routine utilisateur n’est utilisée et que les ensembles de données d’entrée ont une organisation séquentielle, les instructions de contrôle de l’utilitaire ne sont pas nécessaires.

Exemple 2 : Comparer des ensembles de données séquentielles résidant sur bande

Dans cet exemple, deux ensembles de données séquentielles résidant sur des volumes de bande à 7 pistes sont comparés.

//TAPETAPE JOB  ...
//         EXEC PGM=IEBCOMPR
//SYSPRINT DD  SYSOUT=A
//SYSUT1   DD  DSNAME=SET1,LABEL=(2,SUL),DISP=(OLD,KEEP),
//             VOL=SER=001234,DCB=(DEN=2,RECFM=FB,LRECL=80,
//             BLKSIZE=2000,TRTCH=C),UNIT=tape
//SYSUT2   DD  DSNAME=SET2,LABEL=(,SUL),DISP=(OLD,KEEP),
//             VOL=SER=001235,DCB=(DEN=2,RECFM=FB,LRECL=80,
//             BLKSIZE=2000,TRTCH=C),UNIT=tape
//SYSIN    DD  *
        COMPARE  TYPORG=PS
         LABELS  DATA=ONLY
/*

Les instructions de contrôle sont discutées comme suit
 :

  • SYSUT1 DD définit un ensemble de données d’entrée, SET1, qui réside sur un volume de bande étiqueté à 7 pistes.
    L’ensemble de données bloqué a été initialement écrit à une densité de 800 bits par pouce (DEN=2) avec le convertisseur de données activé (TRTCH=C).
  • SYSUT2 DD définit un jeu de données d’entrée, SET2, qui est le premier ou le seul jeu de données sur un volume de bande étiqueté à 7 pistes.
    L’ensemble de données bloqué a été initialement écrit à une densité de 800 bits par pouce (DEN=2) avec le convertisseur de données activé (TRTCH=C).
  • SYSIN DD définit l’ensemble de données de contrôle, qui suit dans le flux d’entrée.
  • COMPARE TYPORG=PS spécifie que les ensembles de données d’entrée sont organisés de manière séquentielle.
  • LABELS DATA=ONLY spécifie que les étiquettes d’en-tête utilisateur doivent être traitées comme des données et comparées.
    Toutes les autres étiquettes sur la bande sont ignorées.

Exemple 3 : Comparer des ensembles de données séquentiels écrits à différentes densités

Dans cet exemple, deux ensembles de données séquentielles qui ont été écrites à des densités différentes sur différentes unités de bande sont comparées.

//TAPETAPE JOB  ...
//         EXEC PGM=IEBCOMPR
//SYSPRINT DD  SYSOUT=A
//SYSUT1   DD  DSNAME=SET1,LABEL=(,SUL),DISP=(OLD,KEEP),
//             VOL=SER=001234,DCB=(DEN=1,RECFM=FB,LRECL=80,
//             BLKSIZE=320,TRTCH=C),UNIT=tape
//SYSUT2   DD  DSNAME=SET2,LABEL=(,SUL),DISP=(OLD,KEEP),
//             DCB=(RECFM=FB,LRECL=80,BLKSIZE=640),
//             UNIT=tape,VOLUME=SER=001235
//SYSIN    DD  *
        COMPARE  TYPORG=PS
          EXITS  INHDR=HDRS,INTLR=TLRS
         LABELS  DATA=NO
/*

Les instructions de contrôle sont discutées comme suit :

  • SYSUT1 DD définit un jeu de données d’entrée, SET1, qui est le premier ou le seul jeu de données sur un volume de bande étiqueté à 7 pistes.
    L’ensemble de données bloqué a été initialement écrit à une densité de 556 bits par pouce (DEN=1) avec le convertisseur de données activé (TRTCH=C).
  • SYSUT2 DD définit un ensemble de données d’entrée, SET2, qui est le premier ou le seul ensemble de données bloquées sur un volume de bande étiqueté.
    Dans cet exemple, supposons que SYSUT2 se trouve sur un lecteur de bande à 9 pistes.
  • SYSIN DD définit l’ensemble de données de contrôle, qui suit dans le flux d’entrée.
  • COMPARE TYPORG=PS spécifie que les ensembles de données d’entrée sont organisés de manière séquentielle.
  • EXITS identifie les noms des routines à utiliser pour traiter les étiquettes d’en-tête d’entrée utilisateur et les étiquettes de fin.
  • LABELS DATA=NO spécifie que les étiquettes d’en-tête et de fin d’entrée utilisateur pour chaque ensemble de données ne doivent pas être comparées.

Exemple 4 : Comparer des ensembles de données séquentiels – Flux d’entrée et entrée de bande

Dans cet exemple, deux ensembles de données séquentiels (flux d’entrée et bande) sont comparés.

//CARDTAPE JOB  ...
//         EXEC PGM=IEBCOMPR
//SYSPRINT DD  SYSOUT=A
//SYSIN    DD  DUMMY
//SYSUT2   DD  UNIT=tape,VOLUME=SER=001234,LABEL=(,NL),
//             DCB=(RECFM=FB,LRECL=80,BLKSIZE=2000),
//             DISP=(OLD,KEEP)
//SYSUT1   DD  DATA
 
  (jeu de données d'entrée)
 
/*

Les instructions de contrôle sont décrites comme suit :

  • SYSIN DD définit un jeu de données de contrôle factice.
    Étant donné qu’aucune routine utilisateur n’est fournie et que les ensembles de données d’entrée sont séquentiels, les instructions de contrôle de l’utilitaire ne sont pas nécessaires.
  • SYSUT2 DD définit un ensemble de données d’entrée, qui réside sur un volume de bande sans étiquette.
  • SYSUT1 DD définit un ensemble de données de flux d’entrée système.

Exemple 5 : Copier et comparer un jeu de données séquentiel en deux step de job

Dans cet exemple, un jeu de données séquentiel sur disque ou sur bande est copié et comparé en deux step de job.

//TAPETAPE JOB  ...
//STEPA    EXEC PGM=IEBGENER
//SYSPRINT DD  SYSOUT=A
//SYSUT1   DD  DSN=WAREHOUS.COPYSET1,DISP=(OLD,PASS),
//SYSUT2   DD  DSNAME=WAREHOUS.COPYSET2,DISP=(,PASS),LABEL=(,SL),
//             DCB=(RECFM=FB,LRECL=80,BLKSIZE=640),
//             UNIT=tape,VOLUME=SER=001235
//SYSIN    DD  DUMMY
//STEPB    EXEC PGM=IEBCOMPR
//SYSPRINT DD  SYSOUT=A
//SYSUT1   DD  DSNAME=*.STEPA.SYSUT1,DISP=(OLD,KEEP)
//SYSUT2   DD  DSNAME=*.STEPA.SYSUT2,DISP=(OLD,KEEP)
//SYSIN    DD  DUMMY

Le premier step de job copie l’ensemble de données et transmet les ensembles de données d’origine et copiés au deuxième step de job.
Le deuxième step de job compare les deux ensembles de données.

Les instructions de contrôle pour le step de job IEBCOMPR sont présentées comme suit :

  • SYSUT1 DD définit un ensemble de données d’entrée transmis à partir du step de job précédent (COPYSET1).
    L’ensemble de données réside sur un volume de bande étiqueté.
  • SYSUT2 DD définit un ensemble de données d’entrée transmis à partir du step de job précédent (COPYSET2).
    L’ensemble de données, qui a été créé au step de job précédent, réside sur un volume de bande étiqueté.
  • SYSIN DD définit un jeu de données de contrôle factice.
    Etant donné que l’entrée est séquentielle et qu’aucun exit utilisateur n’est fourni, aucune instruction de contrôle d’utilitaire n’est requise.

Exemple 6 : Comparer deux ensembles de données partitionnés

Dans cet exemple, deux ensembles de données partitionnés sont comparés.

//DISKDISK JOB  ...
//STEP1    EXEC PGM=IEBCOMPR
//SYSPRINT DD  SYSOUT=A
//SYSUT1   DD  DSNAME=PDSSET1,UNIT=disk,DISP=SHR,
//             DCB=(RECFM=FB,LRECL=80,BLKSIZE=2000),
//             VOLUME=SER=111112
//SYSUT2   DD  DSNAME=PDSSET2,UNIT=disk,DISP=SHR,
//             DCB=(RECFM=FB,LRECL=80,BLKSIZE=2000),
//             VOLUME=SER=111113
//SYSIN    DD  *
      COMPARE  TYPORG=PO
/*

Les instructions de contrôle sont décrites comme suit : 

  • SYSUT1 DD définit un ensemble de données partitionnées en entrée, PDSSET1.
    L’ensemble de données bloqué réside sur un volume de disque.
  • SYSUT2 DD définit un ensemble de données partitionnées en entrée, PDSSET2.
    L’ensemble de données bloqué réside sur un volume de disque.
  • SYSIN DD définit l’ensemble de données de contrôle, qui suit dans le flux d’entrée.
  • COMPARE TYPORG=PO indique que les ensembles de données d’entrée sont partitionnés.

Exemple 7 : Copier et comparer un ensemble de données partitionné en deux step de job

Dans cet exemple, un ensemble de données partitionné est copié et comparé en deux step de job.

//DISKDISK JOB  ...
//STEPA    EXEC PGM=IEBCOPY
//SYSPRINT DD  SYSOUT=A
//SYSUT1   DD  DSNAME=MAINDB.LOG.OLDSET,DISP=SHR
//SYSUT2   DD  DSNAME=NEWMEMS,UNIT=disk,DISP=(,PASS),
//             VOLUME=SER=111113,SPACE=(TRK,(5,5,5)),
//             DCB=(RECFM=FB,LRECL=80,BLKSIZE=640)
//SYSUT3   DD  UNIT=SYSDA,SPACE=(TRK,(1))
//SYSUT4   DD  UNIT=SYSDA,SPACE=(TRK,(1))
//SYSIN    DD  *
       COPY OUTDD=SYSUT2,INDD=SYSUT1
       SELECT MEMBER=(A,B,D,E,F)
/*
//STEPB    EXEC PGM=IEBCOMPR
//SYSPRINT DD  SYSOUT=A
//SYSUT1   DD  DSNAME=OLDSET,DISP=(OLD,KEEP)
//SYSUT2   DD  DSNAME=NEWMEMS,DISP=(OLD,KEEP)
//SYSIN    DD  *
       COMPARE TYPORG=PO
       EXITS ERROR=SEEERROR
/*

Le premier step de job copie l’ensemble de données et transmet les ensembles de données d’origine et copiés au deuxième step de job.
Le deuxième step de job compare les deux ensembles de données.

Les instructions de contrôle pour l’étape de travail IEBCOMPR sont abordées comme suit :

  • SYSUT1 DD définit un ensemble de données d’entrée bloquées (MAINDB.LOG.OLDSET) transmis à partir du step précédent.
    L’ensemble de données réside sur un volume de disque ou de bande.
  • SYSUT2 DD définit un ensemble de données d’entrée bloquées (MAINDB.LOG.NEWMEMS) transmis à partir du step précédent.
    L’ensemble de données réside sur un volume de disque.
  • SYSIN DD définit l’ensemble de données de contrôle, qui suit dans le flux d’entrée.
  • COMPARE TYPORG=PO spécifie une organisation partitionnée.
  • EXITS spécifie qu’une routine d’erreur utilisateur, SEEERROR, doit être utilisée.

Étant donné que les noms des ensembles de données d’entrée ne sont pas identiques, les ensembles de données peuvent être récupérés par leurs noms d’ensemble de données.

Exemple 8 : Comparer deux PDSE

Dans cet exemple, deux PDSE sont comparés.

//DISKDISK  JOB ...
//          EXEC PGM=IEBCOMPR
//SYSPRINT  DD  SYSOUT=A
//SYSUT1    DD  DSN=PDSE1,DISP=SHR
//SYSUT2    DD  DSN=PDSE2,DISP=SHR
//SYSIN     DD  *
            COMPARE TYPORG=PO
/*

Les PDSE ne doivent plus être gérés par SMS.
Étant donné que ces PDSE sont catalogués, vous n’avez pas besoin de spécifier les paramètres UNIT ou VOLUME.

Les instructions de contrôle sont décrites comme suit :

  • SYSUT1 DD et SYSUT2 DD définissent les PDSE d’entrée, PDSE1 et PDSE2.
    Étant donné qu’aucune valeur DCB n’est spécifiée, les valeurs DCB qui ont été spécifiées lors de la création des ensembles de données seront utilisées.
  • SYSIN DD définit l’ensemble de données de contrôle, qui suit dans le flux d’entrée.
  • COMPARE TYPORG=PO indique que les ensembles de données d’entrée sont des PDSE.

JCL – IDCAMS

Utiliser les services de méthode d’accès aux catalogues d’ IDCAMS:

  • Gestion des données et du stockage sur z/OS
  • Bien qu’il fournisse d’autres fonctions, IDCAMS, qui est le nom du programme pour les services de méthode d’accès, est principalement utilisé pour définir et gérer les ensembles de données VSAM et les catalogues d’installations de catalogue intégré.
  • Une méthode d’accès définit la technique utilisée pour stocker et récupérer des données.
    Les méthodes d’accès ont leurs propres structures d’ensembles de données pour organiser les données, des programmes (ou macros) fournis par le système pour définir les ensembles de données et des programmes utilitaires pour traiter les ensembles de données.
    VSAM (Virtual Sequential Access Method) est une méthode d’accès utilisée pour des applications plus complexes.
    VSAM organise les enregistrements selon une clé d’index, un numéro d’enregistrement relatif ou un adressage d’octet relatif.
  • Certains utilisateurs prononcent le nom de ce programme comme “id-cams” (deux syllabes) tandis que d’autres disent “ID-cams” (trois syllabes).
  • Les services de méthode d’accès, également connus sous le nom d’IDCAMS, créent et maintiennent des ensembles de données VSAM.
  • Avec les services de méthode d’accès, vous pouvez effectuer les tâches suivantes :
    1. Définissez les jeux de données VSAM.
    2. Définir et créer des index alternatifs.
    3. Sauvegardez et restaurez les ensembles de données VSAM.
    4. Copiez les ensembles de données.
    5. Imprimer le contenu des jeux de données.
    6. Supprimer des ensembles de données.
    7. Recueillir des informations sur les ensembles de données.
    8. Examinez la cohérence structurelle des jeux de données séquencés par clé VSAM.
    9. Contrôlez le cache DASD.
    10. Répertorier les entrées du catalogue de volumes de bandes (VOLCAT).
    11. Diagnostiquer les erreurs de catalogue.
    12. Récupérer des erreurs de catalogue.
    13. Définissez des bibliothèques et des volumes gérés par le système.
    14. Définissez l’adressabilité étendue pour un ensemble de données VSAM au format étendu afin de prendre en charge une taille d’ensemble de données supérieure à 4 Go.
    15. Crypter et décrypter les ensembles de données.
  • Vous pouvez également définir des jeux de données VSAM à l’aide de JCL ou de macros d’allocation dynamique.

Un exemple typique d’utilisation simple d’IDCAMS est le suivant :

//VDFNDEL  JOB 1,LINDAJO,MSGCLASS=X
//STEP1    EXEC PGM=IDCAMS
//SYSPRINT DD *
//DATAIN   DD DISP=OLD,DSN=LCDC.SORTOUT
//SYSIN    DD *
 DEFINE CLUSTER (NAME (LCDC.DATA.VSAM) -
 VOLUMES(WORK02) CYLINDERS(1 1) -
 RECORDSIZE (72 100) KEYS(9 8) INDEXED)
 REPRO INFILE(DATAIN) OUTDATASET(LCDC.DATA.VSAM) ELIMIT(200)
/*
//STEP2    EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN    DD *
 DELETE LCDC.DATA.VSAM CLUSTER
/*

Cet exemple de job, nommé VDFNDEL, se compose de deux steps:
– une pour définir un ensemble de données VSAM ; 
– l’autre pour le supprimer.

La première étape, STEP1 remplit deux fonctions :

  1. Crée un ensemble de données VSAM via la commande DEFINE CLUSTER.
    Notez qu’IDCAMS utilise l’allocation dynamique pour créer le JCL nécessaire pour ce nouvel ensemble de données, de sorte que l’exemple n’inclut pas d’instruction DD pour le nouvel ensemble de données.
    • La commande DEFINE CLUSTER se poursuit sur trois enregistrements ; les indicateurs de continuation sont des traits d’union.
    • L’ensemble de données VSAM se trouve sur le volume WORK02 et utilise un cylindre pour l’espace principal et un cylindre pour l’allocation secondaire.
      La taille d’enregistrement moyenne est de 72 octets et la taille d’enregistrement maximale est de 100 octets.
      (Les ensembles de données VSAM utilisent toujours des enregistrements de longueur variable.)
      La clé primaire (pour accéder aux enregistrements dans l’ensemble de données) a une longueur de 8 octets et commence à un décalage de 9 octets dans chaque enregistrement.
    • Les enregistrements permettant de charger un ensemble de données VSAM de cette manière doivent déjà être triés par ordre de clé.
    • Le paramètre ELIMIT spécifie le nombre d’enregistrements d’erreurs que REPRO ignorera avant de terminer l’opération.
      Un enregistrement d’erreur est généralement dû à une valeur de clé en double.
  2. Charge le nouveau jeu de données via la commande REPRO.
    L’entrée chargée dans le nouvel ensemble de données provient d’un ensemble de données séquentielles, qui est identifié par l’instruction DATAIN DD.

La deuxième étape, STEP2, supprime l’ensemble de données qui est créé STEP1.
De nombreuses fonctions IDCAMS peuvent être saisies en tant que commandes TSO.
Par exemple, DEFINE CLUSTER peut être utilisé comme commande TSO.
Cependant, l’utilisation d’IDCAMS de cette manière n’est généralement pas recommandée car ces commandes peuvent être complexes et les erreurs rencontrées peuvent être complexes.
La saisie des commandes IDCAMS via un job par lots permet de revoir les commandes et les messages résultants aussi souvent que nécessaire en utilisant SDSF pour afficher la sortie.

JCL – Programmes utilitaires

Utilitaires d’ensemble de données IBM

Les programmes utilitaires sont des programmes pré-écrits, largement utilisés dans les mainframes par les programmeurs système et les développeurs d’applications pour répondre aux exigences quotidiennes, organiser et maintenir les données. Quelques-uns d’entre eux sont listés ci-dessous avec leurs fonctionnalités :

Nom de l’utilitaireFonctionnalité
IEHMOVEDéplace ou copie des jeux de données séquentiels.
IEHPROGMSupprimer et renommer des ensembles de données ; cataloguer ou décataloguer des ensembles de données autres que VSAM.<
IEHCOMPRCompare les données dans des ensembles de données séquentiels.
IEBCOPYCopiez, fusionnez, compressez, sauvegardez ou restaurez le PDS.
IEFBR14Aucun utilitaire d’opération. Utilisé pour rendre le contrôle à l’utilisateur et terminer.
Il est généralement utilisé pour créer un jeu de données vide ou supprimer un jeu de données existant.
Par exemple, si un jeu de données est passé en entrée à un programme IEFBR14 avec DISP=(OLD,DELETE,DELETE), le jeu de données est supprimé à la fin du travail.
IEBEDITUtilisé pour copier des parties sélectionnées d’un JCL.
Par exemple, si un JCL comporte 5 étapes et que nous devons exécuter les étapes 1 et 3 uniquement, un JCL IEBEDIT peut être codé avec un jeu de données qui contient le JCL réel à exécuter.
Dans le SYSIN d’IEBEDIT, nous pouvons spécifier STEP1 et STEP3 comme paramètres.
Lorsque ce JCL est exécuté, il exécute les STEP1 et STEP3 du JCL réel.
IDCAMCréer, supprimer, renommer, cataloguer, décataloguer des ensembles de données (autres que PDS).
Généralement utilisé pour gérer les ensembles de données VSAM.
IEBDGProgramme de générateur de données de test
IEBGENERProgramme séquentiel de copie/génération d’ensemble de données
IEBIMAGECréer un programme d’image d’imprimante (print)
IEBPDSEProgramme de validation PDSE
IEBPTPCHProgramme d’impression-perforation
IEBUPDTEMettre à jour le programme d’ensemble de données
IEHINITTInitialiser le programme de bande
IEHLISTLister le programme de données système
IFHSTATRListe des programmes de données ESV

Ces programmes utilitaires doivent être utilisés avec les instructions DD appropriées dans un JCL afin d’obtenir la fonctionnalité spécifiée.

JCL – Exécution de programme COBOL

Ci-dessous un exemple JCL où le programme MYPROG est exécuté à l’aide du fichier d’entrée MYDATA.LCDC.INPUT et produit deux fichiers de sortie écrits dans le spool.

//COBBSTEP  JOB CLASS=6,NOTIFY=&SYSUID
//
//STEP10    EXEC PGM=MYPROG,PARM=ACCT5000
//STEPLIB   DD DSN=MYDATA.LCDC.LOADLIB,DISP=SHR
//INPUT1    DD DSN=MYDATA.LCDC.INPUT,DISP=SHR
//OUT1      DD SYSOUT=*
//OUT2      DD SYSOUT=*
//SYSIN     DD *
//CUST1     1000
//CUST2     1001
/*

Le module de chargement de MYPROG se trouve dans MYDATA.LCDC.LOADLIB.
Il est important de noter que le JCL ci-dessus ne peut être utilisé que pour un module COBOL non DB2.

Transmission de données aux programmes COBOL

L’entrée de données dans le programme batch COBOL peut se faire via des fichiers, le paramètre PARAM et l’instruction SYSIN DD. 

Dans l’exemple ci-dessus :

  • Les enregistrements de données sont transmis à MYPROG via le fichier MYDATA.LCDC.INPUT.
    Ce fichier sera référencé dans le programme en utilisant le nom DD INPUT1.
    Le fichier peut être ouvert, lu et fermé dans le programme.
  • Les données de paramètre PARM ACCT5000 sont reçues dans la section LINKAGE du programme MYPROG dans une variable définie dans cette section.
  • Les données de l’instruction SYSIN sont reçues via l’instruction ACCEPT dans la division PROCEDURE du programme.
    Chaque instruction ACCEPT lit un enregistrement entier (c’est-à-dire, CUST1 1000) dans une variable de stockage de travail définie dans le programme.

Exécution d’un programme COBOL-DB2

Pour exécuter le programme COBOL DB2, un utilitaire IBM spécialisé est utilisé dans le JCL et le programme ; La région DB2 et les paramètres requis sont transmis en entrée à l’utilitaire.

Les étapes ci-dessous sont suivies lors de l’exécution d’un programme COBOL-DB2 :

  • Lorsqu’un programme COBOL-DB2 est compilé, un DBRM (Database Request Module) est créé avec le module de chargement.
    Le DBRM contient les instructions SQL des programmes COBOL avec sa syntaxe vérifiée pour être correcte.
  • Le DBRM est lié à la région DB2 (environnement) dans laquelle le COBOL s’exécutera.
    Cela peut être fait à l’aide de l’utilitaire IKJEFT01 dans un JCL.
  • Après l’étape de liaison, le programme COBOL-DB2 est exécuté à l’aide de IKJEFT01 (à nouveau) avec la bibliothèque de chargement et la bibliothèque DBRM comme entrée du JCL.
//STEP001  EXEC PGM=IKJEFT01
//*
//STEPLIB  DD DSN=MYDATA.LCDC.DBRMLIB,DISP=SHR
//*
//input files
//output files
//SYSPRINT DD SYSOUT=*
//SYSABOUT DD SYSOUT=*
//SYSDBOUT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//DISPLAY  DD SYSOUT=*
//SYSOUT   DD SYSOUT=*
//SYSTSPRT DD SYSOUT=*
//SYSTSIN  DD *
    DSN SYSTEM(SSID)
    RUN PROGRAM(MYCOBB) PLAN(PLANNOM) PARM(paramètres du programme cobol) -
    LIB('MYDATA.LCDC.LOADLIB')
    END
/*

Dans l’exemple ci-dessus, MYCOBB est le programme COBOL-DB2 exécuté à l’aide de IKJEFT01. Veuillez noter que le nom du programme, l’ID du sous-système DB2 (SSID) et le nom du plan DB2 sont transmis dans l’instruction SYSTSIN DD. La bibliothèque DBRM est spécifiée dans la STEPLIB.