Tous les articles par Mr COBOL

00D700xx

00D70014   Limite des extends VSAM atteinte. Voir système pour REORG ou plus de place sur le volume.

00D70025   EXTEND FAILED, plus de place sur le volume.

00C9009x

00C90090  Le tablespace ou indexspace ne peut pas être starté car un start est en cours.

00C90091  Start impossible car il y a des THEADS INDOUBT. Prévenir le système.

00C90092  IRLM out-of-storage. Prévenir l’equipe système.

00C90093  Erreur IRLM.Prévenir le système.

00C90094  Le support VSAM est dans un etat autre que celui connu de DB2.Prévenir l’équipe système pour un RECOVER.

00C90095  DB2 en cours de RESTART et la page accédée n’est pas encore disponible.

00C90096  Nombre de verrous sur page ou subpage d’index dépasse le nb maxi pour un user.Patienter et recommencer.

00C90097  Tentative de mise à jour d’un tablespace marqué en FULL IMAGE COPY REQUIRED

00C90098  Limite du nombre d’utilisateurs atteint. Prévenir l’équipe système

00C90099  Load sur une partition pleine. Prévenir le système

00C9009A  Anomalie de migration de release DB2. A soumettre au système

00C9009B  Load sur un tablespace full. A soumettre au système

00C9009C  Insert sur une partition pleine. A soumettre au système

00C9009D  Insert sur un tablespace full. A soumettre au système

00C9008x

00C900EA  Tablespace en cours d’utilisation par un job

00C90080  Tentative de maj sur tablespace en Read Only (RO)

00C90081  Tentative d’accès sur tablespace stoppé

00C90082  Tentative d’accès sur tablespace utilisé par un utilitaire(UTUT)

00C90083  Tentative d’accès sur tablespace utilisé par un utilitaire(UTRO) accès autorisé en lecture seulement

00C90084  Problème d’accès aux Tablespaces temporaires de tri DB2

00C90085  Limite des tablespaces temporaires de tri de DB2

00C90086  Tentative d’accès sur TableSpace utilisé par un utilitaire et qui n’est autorisé que pour un utilitaire.

00C90087  Page cassée. Utilisez l’utilitaire REPAIR pour réparer la page cassée.

00C90088  Deadlock : attendre et relancer

00C90089  EDM POOL FULL.Voir équipe système

00C9008B  Limite du nombre de Bases définie atteinte.Voir Equipe système

00C9008C  Tentative d’accès à un tablespace partitionné alors que l’index de partionnnement n’est pas trouvé

00C9008D  même chose que 00C9008C

00C9008E  Time Out, le verrou ne peut pas être pris dans le délai normal prévu pour IRLM.Patienter et recommencer .

00C9008F  Taille limite de la base atteinte. Prévenir le système pour une REORG des TableSpaces de la base.

9. LES PROCEDURES

Une procédure est équivalent a un sous-programme de JCL que l’ont peut appeler par une carte EXEC. Elle s’utilise lors ce que noue avons dans le système un ensemble de carte de JCL, de Bibliothèque … suffisamment standard pour pouvoir être utilisé assez fréquemment dans des travaux différents. C’est le cas par exemple des compilations, des lancements de Logiciels transactionnels des SGBD (système de gestion de donnée).

9.1. Contenu d’une procédure

Une procédure peut contenir des cartes EXEC :

  • Une procédure ne peut appeler une autre procédure que depuis MVS/ESA SP4 (jusqu’à 15 niveaux)
  • Elle peut contenir des carte DD, qui représente des fichiers utilisés par la procédure, ainsi que des cartes IF,ELSE, END-IF
  • Elle ne peut contenir des Carte JOB, DDDATA, DD*
  • Elle peut contenir la carte PROC, la carte PEND est normalement réservée aux procédures IN STREAM, on peut cependant la coder dans une procédure cataloguée depuis MVS/ESA SP4.

9.2. Description schématique d’une procédure

//MYJOB    JOB
//STEP1    EXEC PROCD
//FICH     DD   DSB= ….
//STEP2    EXEC PGM=PROGRAM1

recherche de la procédure catalogué ==>

procédure
//PROCD    PROC
//STEPA    EXEC PGM=PGM1
//FICHENT1 DD   DSN= …
//FICHENT2 DD   DSN= …
//SYSOUT   DD   SYSOUT=*
//         PEND

//MYJOB       JOB
//STEPA       EXEC PGM=PGM1
//FICHENT1 DD     DSN= …
//FICHENT2 DD     DSN= …
//SYSOUT     DD     SYSOUT=*
//FICH        DD     DSB= ….
//STEP2       EXEC PGM=PROGRAM1

PROCD : marque le début de la procédure.
PEND : marque la fin de la procédure.

9.3. Types de procédures

IN STEREAM : utiliser lors de la création de la procédure. Contenue dans la carte JOB qui l’appelle. Ceci n’ayant d’intérêt que pendant la phase de test de la procédure. La procédure est délimitée par les cartes PROC et PEND.

CATALOGUED : il s’agit de procédure d’enregistrement définitivement la nouvelle procédure dans une ou plusieurs bibliothèques disponible pour tout le monde. La bibliothèque standard est la SYS1.PROCLIB.

Syntaxe :
//name JCLLIB ORDER=(nom_de_bibliotheque,
                     (nom_de_bibliotheque),….)

9.4. Création d’une procédure

La création ce fait au moyen d’un éditeur (exemple SPF) et consiste soit à créer et à tester une procédure IN STEREAM, puis à l’ajouter dans un membre de la bibliothèque des procédures, soit à créer directement le membre dans la bibliothèque puis à écrire directement le membre dans la bibliothèque puis écrire le JCL d’appel.

9.4.1. Procédure IN STERN

Le nom de la carte PROC détermine le nom de la procédure. On peut ensuite appeler cette procédure aussi souvent que nécessaire dans le même JOB.

Exemple :

//MYJOB    JOB …
//*_______________________________ PROCEDURE DEBUT
//MYPROC   PROC
//PROC1    EXEC PGM=PROGRA1
//STSOUT   DD   SYSOUT=*
//FICENTR1 DD   DSN=FIC1.ENTRE …
//FICSORT2 DD   DSN=FIC1.SORTI …
//PROC2    EXEC PGM=PROGRA2
//SYSOUT   DD   SYSOUT=*
// …
//         PEND
//*________________________________PROCEDURE FIN
//STEP1    EXEC PGM=PROGRAM3
// …

9.4.2. Procédure cataloguée

Contenu de la procédure cataloguée par exemple dans SYS1.PROCLIB :

//MYPROC  PROC
//PROC1   EXEC PGM=PGM1
//SYSOUT  DD   SYSOUT=*
//FICENTR DD   DSN=FIC.ENTRE1 …
//FICSOR  DD   DSN=FIC.SORTI1 …
//PROC2   EXEC PGM=PGM2
//SYSOUT  DD   SYSOUT=*
// …

Le nom de la procédure est donné par le nom du membre qui la contient, et non pas par le nom de la carte PROC. Si la carte PROC ne contient pas de paramètre, elle est facultative, ce qui est le cas de cet exemple.

Appel de la procédure :
//MYJOB JOB …
//STEP1 EXEC MYPROC
// …

9.5. Utilisation d’une procédure

Une procédure est un JCL standardisé, elle ne peut prendre en compte à priori les cas particuliers de tous les utilisateurs. Elle doit donc être donc paramétrable. On sera amené à apporter dynamiquement des modifications au moment de l’appel :
– Modification des cartes EXEC.
– Modification des cartes DD.
– Définition de variables avec valeurs par défaut ou imposées au moment de l’appel.

Lors de l’appel d’une procédure, l’interpréteur recherchera la procédure dans la bibliothèque système ou utilisateur (carte JCLLIB), la fusionnera avec le JCL d’appel et procédera aux modifications demandées par l’appel. Dans le compte rendu d’exécution, on pourra visualiser le résultat de cette fusion dans la mesure où l’on aura codé MSGLEVEL=(1, … )dans la carte JOB.
Distinction entre les différents types de cartes dans la partie JCL IMAGE du compte rendu d’exécution du JOB :

  • Hors procédure :
    //         ==> Carte du JCL d’origine
  • dans une procédure cataloguée :
    XX      ==> Carte de procédure non modifiée.
    X/        ==> Carte de procédure modifiée.
    //          ==> carte ajoutée à la procédure.
  • Dans une procédure IN STREAM :
    ++      ==> carte de procédure non modifiée
    +/       ==>   carte de procédure modifiée
    //         ==> carte ajoutée à la procédure

9.6. Modification des cartes EXEC

Pour l’ensemble des cartes EXEC de la procédure, les modifications se font dans la carte EXEC d’appel. On peut ajouter, modifier ou supprimer des paramètres (sauf le nom du PGM à exécuter).

La syntaxe générale est la suivante :
Paramètre.(PROCSTEP)=Valeur

PROCSTEP est le nom de l’étape de procédure dans la quelle on veut agir. S’il est omis, le paramètre sera valable pour toutes les étapes de la procédure.

Exemple :
//STEP1 EXEC MYPROC,COD.ET1=O,NE),
//      TIME.ET2=(,5)

