JCL – Instruction DD

Les ensembles de données sont des fichiers mainframe avec des enregistrements organisés dans un format spécifique.
Les ensembles de données sont stockés sur le périphérique de stockage à accès direct (DASD) ou sur les bandes de l’ordinateur central et sont des zones de stockage de données de base.
Si ces données doivent être utilisées/créées dans un programme batch, le nom physique du fichier (c’est-à-dire l’ensemble de données) ainsi que le format et l’organisation du fichier sont codés dans un JCL.

La définition de chaque jeu de données utilisé dans le JCL est donnée à l’aide de l’instruction DD.
Les ressources d’entrée et de sortie requises par une étape de job doivent être décrites dans une instruction DD avec des informations telles que l’organisation de l’ensemble de données, les exigences de stockage et la longueur de l’enregistrement.

Syntaxe

Voici la syntaxe de base d’une instruction JCL DD :

//DDNAME DD Parametres

Description

Voyons la description des termes utilisés dans la syntaxe de l’instruction DD ci-dessus.

DDNAME

Un DDNAME identifie l’ensemble de données ou la ressource d’entrée/sortie.
S’il s’agit d’un fichier d’entrée/sortie utilisé par un programme COBOL/Assembler, le fichier est référencé par ce nom dans le programme.

DD

Il s’agit du mot-clé pour l’identifier en tant qu’instruction DD.

PARAMÈTRES

Voici les différents paramètres de l’instruction DD.
Vous pouvez utiliser un ou plusieurs paramètres en fonction des besoins et ils sont séparés par une virgule :

ParamètreDescription
DSNLe paramètre DSN fait référence au nom du jeu de données physique d’un jeu de données nouvellement créé ou existant.
La valeur DSN peut être composée de sous-noms de 1 à 8 caractères chacun, séparés par des points et d’une longueur totale de 44 caractères (alphanumériques).

Voici la syntaxe :
DSN=Nom de l’ensemble de données physiques

Les ensembles de données temporaires n’ont besoin d’être stockés que pendant la durée de la tâche et sont supprimés à la fin de la tâche.
Ces ensembles de données sont représentés sous la forme DSN=&name ou simplement sans DSN spécifié.

Si un jeu de données temporaire créé par une étape de job doit être utilisé dans l’étape de job suivante, il est alors référencé sous la forme DSN=*.nomstep.ddname.
C’est ce qu’on appelle le référencement arrière.
DISPLe paramètre DISP est utilisé pour décrire l’état de l’ensemble de données, la disposition à la fin de l’étape de travail en cas d’achèvement normal et anormal.
DISP n’est pas requis dans une instruction DD uniquement lorsque l’ensemble de données est créé et supprimé dans la même étape de job (comme les ensembles de données temporaires).

Voici la syntaxe :
DISP=(statut, disposition normale, disposition anormale)

Voici les valeurs valides pour le statut :
NEW : l’ensemble de données est nouvellement créé par l’étape de travail. 
OLD : l’ensemble de données est déjà créé et sera écrasé dans l’étape de travail.
L’étape de job obtient un accès exclusif à l’ensemble de données et aucune autre tâche ne peut accéder à cet ensemble de données tant que l’étape de job n’est pas terminée.
SHR : Le jeu de données est déjà créé et sera lu dans l’étape du travail.
Le jeu de données peut être lu par plusieurs jobs en même temps. 
Exemple: INPUT1 et INPUT2.
MOD : Le jeu de données est déjà créé.
Cette disposition sera utilisée lorsqu’il sera nécessaire d’ajouter de nouveaux enregistrements à l’ensemble de données existant (les enregistrements existants ne seront pas écrasés).

Un paramètre de disposition normale peut prendre l’une des valeurs suivantes :
CATLG, UNCATLG, DELETE, PASS et KEEP

Un paramètre de disposition anormale peut prendre l’une des valeurs suivantes :
CATLG, UNCATLG, DELETE et KEEP

Voici la description des paramètres CATLG, UNCATLG, DELETE, PASS et KEEP :
CATLG : Le jeu de données est conservé avec une entrée dans le catalogue système.
UNCATLG : l’ensemble de données est conservé mais l’entrée du catalogue système est supprimée.
KEEP : Le jeu de données est conservé sans modifier aucune des entrées du catalogue.
KEEP est la seule disposition valide pour les fichiers VSAM. Ceci ne doit être utilisé que pour les ensembles de données permanents.
DELETE : l’ensemble de données est supprimé du catalogue utilisateur et système.
PASS : Ceci n’est valable que pour une disposition normale.
Ceci est utilisé lorsque l’ensemble de données doit être transmis et traité par l’étape de job suivante dans un JCL.

Lorsque l’un des sous-paramètres de DISP n’est pas spécifié, les valeurs par défaut sont les suivantes :
status : NEW est la valeur par défaut.
normal-disposition : Si le statut est NEW, la disposition-normale par défaut est DELETE, sinon c’est KEEP.
abnormal-disposition : Identique à la disposition normale.
DCBLe paramètre Data Control Block (DCB) détaille les caractéristiques physiques d’un jeu de données. Ce paramètre est requis pour les ensembles de données nouvellement créés dans l’étape de job.

LRECL est la longueur de chaque enregistrement contenu dans l’ensemble de données.

RECFM est le format d’enregistrement de l’ensemble de données.
RECFM peut contenir les valeurs FB, V ou VB.
FB est une organisation de bloc fixe où un ou plusieurs enregistrements logiques sont regroupés dans un seul bloc.
V est une organisation variable dans laquelle un enregistrement logique de longueur variable est placé dans un bloc physique.
VB est une organisation de blocs variables dans laquelle un ou plusieurs enregistrements logiques de longueur variable sont placés dans un bloc physique.

BLKSIZE est la taille du bloc physique. Plus le bloc est grand, plus le nombre d’enregistrements pour un fichier FB ou VB est grand.

DSORG est le type d’organisation des ensembles de données. DSORG peut contenir les valeurs PS (Physical Sequential), PO (Partitioned Organisation) et DA (Direct Organisation).

Lorsqu’il est nécessaire de répliquer les valeurs DCB d’un jeu de données vers un autre dans la même étape de travail ou JCL, il est spécifié comme
DCB=*.nomstep.ddname où nomstep est le nom du step de job et ddname est le jeu de données à partir duquel le DCB est copié.

Vérifiez l’exemple ci-dessous où RECFM = FB, LRECL = 80 forme le DCB du jeu de données OUTPUT1.
SPACELe paramètre SPACE spécifie l’espace requis pour le jeu de données dans le DASD (Direct Access Storage Disk).

Voici la syntaxe :
SPACE=(spcunits, (pri, sec, dir), RLSE)

Voici la description de tous les paramètres utilisés :
– spcunits : Cela peut être l’un des CYL(Cylinder), TRK(Tracks) ou BLKSIZE(Block Size).
– pri : Il s’agit de l’espace principal requis pour le jeu de données.
– sec : C’est l’espace supplémentaire requis, lorsque l’espace primaire n’est pas suffisant.
– ir : Il s’agit des blocs de répertoire requis, si le jeu de données est un PDS (Partitioned Dataset) avec des membres à l’intérieur.
– RLSE : Ceci est utilisé pour libérer l’espace inutilisé à la fin du travail.
UNITLes paramètres UNIT et VOL sont répertoriés dans le catalogue système pour les ensembles de données catalogués et sont donc accessibles uniquement avec le nom DSN physique. Mais pour les ensembles de données non catalogués, l’instruction DD doit inclure ces paramètres.
Pour de nouveaux ensembles de données à créer, les paramètres UNIT/VOL peuvent être spécifiés ou le Z/OS alloue l’appareil et le volume appropriés.

Le paramètre UNIT spécifie le type d’appareil sur lequel l’ensemble de données est stocké.
Le type d’appareil peut être identifié à l’aide de l’adresse matérielle ou du groupe de types d’appareils. 

Voici la syntaxe :
UNIT=DASD | SYSDA

Où DASD signifie Direct Access Storage Device et SYSDA signifie System Direct Access et fait référence au prochain périphérique de stockage sur disque disponible.
VOLLe paramètre VOL spécifie le numéro de volume sur l’appareil identifié par le paramètre UNIT.

Voici la syntaxe :
VOL=SER=(v1,v2)

Où v1, v2 sont des numéros de série de volume. Vous pouvez également utiliser la syntaxe suivante :
VOL=REF=*.DDNAME

Où REF est la référence en amont au numéro de série de volume d’un ensemble de données dans l’une des étapes de job précédentes dans le JCL.
SYSOUTLes paramètres d’instruction DD discutés jusqu’à présent correspondent aux données stockées dans un ensemble de données.
Le paramètre SYSOUT dirige les données vers le périphérique de sortie en fonction de la classe spécifiée.

Voici la syntaxe:
SYSOUT=class

Où si la classe est A alors il dirige la sortie vers l’imprimante, et si la classe est * alors il dirige la sortie vers la même destination que celle du paramètre MSGCLASS dans l’instruction JOB.

Exemple

Voici un exemple qui utilise des instructions DD avec divers paramètres expliqués ci-dessus :


//LCDCOBOL JOB 'TUTO',CLASS=6,MSGCLASS=X,REGION=8K,
//         NOTIFY=&SYSUID
//*
//STEP001  EXEC PGM=ICETOOL,ADDRSPC=REAL
//*
//INPUT1   DD DSN=TUTO.SORT.INPUT1,DISP=SHR
//INPUT2   DD DSN=TUTO.SORT.INPUT2,DISP=SHR,UNIT=SYSDA,
//         VOL=SER=(1243,1244)
//OUTPUT1  DD DSN=MYFILES.SAMPLE.OUTPUT1,DISP=(,CATLG,DELETE),
//         RECFM=FB,LRECL=80,SPACE=(CYL,(10,20))
//OUTPUT2  DD SYSOUT=*