Règles :
Bien que l’on puisse imbriquer jusqu’à 15 niveau de procédure depuis MVS/ESA SP4, on ne peut pas paramétrer que le premier niveau.

  • Les paramètres à modifier doivent respecter l’ordre suivant :
    1. D’abord les paramètres s’appliquant à toutes les étapes
    2. Puis ceux qui modifient une étape particulière, dans l’ordre des étapes.
  • Ajout : on code le paramètre, l’étape, la valeur. L’interpréteur ajoute ce paramètre s’il n’existe pas déjà dans l’étape.
  • Modification : On code le paramètre, l’étape, la valeur. L’interpréteur attribue la nouvelle valeur au paramètre s’il existe déjà, sinon il procède à un ajout.
  • Suppression : On code le paramètre, l’étape, mais pas la valeur. Si ce paramètre existe dans l’étape, l’interpréteur le supprime, sinon il ne fait rien.

Exemple :
Soit la procédure suivante :
//S1      EXEC     PGM=MYPROG,PARM=’TOTO’

//S2      EXEC     PGM=PROG2,TIME=1
.. et l’appel de la procédure :
//STEP1   EXEC     MYPROC,COND.S1=(0,NE),
//        PARM.S1=,TIME.S2=(,5)
… Qui apporte les modifications suivantes :
    • Ajout de COND dans l’étape S1
    • Suppression de PARM dans l’étape S1.
    • Modification de TIME dans S2.
X/S1      EXEC     PGM=MYPROG,COND=(0,NE)

X/S2      EXEC     PGM=PROG2,TIME=(,5)

9.7. Modification des cartes DD

Se font par l’intermédiaire de cartes DD code dans le JCL d’appel. On peut ajouter ou supprimer des cartes DD.

Syntaxe générale :
//PROCSTEP.DDNAME DD

procstep est le nom d’étape de la procédure que l’on veut modifier.

Règles : bien que l’on imbrique 15 niveau de procédure depuis MVS/ESA SP4, on ne peut paramétrer que le premier niveau.
Bien que l’on puisse imbriquer jusqu’à 15 niveau de procédure depuis MVS/ESA SP4, on ne peut paramétrer que le premier niveau.

  • Les cartes DD doivent respecter un certain ordre :
    • On doit aller dans l’ordre des étapes de la procédure,
    • Pour une étape donnée, on doit d’abord trouver les cartes DD qui modifient des cartes DD présentes dans la procédure, puis les cartes DD ajoutées à la procédure.
  • Si on omet le nom de l’étape devant le ddname, la carte sera ajoutée à la dernière étape que l’on a nommée (la première, si aucune étape n’est nommée).
  • Ajout : si la carte codée dans le JCL d’appel n’existe pas, elle est ajoutée dans l’étape concernée de la procédure. Si d’autres cartes DD de cette étape ont été modifiées, elles doivent précéder les cartes ajoutées.
  • Modification : si la carte codée dans le JCL d’appel existe dans la procédure, ses paramètres sont modifiés en fonction des règles suivantes :
    • Si un paramètre codé n’existait pas, il est ajouté.
    • Si un paramètre existe existait déjà, il est modifié.
    • Si un paramètre est codé sans valeur, il est supprimé.
    • Si un paramètre existant n’est pas recodé, il est conservé.
  • Suppression de tous les paramètres sauf le DCB : On code la carte avec le paramètre DUMMY
Exemple :
//S1     EXEC PGM=PROG1
//SYSOUT DD   SYSOUT=*
//FICENT DD   DSN=I00020.FICENT,DISP=SHR
//S2     EXEC PGM=PROGRAM2
//SYSOUT DD   SYSOUT=*
//IMPRIM DD   SYSOUT=,copies=2 

… et appel de la procedure

//STEP1     EXEC MYPROC
//S1.FICENT DD   DISP=OLD
//S1.FICSOR DD   DSN= I00020.FICENT,DISP=SHR
//               UNIT=SYSDA,SPACE=(TRK,10),
//               DCB=BLKSIZE=120
//S2.IMPRIM DD   SYSOUT=A,OUTLIM=1000,COPIES=
                                             modif           Ajout                   suppression

Entraîne les modifications suivantes (extrait du JCL image) :

//SEP1      EXEC MYPROC
XXS1        EXEC PGM=PROG1
XXSYSOUT    DD   SYSOUT=
X/S1.FICENT DD   DSN= I00020.FICENT,DISP=OLD
//S1.FICSOR DD   DSN= I00020.FICENT,DISP=SHR
//               UNIT=SYSDA,SPACE=(TRK,10),
//               DCB=BLKSIZE=120
XXS2        EXEC PGM=PROGRAM2
XXSYSOUT    DD   SYSOUT=*
X/S2.IMPRIM DD   SYSOUT=A,OUTLIM=1000

                                             Modif           Ajout

Cas particulier des fichiers concaténés :
Il doit y avoir autant de cartes DD dans le JCL d’appel que dans l’étape de la procédure. Les cartes doivent apparaître dans le même ordre.
Pour modifier un paramètre, on le code dans la carte DD correspondante.
Si aucun paramètre ne doit être changé dans une carte, on code cette carte sans paramètre.

Exemples :
Dans la procédure PROCA :

//SX     EXEC …
//DD1    DD   DNS=LOAD.LOAD1,DISP=SHR
//       DD   DNS=LOAD.LOAD3,DISP=SHR
//       DD   DNS=LOAD.LOAD2,DISP=SHR

            1- Dans le JCL d’appel de la procédure :

//STEPA  EXEC PROCA
//SX.DD1 DD   DSN=I0004.PROJ1,DISP=SHR
            On trouvera dans le JCL image :
X/SX.DD1 DD   DSN=I0004.PROJ1,DISP=SHR
X/       DD   DNS=LOAD.LOAD3,DISP=SHR
X/       DD   DNS=LOAD.LOAD2,DISP=SHR

            2- Dans le JCL d’appel de la procédure :

//STEPA  EXEC PROCA
//SX.DD1 DD   DSN=I0004.PROJ1,DISP=SHR
//         DD   DSN=I0004.PROJ2,DISP=SHR
            On trouve dans le JCL image
X/SXDD1  DD   DSN=I0004.PROJ1,DISP=SHR
//         DD   DSN=I0004.PROJ2,DISP=SHR
//         DD   DSN=LOAD.LOAD2,DISP=SHR

            3- Dans le JCL d’appel de la procédure :

//STEPA  EXEC PROCA
//SXDD1  DD DSN=I0004.PROJ1,DISP=SHR
//         DD DSN=I0004.PROJ2,DISP=SHR
            On trouve dans le JCL image
//SXDD1  DD DSN=I0004.PROJ1,DISP=SHR
//         DD DNS=LOAD.LOAD3,DISP=SHR
//         DD DSN=I0004.PROJ2,DISP=SHR

9.8. Définition de variables symboliques

9.8.1. Codage des variables

Dans une procédure, il est possible de remplacer les valeurs fixes attribuées aux paramètres par des noms de variables symboliques.
Cela augmente la souplesse d’utilisation des procédures que l’on peut alors modifier simplement en changeant les valeurs attribuées aux variables symboliques.

Une variable s’écrit sous la forme :

Paramètre =&nom

Le & permet à l’interpréteur de différencier les variables des valeurs attribuées aux paramètres ordinaires. Pour attribuer une valeur à une variable, on code son nom sans le &.Ceci peut être fait soit au niveau de la carte EXEC d’appel de la procédure, soit au niveau de la carte PROC (facultative pour les procédures cataloguées, obligatoire pour les procédures instream).
La valeur est alors attribuée à toutes les occurrences de la variable symbolique.

9.8.2. Variable par défaut

La carte PROC permet d’attribuer des valeurs par défaut aux variables de la procédure.

//MYPROC PROC 
 DUREE=’(,2)’,FIC=TOTO,DISPO=SHR,VERS=M0000,
//  
           APPLI=COMM,AA=95,QQQ=312
//STEP1  EXEC PGM=PROGRAM1,TIME=&DUREE,PARM=’&AA&QQQ’
//FIC1  
        DD DSN=&FIC,DISP=&DISPO
//FIC2  
        DD DSN=&APPLI..&VERS,
//  
           DISP=(NEW,ATALG,DELETE), …

Attention : Le double point précédant &VERS est indispensable pour séparer deux variables dans un nom de fichier.

9.8.3. Attribution dynamique de valeurs

On attribue les valeurs aux variables, dynamiquement lors de l’exécution de la procédure, en codant les paramètres au niveau de la carte EXEC d’appel. Les valeurs attribuées ainsi remplacent les valeurs codées sur la carte PROC.

Exemple :
Carte d’appel pour la procédure ci-dessus :

//STEP1 EXEC MYPROC,DUREE=1,FIC=’STOCK.DONNEE’,
//             APPLI=COMM,VERS=DU280571

L’interpréteur attribuera une durée de une minute et utilisera les fichiers STOCK.DONNEE et COMM.DU280571. :

//STEP1 EXEC PROG=PROGRAM1,TIME=1,PARM=’95312’
//FIC1  DD   DSN=STOCK.DONNEE,DISP=SHR
//FIC2  DD   DSN=COMM.DU280571,DISP=(NEW,CATLG,DELETE), ..

Remarque : L’attribution dynamique de valeurs à des variables peut également se faire directement dans le JCL, sans avoir à faire appel a une procédure, à l’aide de la carte SET.

Exemple :

//I000AA JOB …..
//       SET  NOMFIC=’GOR.RESU456.ED56’,IMPR=’RMT231’
//EDIT   EXEC PGM=EDITION
//ETAT   DD   DSN=&NOMFIC,DISP=SHR
//SORTIE DD   SYSOUT=A,DEST=&IMPR

Le JCL soumis sera :

//I000AA JOB …..
//       SET  NOMFIC=’GOR.RESU456.ED56’,IMPR=’RMT231’
//EDIT   EXEC PGM=EDITION
//ETAT   DD    DSN=GOR.RESU456.ED56,DISP=SHR
//SORTIE DD    SYSOUT=A,DEST=RMT231

8. CARTE OUTPUT

Cette carte permet de définir des caractéristiques communes à plusieurs fichiers sysout d’un JOB. Elle s’utilise en association avec le paramètre OUTPUT de la carte DD.

Format :

//nom OUTPUT CLASS=classe/*
             ,COPIES=nnn
             ,DEFAULT=YES/NO
             ,FORMS=code papier
             ,FCB=
             ,UCS=
             ,DEST=
             ,BURST=
             ,CHARS=
             ,FLASH=

CLASS : Donne une classe de sortie pour le ou les fichiers SYSOUT associés à la carte OUTPUT.
COPIES : même signification que dans la carte DD.
DEFAULT :
YES : Toutes les carte DD définissant des ficher SYSOUT et ne possédant pas le paramètre OUTPUT seront associées à cette carte OUTPUT.
NO : pas d’association implicite.
DEST : identique que la description de la carte DD.
FCB : identique que la description de la carte DD.
UCS : identique que la description de la carte DD.
BURST : identique que la description de la carte DD.
CHARS : identique que la description de la carte DD.
FLASH : identique que la description de la carte DD.
FORMS : Code papier à utiliser pour l’impression.

Exemple :
//JOB1 JOB
//OUT1 OUTPUT CLASS=Z,COPIES=2,DEST=RMT1
//OUT2 OUTPUT CLASS=Y,COPIES=3,DEST=RMT3
//OUT3 OUTPUT CLASS=P,COPIES=1,DEFAULT=YES

//STEP1 EXEC PGM=PGM1
//IMP1 DD SYSOUT=(,),OUTPUT=(.OUT1,.OUT2)

//STEP2 EXEC PGM=PGM2
//IMP2 DD SYSOUT=(,),OUTPUT=*.OUT1

//STEP3 EXEC PGM=PGM3
//IMP3 DD SYSOUT=(,),HOLD=YES

7. CONCATÉNATION DE FICHIERS

La concaténation permet de définir plusieurs fichiers d’une étape sous un même DDNAME.
Elle n’est utilisable que pour des fichiers en lecture contenant le même type d’informations.
La lecture ce fait en séquence dans l’ordre de présentation des fichiers. On peut concaténer jusqu’à 255 fichiers.

Exemple :
Définition de plusieurs bibliothèques de LOAD modules sous les mêmes JOBLIB.
//JOB1   JOB
//JOBLIB DD DSN=BIB.LOAD1,DISP=SHR
//       DD DSN=BIB.LOAD2,DISP=SHR
//       DD DSN=BIB.LOAD2,DISP=SHR
//       DD DSN=BIB.LOAD2,DISP=SHR
//STEP1 EXEC PGM=PROG1

Définition des fichiers d’entrée du tri
//JOB1   JOB
//STEP1  EXEC PGM=SORT
//SORTIN DD DSN=FIC.TRI1,DISP=SHR
//       DD DSN=FIC.TRI2,DISP=SHR
//       DD DSN=FIC.TRI3,DISP=SHR
//       DD DSN=FIC.TRI4,DISP=SHR

6. DDNAME SYSTEME

Un DDNAME système est un nom symbolique utilisé pour identifier un fichier ou un périphérique système. Il est généralement utilisé pour accéder aux fichiers système standard tels que SYSIN, SYSOUT, SYSPRINT, SYSUT1, etc.

Le DDNAME est associé à un nom de fichier physique et à des attributs tels que le type de périphérique, le mode d’accès, la disposition du fichier et l’organisation des données. Les DDNAME système permettent de définir les entrées et sorties de données dans les programmes COBOL et sont généralement définis dans les instructions JOB et EXEC du JCL.

6.1. Recherche de programmes pour exécution

LINKLIB LOGIQUE
La Linklib logique est un ensemble de bibliothèques constitué de la SYS1.LINKLIB et de bibliothèques système et privées qui lui sont rattachées. Cet ensemble est défini dans des membres LNKLSTnn de SYS1.PARMLIB.
A partie du moment où un programme que l’on veut exécuter se trouve dans une bibliothèque de la Linklib logique, il n’est pas nécessaire de définir cette bibliothèque dans le JCL.

DEFINITION DE BIBLIOTHEQUE PRIVEES
La recherche d’un programme dans une ou plusieurs bibliothèques privées peut être demandée par l’une des cartes suivantes :

//JOBLIB DD DSN=BIB.LOAD,DISP=SHR
//STEPLIB DD DSN=BIB.LOAD2,DISP=SHR

  • Carte JOBLIB : permet de définir une bibliothèque privée qui sera valable pour toute la durée du JOB. Elle doit suivre obligatoirement la carte JOB. Et la carte JES2 s’il y’en a et précéder la première carte EXC.

Exemple :
//JOB1   JOB
//JOBLIB DD DSN=BIB.LOAD1,DISP=SHR
//STEP1  EXEC PGM=PROG1

Remarque : a chaque fois que le JOB demande l’exécution d’un programme, le système le recherche dans les bibliothèques de la JOBLIB. Si il n’est pas trouver dans ,la recherche ce poursuit dans la LINKLIB LOGIQUE.

  • Carte STEPLIB : permet de définir une bibliothèque privée qui ne sera valable que pour la durée du STEP dans le quel elle est définie. Elle fait partie des carte DD.

Exemple :
//JOB2    JOB
//STEP1   EXEC PGM=PROG2
//STEPLIB DD DSN=BIB.LOAD2,DISP=SHR

Remarque :
Avec une carte STEPLIB, quand l’étape demande l’exécution du programme, le Système le recherche dans la bibliothèque définie par STEPLIB. Sinon il continue sa recherche dans la LINKLIB LOGIQUE. Il n’y aura en aucun cas de recherche dans les bibliothèques éventuellement définie par JOBLIB.

6.2. Définition de catalogues

La définition d’un catalogue peut être demandée par l’une des cartes suivantes :

//JOBCAT DD DSN=USER.CAT1,DIS=SHR
//STEPCAT DD DSN=USER.CAT2,DISP=SHR

JOBCAT : un catalogue défini avec une carte JOBCAT sera valable pour toute la durée du JOB. La recherche d’un fichier de fera dans l’ordre suivant :
1) Catalogue défini par JOBCAT
2) Master Catalog
3) Catalogue associé au premier ‘Qualifieur’ du nom du fichier.
Une carte JOBCAT doit obligatoirement être placée entre la carte JOB et la première carte EXEC.
Si il existe une carte JOBCAT doit obligatoirement être placée entre la carte JOB et la première carte EXEC.
SI il existe une carte JOBLIB pour le même JOB elle doit être placer entre la carte JOB et la carte JOBCAT.

Exemple :
//JOB1   JOB
//JOBLIB DD DSN=BIB.LOAD1,DISP=SHR

//JOBCAT DD DSN=USER.CAT1,DISP=SHR
//STEP1  EXEC PGM=PROG1

STEPCAT : un catalogue défini par une carte STEPCAT est valable seulement pour la durée du STEP dans la quelle il est défini. La recherche d’un fichier se fait dans l’ordre suivant :
1) Catalogue défini par STEPCAT
2) Master Catalog
3) Catalogue associer au premier qualifieur du nom de fichier.
Une carte STEPCAT se place parmi les cartes DD de l’étape.

Exemple :
//JOB1    JOB
//JOBLIB  DD DSN=BIB.LOAD1,DISP=SHR
//STEP1   EXEC PGM=PROG1
//STEPCAT DD DSN=USER.CAT2,DISP=SHR

6.3. Edition des messages programmes

L’édition des messages programmes est faites sur un fichier SYSOUT défini par une carte :

//SYSOUT DD SYSOUT=classe

6.4. Options de DEBUGGING COBOL

Certaines options de debugging cobol nécessitent la présence des cartes suivantes.

//SYSDBOUT DD SYSOUT=classe
//SYSABOUT DD SYSOUT=classe

6.5. Edition des DUMPS

La sortie de DUMPS peut se faire sur fichier SYSOUT, disque ou bande. Elle est obtenue par l’intermédiaire d’une carte :

//SYSUDUMP DD SYSOUT=classe

5. ORDRE DD OU CARTE DD

Une carte DD ou un ordre DD est une instruction utilisée pour définir les entrées et sorties de données dans un job ou une tâche.

DD signifie “Data Definition” et chaque carte DD définit un nom symbolique (ou DDNAME) pour représenter un fichier ou un périphérique d’entrée/sortie associé à des attributs tels que le nom de fichier physique, le type de périphérique, le mode d’accès et la disposition du fichier.

Les cartes DD sont utilisées pour spécifier les entrées et sorties de données pour les programmes COBOL, les utilitaires système et les commandes de traitement de données dans un job JCL. Les cartes DD peuvent être définies dans les instructions JOB, EXEC ou DD du JCL en fonction de leur portée d’utilisation.

5.1. Généralité

Elle permet de définir pour une étape les fichiers suivants :
• Fichiers carte de données.
• Fichiers magnétiques non VSAM.
• Fichiers VSAM si il est CR22s par IDCAMS.
• Fichiers SYSOUTS
Elle assure la liaison entre le programme et le fichier physique.
Il faut une carte DD par fichier physique.
Un programme connaît les fichiers au travers de leur caractéristique logiques :
• Organisation du fichier
• Structure des enregistrements.
Par contre, il ignore leur caractéristique physique :
• Nature du support (disque, bande,etc…)
• Emplacement sur support
• Nom physique du fichier sur le support.
Ces détails son spécifiés dans le JCL au niveau de la DD.
La liaison entre le fichier logique défini dans le programme et le fichier physique défini dans la carte DD est faite par une Etiquette logique conservée dans le bloc de contrôle et qui doit obligatoirement figurer dans la zone nom de la carte DD.
L’étiquette est appelée Nom externe ou DDNAME du fichier. Il ce compose de 8 caractères maximum avec un caractère alphabétique dans le premier caractère.

5.2. Fichier Carte

//DDNAME DD DUMMY
            *
            DATA
            ,DLM=nn

Description des paramètres

* : permet d’introduire des données cartes sans les caractères // en colonnes 1 et 2
DATA : permet d’introduire des données cartes comportant // en colonnes 1 et 2(mais pas /). La fin de fichier doit alors être annoncée par le délimiteur standard /.
DUMMY : Permet d’ignorer les ordres d’entrées / sorties faits sur le fichier. Doit être donné le premier.

Exemple :

//FICMVT DD *
A1230
/*
Carte de mouvements


//SYSIN DD DATA
Procédure à cataloguer
/*


//FICBLAS DD DATA,DLM=ZZ
Données contenant /*
/*
ZZ

5.3. Définition des fichiers magnétique non VSAM

5.3.1 Format

//DDNAME DD DUMMY
                        ,DSNAME= ou DSN=
                        ,DISP=
                        ,UNIT=
                        ,VOL=
                        ,SPACE=
                        ,DCB=
                        ,LABEL=

5.3.2. Paramètre

5.3.2.1. DUMMY

Ce paramètre est positionnel de la carte DD. Quand il est codé il doit être le premier. Il demande au système d’ignorer tous les ordres d’entré/sortie faites sur ce fichier.
Il n’a pas de sous paramètres.

5.3.2.2. DSNAME=

C’est le nom physique du fichier. Pour un fichier en création le système stock ce nom dans les labels du fichier. Pour un fichier en lecture utilise ce nom pour localiser le fichier dans le volume.

DSNAME= {nom-fichier}
                {nom-pds(membre)}
                {nom-fichier(numérode génération)}
                {&&nom-fichier}
                {&&nom-pds(membre)}
                {.DDNAME} 
                {.nom-STEP.DDNAME}
                {*.nom-step.nom-step-proc.DDNAME}
  • Nom-fichier : ici le nom est fourni qu’il soit sequentiel ou partitionné.
  • Nom-pds(membre) : membre de fichier partitionné. On fournit le nom du PDS suivi, Entre parenthèses, du nom du membre à traité.
  • Nom-fichier (num de génération) : nom d’un fichier GDG suivi, entre parenthèse par le numéro de génération dans le GDG.
  • &&nom-fichier : nom temporaire, séquentiel ou partitionné. Le système génère dans ce cas un nom sous la forme :
    SYSaajjj.Thhmmss.RA000.nom-job.nom-fichier
    Aajjj : date de création en année nombre de jour.
    Hhmmss : heure de création
    Nom-job : Nom du job figurant dans la zone “nom” de la carte JOB
    Nom-fichier : nom donné au fichier derrière les caractères “&&”
    Si on ommet le paramètre DSNAME, le système génére alors un nom sous la forme :
    SYSaajjj.Thhmmss.RA000.nom-job.Rnnnnnnn
    Dans le quel ‘nnnnnnn’ représente le numéro d’ordre de création du fichier dans le JOB.
  • &&nom-pds(membre) : nom d’un membre de fichier partitionné temporaire.
  • *,DDNAME : référence arrière à un nom de fichier contenu dans une carte DD faisant partie du même STEP.
  • *.nom-step.DDNAME : référence arrière a un nom de fichier contenu dans une carte DD faisant partie d’un STEP antérieur dans le même JOB.
  • *.nom-step.nom-step-proc.DDNAME : référence arrière à un nom de fichier contenu dans une carte DD faisant partie d’une étape de procédure cataloguée appelée par une étape antérieur du JOB.

Exemple :
1 – définition d’une génération GDG.

//DDX DD DSN=RESERV.GDG(0).
2- Définition de membre de PDS.
//DDX DD DSN=BIBLIO1.UTIL.FIC(PARAM)
3- Définition de fichier temporaire.
//DDX DD DSN=&&TEMP1
4- définition d’un fichier non temporaire.
//DDX DD DSN=BIBLIO.PGM1.FICSTOK, …

5.3.2.3. DISP :

Disposition“, il permet d’indiqué au système l’état du fichier à traiter, ce qu’il faut faire du fichier à la fin de l’étape, si elle ce passe bien ou lors d’une fin anormale(c.à.d. fin provoqué par le système).

Les sous paramètre du DISP sont positionnels.

DISP= (NEW,DELETE,DELETE)
      (OLD,KEEP,KEEP)
      (SHR,PASS,CATLG)
      (MOD,CATLG,UNCATLG)
                        ,UNCATLG

Sous paramètre-1- : indiquera l’état du fichier.
Sous paramètre -2- : indiquera ce qu’il faut faire du fichier en cas de fin normale de l’étape.
Sous paramètre -3- : ce qu’il faut faire du fichier en cas de fin anormale de l’étape.(ABEND).

ETAT DU FICHIER
NEW : Le fichier est créé par l’étape en cours. Il est à usage exclusif du JOB pendant toute la durée du JOB.
OLD : il existait avant l’étape en cours. Il est à usage exclusif du JOB pendant toute la durée du JOB.
SHR : il existe avant l’étape en cours. Il est partageable entre tous les JOBs actifs.
MOD : il existe avant l’étape et est en cours de l’exécution. Il est a l’usage exclusif a l’usage du JOB. Il permet de ce positionné au dernier enregistrement du fichier pour écrire des nouveaux enregistrements. Si le système ne trouve nulle part d’informations concernant le volume qui contient le fichier, il considère celui-ci comme NEW.

DISPOSITION EN CAS DE FIN NORMALE
DELETE
: le fichier devra être supprimé. La suppression d’un fichier catalogué entraîne celle de son entrée au catalogue à condition que le système ne trouve les informations d’unité et de volume que dans le catalogue. DELETE et PASS sont les seules dispositions valides pour un
fichier temporaire (DSN omis ou DSN=&&TEMP).
KEEP : il est conservé sans le cataloguer. Pour un fichier bande le volume est déchargé.
CATLG : il est conservé et catalogué. Pour toute utilisation ultérieure, il suffit de fournir son nom et sa disposition dans la carte DD.
UNCATLG : il doit être catalogué mais non conservé.
PASS : Il passe à une étape ultérieure du même JOB. Il passe d’une étape à une autre s’il y a besoin.
Un volume à bande n’est pas rembobiné sauf si le programmeur en décide autrement au CLOSE du fichier. Pour le conserver il suffit de coder une disposition KEEP ou CATLG a sa dernière utilisation.

Exemple :

//PASS        JOB
//ET1          EXEC PGM=PGM1
//DDNAME1  DD   DSN=FIC001,DISP=(NEW,PASS),UNIT=SYSDA 

//ET2          EXEC PGM=PGM2  

//ET3          EXEC PGM=PGM3
//DDNAME3  DD DSN=FIC001,DISP=(OLD,PASS),UNIT=SYSDA 

//ET4          EXEC PGM=PGM4
//DDNAME3  DD DSN=FIC001,DISP=(OLD,CATLG),UNIT=SYSDA  

DISPOSITION A PRENDRE EN CAS DE FIN ANORMALE
A l’exception de PASS, toutes les dispositions précédentes peuvent être données pour une fin anormale d’étape.

OPTIONS PRISES PAR DEFAUT
1ère position :       NEW.
2ème position :     DELETE si le fichier est NEW.
                                     KEEP, si le fichier existe déjà (OLD ou SHR).
3ème position :     Par défaut en cas de fin anormale, le système applique la disposition demandée pour la fin normale.

Exemple :
1- DDNAME1 DD DSN=FIC1,DISP=(NEW,CATLG,DELETE)
Fichier en création, catalogage en fin normale, suppression en cas de fin anormal
2- DDNAME1 DD DSN=FIC1,DISP=(OLD,DELETE,KEEP)
Fichier existent, suppression lors d’une fin normale, conservation lors d’une fin anormale
3- DDNAME1 DD DSN=FIC1, pas de disposition
Fichier en création, suppression en cas de fin normale ou anormale.
4- DDNAME1 DD DSN=FIC1,DISP=(OLD,,DELETE)
Fichier existent, conservation en cas de fin normale, suppression en cas de fin anormale.

UNIT : Ce paramètre défini l’unité physique contenant ou devant contenir le fichier obligatoire lors de la création d’un fichier
UNIT = adresse-unité, nbre-unités, DEFER, AFF=DDNAME
       Type-unité,    P
       Nom-groupe

Les trois sous-paramètres sont positionnels.

  • Adresse-unité : elle permet de donné une adresse précise pour l’allocation physique du fichier, elle est a proscrire d’une manière générale
  • nbre-unité : indique au système le nombre d’unités à réserver pour un fichier multi volumes. Par défaut le système réserve une unité.
  • DEFFER : permet un montage différé du volume. Elle sera faite qu’au moment de l’OPEN du fichier si OPEN il y a.
  • UNIT=AFF= : indique au système le fichier défini doit être implanté sur la même unité qu’un fichier déjà défini dans l’étape.
  • Type-unité : on donne ici un type d’unité du système (3480,3350,3380,3420, etc..)
  • P(parallèle) : précise au système au tous les volumes d’un fichier multi-volume doivent être en ligne au moment du traitement. La routine d’allocation de l’INITIATOR réservera autant d’unités que nécessaire, le nombre de volume souhaité lui étant alors fourni dans le paramètre volume.
  • Nom-groupe : identifie le groupe d’unité pour l’implantation du fichier. Ils sont défini a la génération du système.

Exemple :

1- //DDNAME1 DD DSN=I000001.FICHIER1,DISP=(NEW,CATLG),
               UNIT=SYSDA, …

Le fichier sera dans le groupe SYSDA, a n’importe quelle unité.
2- //DDNAME1 DD DSN=I000001.FICHIER1,DISP=(NEW,KEEP),
               UNIT=3380, …

Le fichier sera dans n’importe quelle unité 3380.
3- //DDNAME1 DD DSN=I000001.FICHIER1,DISP=(NEW,CATLG),
               UNIT=(TAPE,P), …
               VOL=SER=(VOL001,VOL002)

Le fichier multi volume. Le volume VOL001 et VOL002 doivent être montés en parallèle pour le traitement.
4- //DDNAME1 DD DSN=I000001.FICHIER1,DISP=(NEW,CATLG),
               UNIT=(TAPE,,DEFER), …

Le fichier ne sera monté qu’à l’OPEN du fichier.

VOLUME : permet de définir le volume qui contient ou qui contiendra le fichier. Il est obligatoire pour créer un fichier sur un volume spécifique, reprendre un fichier non cataloguer ou non passé.
VOLume= PRIVATE, RETAIN, sqvol, nbvol, SER=numvol
                                   REF=*.ddname
                                   REF=*.stp.ddname
                                   REF=*.stp.stprc.ddname
                                   REF=dsname

Les quatre sous-paramètres sont positionnels.
Un volume peut faire l’objet d’une demande :

  • SPECIFIQUE : l’utilisateur impose un volume précis qui contient le fichier.
  • Non SPECIFIQUE : L’emplacement du fichier est laissé au choix du système qui cherchera la place dans un volume public.
  • RETAIN : permet la conservation de l’unité supportant le volume à utiliser.
  • Sqvol(séquence volume) : pour un fichier multi volumes permet l’indication du volume à utiliser.
  • Nbvol(nombre de volume) : indique le nombre de volume à traiter(fichier multi volumes). Par défaut, le système assume le traitement de 5 volumes au maximum. Au delà, il faut coder le nombre (pour un max de 255) de volumes nécessaires.
  • SER= (serial) : ce sous paramètre fait une demande spécifique de volume, un ou plusieurs peuvent être codé.
  • REF=dsname : le fichier sera sur le même volume qu’un fichier existant ou catalogue.
  • REF=.ddname : le fichier sera dans le même volume qu’un fichier de l’étape.
  • EF=.step1.ddname : le fichier sera dans le même volume qu’un fichier du step1
  • REF=*.step.procstep.ddname : le fichier sera dans le même volume que le fichier décrit dans le step de la procédure du JOB.

Exemple :
1- //STEP1   EXEC PGM=PGM1
   //FICSOR  DD   DSN=I000001.FICSOR,DISP=(NEW,KEEP),
   //             UNIT=TAPE,VOL=(,RETAIN)
   //STEP2   EXEC PGM=PGM2
   //FICENTR DD   DSN=I000001.FICSOR,DISP=(OLD,CATLG),
   //             UNIT=TAPE,VOL=REF=*.S1.FICSOR
2- //DDENTR  DD   DSN=I000001.FIC1,DISP=SHR,UNIT=3380,
   //             VOL=SER=VOL001
3- //DDOUT   DD   DSN=I0000001.fic2,DISP=(NEW,CTALG),
   //             UNIT=TAPE,
   //        VOL=(,,,6,SER=(BDE001,BDE002,BDE003,BDE004))

SPACE : indique au système quelle espace disque sera réserver pour ce fichier en création.
Deux type de déclaration : spécifier et non spécifier. Ces deux type correspond a des format différente, l’ensemble de ces sous paramètre sont positionnels.

Demande non spécifique :
SPACE=(type-alloc,(allocp,allocs,dir),(RLSE,CONTIG,ROUND))

  • Type-alloc : indique l’unité d’allocation de l’éspaces.
    TRK : pistes
    CYL : cylindres
    nnn : longueur moyenne, en octets, du bloc unitaire. Le nombre maximum étant donnée dans le programme.
  • Allocp : donne l’allocation primaire. Le système essais toujours de satisfaire l’allocation primaires. Il doit y avoir suffisamment de place pour l’allocation primaire sinon il y a arrêt du traitement.
  • Allocs : donne la taille des allocations secondaires.
  • dir : pour les fichier partitionnés. Donne le nombre de blocs de directory à réserver en début d’allocation primaire.
  • RLSE : libération de l’espace disque non utilisé par le fichier au moment de sa fermeture.
  • CONTIG : demande que l’allocation de l’espace soit faites de façon contiguë.
  • ROUND : force l’alignement des allocations demandées en blocs d’une certaine taille frontière du cylindre.
    Demande spécifique :
    Elle impose un emplacement spécifique pour le fichier. Elle en nombre de pistes et fournit l’adresse relative de la première piste du domaine défini.
    SPACE=(ABSTR,(taille,piste-départ,(directory)))

Exemple :
//FICSOR DD DSN=A0001.FIC1,DISP=(NEW,CATLG),
//          UNIT=SYSDA,SPACE=(CYL,30,RLSE)

Allocation primaire de 30 cylindres, pas d’allocations secondaires, libération de la place non utilisée au close.

//FICSOR DD DSN=A0001.FIC1,DISP=(NEW,CATLG),
//          UNIT=3380,VOL=SER=VOL001,SPACE=(TRK,(10,5))

Allocation de 10 piste primaires et 5 secondaires.

//FICSOR DD DSN=A0001.FIC1.PDS,DISP=(NEW,CATLG),
//          UNIT=3380,VOL=SER=VOL002,SPACE=(CYL,(5,,20))

Allocation d’un PDS, 5cylindre en primaire, pas d’allocation secondaire,et 20 blocs directory.

//FICSOR DD DSN=A0001.FIC1.PDS,DISP=(NEW,CATLG),
//          UNIT=3380,VOL=SER=VOL002,
//          SPACE=(3120,(100,50))

Allocation primaire de 100 blocs de 3120 octets
Allocations secondaires de 50 blocs de 3120 octets

DCB : il permet de fournir les caractéristique physique d’un fichier non VSAM.

La forme la plus souvent représenté est la suivante :
DCB = (dsname,LRECL=,BLKSIZE=,RECFM=,DSORG=,DEN=)
       *.ddname
       *.step.ddname

  • RECFM= : indique le format des enregistrements :
             F => Fixe
             FB => Fixe bloqué
             V => Variable
             VB => Variable bloqué.
             U => indefini
    Pour les fichiers d’impression, la lettre A peut suivre les différents codes pour indiquer que le premier caractère est un caractère de contrôle de saut.
  • LRECL= : donne la taille des enregistrements logiques :
             Format F ou FB : longueur commune a tous les enregistrements.
             Format V ou VB : longueur maximum des enregistrements incluant les 4 octets de contrôle.
             Format U : ce sous paramètre est inutile.
  • BLKSIZE= : permet de donné la taille des enregistrement physique (blocs). Il est obligatoire pour un fichier en création.
             Taille max autorisée :32760 octets.
             Format F ou FB : doit etre un multiple de LRECL.
             Format V ou VB : doit être au minimum égal à LRECL + 4
             Format U : est libre dans les limite 16-32760.
  • DSORG = : donne l’organisation du fichier :
             PS => séquentielle
             DA => à accès direct
             IS => séquentielle indéxée (ISAM).
             PO => partitionnée.
  • DEN= : donne la densité d’enregistrement dans les bandes magnétiques.
             2 => 800 BPI
             3 => 1600 BPI
             4 => 6250 BPI
  • Dsname : permet de référence les caractéristique physique du fichier catalogué.
  • *.ddname : fait référence aux caractéristiques physique d’un fichier défini antérieurement dans le STEP.
  • *.STEPNAME.ddname : fait référence aux caractéristiques physique d’un fichier défini antérieurement dans le STEP antérieur.

Exemple:
//DDNAME DD DSN=A0001.Fic1,DISP=(NEW,CATLG),UNIT=SYSDA,
//          SPACE=(TRK,10),DCB=BLKSIZE=3120
//DDNAME DD DSN=A0001.Fic1,DISP=(NEW,CATLG),UNIT=SYSDA,
//          SPACE=(TRK,10),DCB=(BLKSIZE=8000,DEN=3)

LABEL : définie essentiellement :
      La position d’un fichier dans une bande.
      Le type de labels utilisés pour un fichier bande.
      L’existence d’une protection par mot de passe.
      La date d’expiration du fichier.

LABEL=(rang,type,protection,protection, EXPDT=date)
                                        RETPD=nnn


Rang : indique la position du fichier sur bande (défaut=1).peut être omis pour reprendre un fichier catalogué ou passé ainsi qu’un GDG.
Type : indique le type de label à traiter.
        SL : Standard IBM (par défaut)
        SUL : Standard IBM et Utilisateur.
        NSL : non standard
        NL : pas de labels
        BLP : pas de traitement de labels )
Protection (plus utilisé) : ce sous paramètre permet d’indiquer une protection par mot de passe.
EXPDT= : donne une date de rétention à un fichier sous format
        Année/Quantième(AAQQQ ou AAAA/QQQ)
RETPD= : donne uns période de rétention du fichier sous forme de nombre de jours pendant les quels il sera conservé.

Exemple :
//DDNAME1 DD DSN=A00001.FICSOR,DISP=(NEW,CATLG),
//           UNIT=TAPE,
//           DCB=BLKSIZE=800,LABEL=(3,SL)

//DDNAME1 DD DSN=A00001.FICSOR,DISP=(NEW,CATLG),
//           UNIT=SYSDA,DCB=BLKSIZE=3120,
//           SPACE=(CYL,10),LABEL=EXPDT=90260

//DDNAME1 DD DSN=A00001.FICSOR,DISP=(NEW,CATLG),
//           UNIT=SYSDA,DCB=BLKSIZE=3120,
//           SPACE=(CYL,10),LABEL=EXPDT=1990/260

//DDNAME1 DD DSN=A00001.FICSOR,DISP=(NEW,CATLG),
//           UNIT=SYSDA,DCB=BLKSIZE=3120,
//           SPACE=(CYL,10),LABEL=RETPD=60

5.4. Définition des fichiers VSAM.

//DDNAME DD DUMMY
            ,DSNAME=
            ,DISP=
            ,AMP=

Les paramètres DUMMY et DSNAME sont les même que ceux vus pour les fichiers non VSAM.
Le paramètre DISP ne peut prendre que les valeurs OLD et SHR. Les autres sont ignorées.
AMP : Ce paramètre permet de compléter les informations sur les paramètres du fichier VSAM

AMP=('AMORG,BUFND=n,BUFINI=n,BUFSP=n')

Si l’on code plusieurs paramètres dans AMP, ceux-ci doivent être entre cote:

  • AMORG : indique au système que la carte DD définit un fichier VSAM.
  • BUFND= : permet de donner le nombre de si DATA à stocker dans les
    buffers.
  • BUFNI= : donne le nombre de CI INDEX à stocker dans les buffers.
  • BUFSP= : il permet de modifier la taille des buffers ‘E/S pour le transfert des DATA et des INDEX.
    La valeur indiquée doit être supérieure à celle donnée dans le paramètre
    BUFSP à la définition du CLUSTER.

5.5. Définir des fichiers SYSOUT

//DDNAME1 DD DUMMY
            ,SYSOUT=
            ,COPIES=
            ,FCB=
            ,UCS=
            ,HOLD=
            ,FREE=
            ,OUTLIM=
            ,DEST=
            ,OUTPUT=
            ,BURST=
            ,CHARS=
            ,FLASH=

SYSOUT : permet d’affecter à un fichier SYSOUT les caractéristiques suivantes :
– Classe de sortie.
– Writer devant prendre l’édition en charge.
– Format de papier ou code carte JES2 ou OUTPUT.

SYSOUT=(classe/*/(,),Writer/INTRDR,Format/code)

  • Classe : classe de sortie à utiliser pour le stockage de sysout.
  • * : La classe de sortie doit être la même que celle donnée dans le paramètre MSGCLASS de la carte JOB.
  • (,) : Classe nulle. Utilise une classe définie dans une carte OUTPUT à la quelle on fera référence au moyen du paramètre OUTPUT.
  • Writer : identification du writer externe devant prendre l’édition en charge.
  • INTRDR : la sysout doit être renvoyé dans une file d’attente d’entrée au travers d’un lecteur interne.
  • Format : format de papier a utiliser pour l’impression (1 à 4 caractère)
  • Code : identifiant d’une carte /* OUTPUT de JES2 dans la quelle on aura défini les caractéristiques du fichier SYSOUT.

Exemple :
//DDNAME1 DD SYSOUT=(F,FACT)
//DDNAME2 DD SYSOUT=V

COPIES : spécifier le nombre de copies désirées pour une édition. Optionnellement si l’impression doit ce faire sur une imprimante 3800, On peut spécifier la façon dont doivent être groupées les copies.

COPIES=(nnn,(groupe1,groupe2, …))

  • nnn :nombre de copy désirées dans les limites de 1 à 255. Pour les sous système 3800, cette valeur est ignorée si on a codé les valeur de groupes. Sans valeur de groupe, le nombre de copies indiqué sera imprimé dans la séquence des pages pour chaque copie.
  • Groupe1,groupe2 : ces paramètres ne sont pris en compte que pour l’impression sur sous-système 3800.Ils indique le groupage des copies à imprimer. Chaque valeur donnera le nombre de copies de chaque page devant être groupées ensembles. Chaque groupe peut prendre une valeur de 1 à 255. On pourra avoir au maximum 8 groupe dont la somme des valeurs ne doit pas dépasser 255.

Exemple :
//IMPR1 DD SYSOUT=F,COPIES=32
//IMPR2 DD SYSOUT=B,COPIES=(1,(1,2))

FCB : spécifié la bande pilote à utiliser pour l’impression de SYSOUT. L’image de la bande pilote doit se trouver dans la bibliothèque système SYS1.IMAGELIB.

FCB=(image-id,(ALIGN/VERIFY))

  • Image-id : nom d’un membre de SYS1.IMAGELIB définissant la bande pilote à utiliser (1 à 4 caractère).
  • ALIGN : demande à l’opérateur de vérifier le cadrage du papier avant l’édition.
  • VERIFY : demande à l’opérateur si l’image d’état est bien la bande.

Exemple :
//IMPR1 DD SYSOUT=F,COPIES=3,FCB=FACT

UCS : chaîne de caractères à utiliser pour l’impression de SYSOUT sur imprimante à impacts. Police de caractères à utiliser pour impression sur 3800 LASER.

UCS=identification.

Exemple :
//IMPR1 DD SYSOUT=F,COPIES=3,UCS=CHN5

HOLD :

HOLD=YES(Y)/NO(N)

  • YES : le sysout doit être mis à l’état HOLD dans les filles d’attente de sortie. Sa fera par commande pupitre.
  • NO :Le sysout sera édité à son tour.

Exemple :
//IMPR1 DD SYSOUT=F,COPIES=3,HOLD=YES.

FREE : ce paramètre permet de déterminer à quel moment le système doit désallouer le fichier défini dans la carte DD.

FREE=END/CLOSE

  • END : Le fichier sera désalloué à la fin du JOB(DEFAUT)
    CLOSE :le fichier sera désallouer a ça fermeture. Utiliser dans les fichiers
  • SYSOUT pour l’impression du fichier par JES2 même si le JOB n’est pas terminé.

Exemple :
//IMPR1 DD SYSOUT=F,FREE=CLOSE

OUTLIM : limite le nombre de ligne de la sysaout. La limite atteinte, le traitement s’arrête par ABEND.

OUTLIM=nnnnnnnn

nnnnnnnn : nombre maximum de ligne produit (1 à 16777215).

Exemple :
//IMPR1 DD SYSOUT=F,OUTLIM=1000

DEST : spécifie la destination d’une SYSOUT.

DEST= LOCAL
      Nnnn
      RMTnn
      NnRn

  • LOCAL :la SYSOUT sera édité sur n’importe quelle imprimante locale.
  • Nnnn : Le SYSOUT sera édité au nœud de réseau spécifié.
  • RMTnn : la SYSOUT sera édité à la station remonte spécifiée.
  • NnRn : La SYSOUT sera édité a la station remote spécifiée et rattachée au nœud de réseau spécifié

Exemple :
//OMPR1 DD SYSOUT=F,DEST=RMT1

OUTPUT : permet d’associer au fichier SYSOUT des caractéristiques définies antérieurement par une ou plusieurs cartes OUTPUT.

OUTPUT= *.ddname, *.ddname,…
        *stepname.ddname,*stepname.ddname, …
        *.stepname.procstepname.ddname, …

*ddname : référence à une carte OUTPUT définie soit dans la même étape soit juste avant la première carte EXEC
*stepname.ddname : référence à une carte OUPUT définie dans un STEP antérieur.
*.stepname.procstepname.ddname : référence à une carte OUTPUT définie dans une étape de procédure appelée dans un STEP antérieur.

Exemple :
Les exemples seront vus lors de l’étude de la carte OUTPUT.

Remarque :
Tout paramètre associé au paramètre SYSOUT et qui ne figure pas dans la carte OUT PUT est ajouté aux options de traitement prises dans la carte OUTPUT.
Tout paramètre associé au paramètre SYSOUT prime sur les paramètres équivalents de la carte OUTPUT.

BURST : permet de demander l’utilisation ou la non utilisation du dispositif de rupture de l’imprimante 3800 à LASER.

BRUST =YES/NO

CHARS : permet de définir les polices de caractères à utiliser pour impression sur l’imprimante 3800 à LASER.

CHARS=(nom1,nom2, …)

FLASH : permet de définir le fond de page à utiliser pour impression sur imprimante 3800 à LASER.

FLASH=nom,nb copies

  • nom : nom du fond de page à utiliser.
  • Nb copies : nombre de copies de SYOUT à traiter avec le fond de page.

4. L’ORDRE EXEC

Elle permet d’identifier le programme ou la procédure à exécuter.
Limite : un JOB ne peut être constitué de plus de 255 étapes (soit 255 ordre exec).

C’est obligatoirement le premier ordre d’un STEP. Elle ce compose de paramètres positionnels et des paramètres à mots-clés. La zone nom de la carte est nécessaire pour faire un référence arrière qu STEP, modifier les paramètres des cartes EXEC et DD dans les procédures cataloguées, effectuer des reprises en début d’étapes ou à un check-point.
Pour l’ensemble de ces besoins, il est recommandé de données au différent STEP d’un JOB des noms différents.
• Si le programme a exécuté n’est pas trouvé le JOB envois un code retour système ABEND S806
• Si la procédure n’est pas trouvée elle envoie un message PROCEDURE NOT FOUND.

4.1. Format

//NOM

EXEC

PGM=nom.pgm

PROC=nom.pr

ou nom procedure

,PARM=valeur ,ADDRSPC=VIRT/REAL ,COND= ((cde,opr) ,(cde,opr,stp)
,(cde,opr,prc.stp),EVEN/ONLY) ,PERFORM=n
,REGION=nk
,TIME=1440/(min,s)

4.2. Description des paramètres

NOM : c’est le nom donné à l’étape par le programmeur. 1 à 8 caractères alphanumériques, le premier étant obligatoirement une lettre.

PGM = : Ce paramètre est positionnel; Il est nécessaire pour demander l’exécution du programme. Il s’agit d’un programme compilé antérieurement. Il ce compose de 8 caractère alphanumérique. Le programme est contenu dans une bibliothèque déclarée système
d’exploitation et le programme et au format LINK-EDIT.

PROC = : Ce paramètre est positionnel. Il est utilisé pour appeler une procédure cataloguée et demander son exécution.
Ce n’est pas un paramètre obligatoire. Il suffit, pour appeler une procédure, de fournir simplement son nom.

ADDRSPC = : Il est à demander le chargement du programme à exécuter soit en mémoire réelle, soit en mémoire virtuelle.
Ordre de priorité du paramètre : Le paramètre ADDRSPC, s’il est codé dans la carte JOB, prime sur les paramètres codés dans une carte EXEC. S’il est codé dans une carte EXEC d’appel de procédure prime sur celui codé dans les cartes EXEC de la procédure.

COND = Ce paramètre permet de donner une ou plusieurs conditions de non exécution d’un STEP.

Prend la forme suivante COND=(Valeur numérique, opérateur,Nom du step).

L’opérateur prend les valeurs suivantes :

  • GT : plus grand que.
  • GE : plus grand ou égal.
  • EQ : égal.
  • NE : non égal.
  • LT : plus petit que.
  • LE : Plus petit ou égal.

Fonctionnement :

  • Le test peut être fait par rapport au résultat de n’importe quelle étape précédente(on ne donne pas de nom d’étape) ou par rapport au résultat d’une étape précise (on donne le nom de l’étape).
  • Si une des conditions est réalisée, l’étape pour laquelle elle est codifiée n’est pas exécutée et on passe à l’étape suivante.
  • EVEN et ONLY : sont particuliers dans le sens ou ils font intervenir la notion d’ABEND. L’interprétation doit se faire de la façon suivante:
    1. COND=EVEN : Exécuter l’étape même si n’importe quelle étape précédente s’est terminée par un ABEND.
    2. COND=ONLY : Exécuter l’étape si et seulement si n’importe quelle étape précédente s’est terminée par un ABEND

Remarque : Si le paramètre COND est fourni dans la carte JOB et dans les cartes EXEC, le système réagit de la façon suivante :
– Si la condition définie dans la carte JOB est réalisée, il y a arrêt du JOB.
– Si non, le système teste la condition définie dans la carte EXEC. En fonction du résultat, il initialise ou n’initialise pas l’étape.

Exemple 1 :

//I000001AS JOB
//STEP1 EXEC PGM=PGM1
//FICENT1 DD DISP=SHR
//FICSOR1 DD DSN=FIC1
Résultat lors de l'exécution -> Returne Code = 0

//STEP2 EXEC PGM=PGM2,COND(0,NE)
//FICENT2 DD DISP=SHR,DSN=FIC1
//FICSOR2 DD DSN=FIC2
Résultat lors de l'exécution -> Returne Code = 8

//STEP3 EXEC PGM=PGM3,COND(0,NE,STEP1)
//FICENT3 DD DISP=SHR,DSN=FIC1
//FICSOR3 DD DSN=FIC3
Résultat lors de l'exécution -> Returne Code = 0

//STEP4 EXEC PGM=PGM4,COND(0,NE,STEP2)
//FICENT4 DD DISP=SHR,DSN=FIC2
//FICSOR4 DD DSN=FIC4

  • Le programme PGM1 s’exécute et se termine avec émission d’un code retour à 0.
  • Avant d’initialiser l’étape STEP2, l’initiator teste la condition définie dans la carte EXEC de la façon suivante :
    • Est-ce que 0 est différent du code retour émis par l’une des étapes précédentes?
    • Le programme PGM1 ayant émis un code retour égal à 0, la condition n’est pas réalisée et l’étape STEP2 peut s’exécuté.
  • Le programme PGM2 s’exécute et se termine avec émission d’un code retour égal à 8.
  • Avant d’initialiser l’étape STEP3, l’initiator teste la condition définie dans la carte EXEC de la façon suivante :
    • Est-ce que 0 est différent du code retour émis par l’étape STP1?
    • Le programme PGM1 ayant émis un code retour égal à 0, la condition n’est pas réalisée et l’étape STEP3 peut s’exécuter.
  • Le programme PGM3 s’exécute et se termine avec émission d’un code retour à 0.
  • Avant d’initialiser l’étape STEP4, l’initiator teste la condition définie dans la carte EXEC de la façon suivante:
    • Est-ce que 0 est différent du code retour émis par l’étape STEP2.
    • Le programme PGM2 ayant émis un code retour égal à 8, la condition est réalisée est l’étape STEP4 ne peut être exécuter.

Exemple 2 :

//I000001AS JOB
//STEP1 EXEC PGM=PGM1
//FICENT1 DD DISP=SHR
//FICSOR1 DD DSN=FIC1
Résultat lors de l'exécution -> Returne Code = 0

//STEP2 EXEC PGM=PGM2,COND(0,NE)
//FICENT2 DD DISP=SHR,DSN=FIC1
//FICSOR2 DD DSN=FIC2
Résultat lors de l'exécution -> Returne Code = 8

//STEP3 EXEC PGM=PGM3,COND(0,NE,STEP1)
//FICENT3 DD DISP=SHR,DSN=FIC1
//FICSOR3 DD DSN=FIC3
Résultat lors de l'exécution -> Returne Code = 0

//STEP4 EXEC PGM=PGM4,COND(0,NE,STEP2)
//FICENT4 DD DISP=SHR,DSN=FIC2
//FICSOR4 DD DSN=FIC4

  • Le programme PGM1 s’exécute et se termine avec émission d’un code retour à 0.
  • Avant d’initialiser l’étape STEP2, l’initiator teste la condition définie dans la carte EXEC de la façon suivante :
    • Est-ce que 0 est différent du code retour émis par l’une des étapes précédentes?
    • Le programme PGM1 ayant émis un code retour égal à 0, la condition n’est pas réalisée et l’étape STEP2 peut s’exécuté.
  • Le programme PGM2 s’exécute et se termine avec émission d’un code retour égal à 8.
  • Avant d’initialiser l’étape STEP3, l’initiator teste la condition définie dans la carte EXEC de la façon suivante :
    • Est-ce que 0 est différent du code retour émis par l’étape STP1?
    • Le programme PGM1 ayant émis un code retour égal à 0, la condition n’est pas réalisée et l’étape STEP3 peut s’exécuter.
  • Le programme PGM3 s’exécute et se termine avec émission d’un code retour à 0.
  • Avant d’initialiser l’étape STEP4, l’initiator teste la condition définie dans la carte EXEC de la façon suivante:
    • Est-ce que 0 est différent du code retour émis par l’étape STEP2.
    • Le programme PGM2 ayant émis un code retour égal à 8, la condition est réalisée est l’étape STEP4 ne peut être exécuter.

Exemple 2 :

//I000001AS JOB
//STEP1 EXEC PGM=PGM1
//FICENT1 DD DISP=SHR
//FICSOR1 DD DSN=FIC1
Résultat lors de l'exécution -> ABEND

//STEP2 EXEC PGM=PGM2,COND=ONLY
//FICENT2 DD DISP=SHR,DSN=FIC1
//FICSOR2 DD DSN=FIC2
Résultat lors de l'exécution -> Returne Code = 8

//STEP3 EXEC PGM=PGM3,COND=(0,NE,STEP1)
//FICENT3 DD DISP=SHR,DSN=FIC1
//FICSOR3 DD DSN=FIC3
Résultat lors de l'exécution -> Returne Code = 0

//STEP4 EXEC PGM=PGM4,COND=((0,NE,STEP2),EVEN)
//FICENT4 DD DISP=SHR,DSN=FIC2
//FICSOR4 DD DSN=FIC4

  • Le programme PGM1 s’exécute et se termine par ABEND.
  • Avant l’initialiser l’étape STEP2, l’initiator teste la condition définie dans la carte EXEC de la façon suivante :
    • Est-ce l’une des étapes précédentes s’est terminée par ABEND?
    • Le programme PGM1 est terminé par un ABEND, la condition est réalisée STEP2 peut s’exécuter.
  • Le programme PGM2 s’exécute et se termine avec émission d’un code retour égal à 8.
  • Pour l’initialisation de l’étape STEP3, l’initiator teste la condition définie dans la carte EXEC de la façon suivante :
    • Étant donné qu’il y a eu ABEND dans une étape précédente et que EVEN ou ONLY ce sont pas spécifiés, l’étape STEP3 ne peut pas s’exécuter.
  • Avant d’initialiser l’étape STEP4, l’initiator teste la condition définie dans la carte EXEC de la façon suivante :
    • Est-ce que l’étapes précédentes se sont exécutés s’est terminée par un ABEND? (OUI).
    • Est-ce que le test du code retour est satisfait. (OUI).
    • Dans ces conditions l’étape STEP4 ne peut pas s’exécuter (voir tableaux suivant).

Tableaux récapitulatifs des cas possible avec les opérateurs :

DESCRIPTIONInitialiseur étapePas d’initialisation de l’étape
COND=(code,GT)
COND=(code,GE)
COND=(code,EQ)
COND=(code,LT)
COND=(code,LE)
COND=(code,NE)
RC>=code
RC >code
RC ≠code
RC =<code
RC<code
RC=code
RC<code
RC=<code
RC=code
RC >code
RC>=code
RC ≠code

Tableaux récapitulatifs des cas possible pour EVEN et ONLY :

Spécification de
EVEN ou ONLY ?
ABEND étapes
précédentes?
TESTS RC
satisfaits
INIT étape
EVEN
EVEN
EVEN
EVEN
NON
NON
OUI
OUI
NON
OUI
NON
OUI
OUI
NON
OUI
NON
ONLY
ONLY
ONLY
ONLY
NON
NON
OUI
OUI
NON
OUI
NON
OUI
NON
NON
OUI
NON
NON
NON
NON
NON
NON
NON
OUI
OUI
NON
OUI
NON
OUI
OUI
NON
NON
NON

PARM : Ce paramètre permet de passer divers paramètres à un programme. Les paramètres pouvant être passés sont :
• Paramètre utilisateur.
• Paramètre compilateur et assembleurs.
• Les paramètres LINK-EDIT.
En ce qui concerne les paramètres utilisateurs, le programmeur doit avoir prévue une zone de réception dans son programme dans la LINKAGE SECTION.
Si la valeur du paramètre contient plusieurs expressions séparées par une virgule, il faut la mettre entre parenthèses ou entre apostrophes, ces caractères n’étant pas transmis au programme.
Si la valeur contient des caractères spéciaux, elle doivent être mise entre parenthèse ou entre apostrophes.
On peut transmettre jusqu’à 100 caractères de paramètres utilisateurs et des paramètres COBOL.

PERFORM : Ce paramètre permet d’affecter le STEP à un groupe de performance particulier.
Si le paramètre PERFORM est aussi codé dans la carte JOB, il primera sur ceux codés dans les différentes cartes EXEC.
Par défaut il le système qui définie le groupe de performance en fonction des paramètre du système.

3. L’ORDRE JOB

Un ordre JOB est une instruction utilisée pour décrire et soumettre un travail ou une tâche à exécuter sur un ordinateur central.

L’ordre JOB commence par le mot-clé JOB suivi d’un nom de job, qui est un identificateur unique pour le travail, et d’autres informations telles que l’heure de soumission, la priorité, le compte de facturation, etc.

Les instructions JOB définissent également les bibliothèques de programmes et les fichiers nécessaires pour exécuter le job, ainsi que les paramètres de sortie tels que le nom et le format des fichiers de sortie. Les instructions JOB sont suivies des instructions EXEC, qui définissent les différentes étapes ou tâches à effectuer pour exécuter le job. L’ordre JOB est la première instruction d’un JCL et est obligatoire pour chaque job à exécuter.

3.1. Format général

//nom JOB          infos account
                  ,nom programmeur
                  ,CLASS=classe d’éxecution
                  ,MSGCLASS=classe de sortie
                  ,MSGLEVEL=(a,b)
                  ,NOTIFY=userid_TST
                  ,TYPRUN=SCAN/HOLD
                  ,RESTART=nomd’étape
                  ,TIME=(minutes,secondes)/1440
                  ,ADDRSPC=VIRT/REAL
                  ,REGION=nK
                  ,PRTY=P
                  ,USER=userid-RACF
                  ,GROUP=groupe fichiers RACF
                  ,PASSWORD=mot de passé RACF
                  ,PERFORM=groupe performances SRM
                  ,COND=((code, opération, …

3.2. Description des paramètres

nom : c’est le nom donné au JOB. Il commence en colo3,par un caractère alphabétique, et peut comporter de18 caractères dont 7alphanumérique.
Il est fréquent que ça soit forcement le USERID de l’utilisateur qui exécute le JOB.

Account : paramètre positionnel. Il s’agit d’un paramètre de comptabilisation, permettant par exemple de calculer le coût de développement d’un programme, d’un projet, etc…

CLASS : détermine la classe d’entrée de JOB. Il existe 36 classes numérotées de A à Z et de 0 à 9.Chaque classe est affectée à un groupe de travail ou une catégorie de JOB en fonction de critères spécifiques à l’exploitation. Le Job sera dans cette file d’attente.

MSGLEVEL : permet de préciser le niveau de compte rendu d’exécution que l’on veut obtenir. Comporte deux sous paramètres positionnels.
MSGLEVEL=(JCL,MESSAGES)

JCL0 : Seule la carte JOB sera listée.
1 : Toutes les cartes JCL seront éditées, Les procédures appelées seront incluses dans le compte rendu.
2 : Toutes les cartes JCL seront éditées, à l’exclusion des procédures
MESSAGES0 : Les messages de l’allocator et du terminator ne sont pas édités.
Toutes fois si une étape se termine anormalement, les massages sont
édités.
1 : Tous les messages sont édités.


En général, il est conseillé de demander le maximum de renseignement, même si cela conduit à éditer plusieurs feuilles de comptes-rendus. Cela est obtenu par les valeurs par défaut(1,1) .

TIME= : Détermine la durée maximum (en temps CPU, processeur) du JOB pour l’ensemble des étapes. Comporte deux sous paramètres positionnels. TIME=(min,s).
min : duré en minute de 0 à 1440.
s : durée en seconde de 0 à 60.
Exemple :
TIME=(5,30) ou TIME=(,10) 10second ou TIME=2 min
Si le temps est dépassée, l’étape en cours sera abandonnée et produit un code retour system : S322

PRTY= : Détermine la priorité affectée au JOB dans les classes d’entrées et de sortie. Les valeurs possibles vont de 0 à 15, 15 étant la plus haut priorité. La valeur standard par défaut est 5. A noter qu’il n’est pas souhaitable d’utiliser systématiquement des priorités élevées, car cela conduit inéluctablement à un engorgement du système. De plus, il existe des routines développées par l’équipe système qui contrôlent la validité de la priorité en fonction par exemple du nom du Job ou du code affaire.

NOTYFY= : permet au système d’avertir l’utilisateur que le job est terminé. Le paramètre est le USERID (identifiant utilisateur) utilisé pour se connecter à TSO.

RESTART= : permet de démarrer l’exécution d’un JOB à une autre étape que la première.
Cela est parfois utile lorsque l’on exécute plusieurs fois le job et que l’on ne désire pas réexecuter les premières étapes. La valeur se code de la façon suivante :

*Démarrage a la première étape (équivalent à l’absence du paramètre).
STEPnNom de l’étap où l’on veut démarrer l’exécution (stepname).
STEPn.PROCSTEPmEn cas de démarrage dans une procédure, STEPn indique l’étape d’appel et PROCSTEPm le nom de l’étape de la procédure.

Exemple :
RESTART=* s’exécute depuis le début
RESTART=EDIT s’exécute depuis l’étape EDIT
RESTART=COMPIL.COB appel de sous JCL.

TYPRUN =SCAN : Permet de soumettre le JOB uniquement au contrôle de l’interpréteur, sans allocation ni exécution. Elle permet un contrôle de syntaxe du JCL.

PASSWORD : Permet de donner un mot de passe donnant accès à des fichiers protégés par RACF. IL est coder avec le paramètre USER est ce constitue de 1 à 8 caractère alphanumérique.

COND= : Permet de donner une ou plusieurs conditions d’arrêt d’un JOB. Le code est un nombre de 0 à 4095 que le système compare avec les codes retours issus des différents STEP.
On pourra donner jusqu’à 8 conditions reliées entre elles par une liaison OU. Voir syntaxe de la carte EXEC.
Exemple : COND=(8,LE)

Exemple de carte JOB :

1-

2-

3-

Tous les paramètres ne sont pas obligatoire, chaque société a ces condition de contrôle et outil technique qui permet la gestion du travail de qualité. Il est recommander pour définir cette carte de demande un exemple sur le site.