Tous les articles par Mr COBOL

2. SYNTAXE GÉNÉRALE

La syntaxe générale d’un JCL comprend une séquence d’instructions JOB, suivie d’une ou plusieurs instructions EXEC pour décrire les tâches à exécuter, avec des cartes DD pour définir les entrées/sorties de données.

Le fichier JCL a un format sur 80 caractères. Seul les colonnes de 1 à 71 sont utilisé.
Chaque carte (ligne du JCL) commence par // en colonne 1 et 2.

A partir de la colonne 3, on peut distinguer 4 zones :

Zone 1 : C’est la zone qui identifie le nom de la carte attribué par le programme pour ça reconnaissance. Ce compose de 8 caractères alphanumériques commencent obligatoirement par une lettre
Zone 2 Type d’ordre : JOB, EXEC, DD, PROC, PEND.
Zone 3 La liste des paramètres, séparés par des virgules sans blanc sauf après le dernier.
Zone 4 Cette zone est considérée comme étant du commentaire.

Dans la carte de l’ordre JOB plusieurs paramètres sont précisé celons les environnements de travail. Elle fini en position 70 par une virgule, et peut être poursuivie dans une deuxième et troisième ligne à partir de la Colonne 9.

2.1. Paramètres d’un ordre JCL

Deux types de paramètres, les positionnels et à mots clés.

A. Positionnels : c’est la position de la valeur qui détermine la valeur.

Exemple : supposons que le système attend 3 paramètre, A, B et C; dans cette ordre. leur attribue successivement est 693, ABCDRF, HEUR1

Plusieurs cas son possible :
Si l’on veut valoriser que A et C : 393,,HEUR1
Si l’on veut valoriser que A et B : 393,ABCDRF,,
Si l’on veut valoriser que B et C : ,ABCDRF,HEUR1,
Si l’on veut valoriser A : 693
Si l’on veut valoriser C : ,,HEUR1
Les paramètres positionnels sont toujours situés en tête d’une chaîne de paramètres, et doivent être codés dans un ordre précis.

B. A mot Clé: chaque valeur de paramètre est précédée d’un mot clé désignant le paramètre suivi d’un signe =.

Exemple :
PGM = EXTRAC1
SPACE=(TRK,(15,5))

2.2. Carte suite

Il est possible et fréquent que la liste des paramètres ne tienne pas sur une seule carte, dans ce cas on peut la prolonger sur les cartes suivantes. Deux règles doivent être respectées.
Si sur une carte, la liste des paramètres n’est pas terminée, le dernier paramètre doit être suivi d’une virgule.
Si une carte est la suite des paramètres de la précédente, elle comporte // dans les positions 1 et 2, ni nom ni type pour cette carte le premier paramètre dois commencer entre les cols 4 à 16 comprises.

Exemple :

2.3. Carte Commentaire

En code //* en position 1,2 et 3, ce qui suit col 4 à 71 est considéré comme du commentaire.
Cette carte permet d’expliquer de justifier l’utilisation du JOB. Il est conseillé d’ajouter des commentaires quant c’est nécessaire pour comprendre l’ensemble des états du JOB. Cela dans le but de faciliter la maintenance et garder une trace explicative dans des JOB complexe.

Dans la suite nous allons introduire les paramètres en détail pour chaque type d’ordre d’un
JCL.

1. GÉNÉRALITE

Une généralité en JCL est que cette langage de contrôle de tâches est utilisé pour décrire les travaux à exécuter sur un système informatique centralisé.

Les instructions JCL spécifient les programmes à exécuter, les données à utiliser et les ressources système nécessaires pour exécuter les travaux. Les tâches sont soumises à un planificateur de travaux qui les ordonnance et les distribue aux ressources système pour leur traitement. Le JCL est une compétence clé pour les programmeurs et les administrateurs système travaillant avec des ordinateurs centraux.

1.1. Description

Un JCL ce compose d’un certain nombre d’ordres qui on un but de :

  1. Soumettre au système un travail, c’est-à-dire un ensemble de programmes à exécuter.
    L’ordre utilisé pour cela est : JOB
  2. Donnée le nom du programme à exécuter, ou la procédure à appeler, EXEC
  3. Définir l’ensemble des données associées aux programmes du traitement demander a être exécuter, DD.

L’ensemble des ordres de contrôle sont soumis à une syntaxe qu’il faut respecter sous peine de voir un refus d’exécution et envoie d’un message JOB NOT RUN – JCL ERROR.

L’exécution d’un JCL est séquentielle, les ordres de contrôle doivent être précisées dans un ordre déterminé à l’intérieur du JOB, et cela étape par étape. Ces étapes seront respectueux des condition coder par l’utilisateur.
Les JOB sont indépendant dans leurs soumissions.

1.2. Codage

Un JCL ce compose principalement d’ordre décrit précédemment:

En première ligne un ordre JOB une seul par JCL(membre PDS).
Une succession d’ordre EXEC. Il doit être suivie par des ordres DD pour spécifier l’ensemble des composants (fichier entrer, fichier de sortie, Sysin, compte rendu d’exec, fichier de display …)
La présence d’une carte fin n’est pas obligatoire.


Dans le tableau qui suit un récapitulatif des ordres est présenté :

Nom de la carteParamètres définis
COMMANDIndique la commande MVS ou JES2 à effectuer lors de l’exécution du JCL (depuis MVS/ESA SP4)
CNTL/ENDCNTLMarque début/la fin du ou des paramètres de contrôle pour un sous-système d’impression.
DDNom logique d’un fichier, nom physique, utilisateur(création, lecture, modification, suppression..), type de support (bande,disque), identification du support, taille du fichier, caractéristiques intrinsèques (organisation, blocage, taille des enregistrements), labels.
EXECNom de l’étape du JOB, nom du programme à exécuter, paramètres à passer au programme, taille mémoire à allouer, conditions d’exécution, durée d’exécution de l’étape.
IF/THEN/ELSE/ENDIFPermet de Conditionner l’exécution des étapes (depuis MVS/ESA SP4).
INCLUDESpécifie le nom du membre de bibliothèque à inclure dans le JCL.
Aucune possibilité de paramétrage (depuis MVS/ESA SP4)
JCLLIBPrécise la bibliothèque qui contient la procédure ou le groupe d’include que l’on vaut exécuter (depuis MVS/ESA SP4)
JOBNom du JOB, du Programme, ou programmeur, classe d’exécution, classe de sortie, niveau des messages d’erreur, durée d’exécution, conditions de reprise
OUTPUTOptions d’impression que le JES utilisera pour les fichier en SYSOUT.
PROCDéfinit une procédure, permet de donner des valeurs par défaut aux variables.
PENDDétermine la fin d’une procédure.
SETDonne des valeurs aux variables qui paramètrent le JCL (depuis MVS/ESA SP4)
XMITTransmission d’enregistrements d’un système sous JES3 vers un autre système.
//*Commentaire
//FIN de JCL
/*Fin de données

CODE RETOUR -650

THE ALTER STATEMENT CANNOT BE EXECUTED, REASON reason-code

Explication
L’instruction ALTER ne peut pas être exécutée pour la raison indiquée.

reason-code
Une valeur numérique qui indique la raison pour laquelle l’instruction ne peut pas être exécutée.

5

Une instruction ALTER avec une clause PIECESIZE n’est pas autorisée pour un index de partitionnement.

6

Une instruction ALTER avec une clause PIECESIZE 4G n’est pas autorisée pour les index non partitionnés sur une table de taille réduite.

7

Une instruction ALTER avec une clause DSSIZE n’est autorisée que pour les espaces table LOB et universels.

8

Une instruction ALTER avec une clause SEGSIZE est autorisée pour les espaces table universels et les espaces table partitionnés qui utilisent le partitionnement contrôlé par table.

9

Une instruction ALTER avec une clause BUFFERPOOL dans laquelle une taille de page différente est spécifiée n’est autorisée que pour les espaces table LOB et universels (à l’exception des espaces table XML).

10

Une instruction ALTER avec une clause MAXPARTITIONS n’est autorisée que pour les espaces table suivants :

  • Espaces de table simples à une seule table
  • Espaces table segmentés à table unique
  • Espaces table universels utilisant une organisation partition par croissance

11

Une instruction ALTER avec une clause ENDING AT n’est pas autorisée pour un index sur une table de base partitionnée avec des colonnes LOB ou la table elle-même.

12

ALTER INDEX n’est pas autorisé lorsqu’une instruction SQL est en attente

13

ALTER TABLE n’est pas autorisé lorsqu’une instruction SQL est en attente.

14

Une instruction ALTER INDEX avec une clause ENDING AT n’est pas autorisée lors de l’utilisation du partitionnement contrôlé par table.

15

L’utilisation d’ALTER pour modifier les attributs des valeurs d’une partition n’est pas autorisée pour un index sur une table de base partitionnée avec des colonnes LOB, ou la table elle-même.

16

ALTER TABLE DATA CAPTURE CHANGES n’est pas autorisé pour les espaces table à l’état consultatif en attente de REORG (AREO).

17

ALTER TABLE DROP CLONE ne peut pas être utilisé pour supprimer un clone lorsque la table elle-même est un clone.

18

ALTER INDEX n’est pas autorisé lorsque la table a défini un clone.

19

ALTER TABLESPACE n’est pas autorisé lorsque l’espace table contient une table dont un clone est défini.

20

ALTER TABLE DROP CLONE ne peut pas être utilisé pour supprimer un clone lorsque la table n’a pas de clone défini.

21

ALTER TABLE SET DEFAULT n’est pas autorisé lorsque toutes les conditions suivantes sont vraies :

  • La table existe dans un espace table qui a actuellement l’attribut DEFINE YES.
  • L’instruction ALTER TABLE fait référence à une colonne qui ne faisait pas partie de la définition de table d’origine.
  • Le tableau n’a pas été réorganisé depuis l’ajout de la colonne référencée.

22

ALTER TABLE SET DEFAULT et DROP DEFAULT ne sont pas autorisés pour les tables référencées par une table ou une vue de requête matérialisée.

23

ALTER TABLE DROP DEFAULT n’est pas autorisé lorsque l’espace table est dans l’état d’avertissement REORG-pending (AREO*).

24

Une instruction ALTER TABLE avec des options en attente n’est autorisée que pour les espaces table universels.

25

ALTER TABLE DROP DEFAULT n’est pas autorisé lorsque toutes les conditions suivantes sont vraies :

  • L’espace table est soit dans l’état en attente de REORG-pending (AREO*) ou en REORG-pending (REORP).
  • L’instruction ALTER TABLE fait référence à une colonne qui ne faisait pas partie de la définition de table d’origine.
  • Le tableau n’a pas été réorganisé depuis l’ajout de la colonne référencée.

Dans ce cas, une mise à jour en masse peut être utilisée pour effacer l’état AREO*.

26

Une instruction ALTER VIEW avec une clause REGENERATE n’est pas autorisée si la vue est référencée par une table de requête matérialisée.

27

Pour une instruction ALTER TABLE qui nomme une table de requête matérialisée, les modifications sont limitées aux situations suivantes :

  • Modification des attributs de la table de requête matérialisée
  • Transformer la table de requête matérialisée en table de base
  • En précisant les clauses suivantes :
    1. ADD RESTRICT ON DROP
    2. ALTER MATERIALIZED QUERY
    3. ALTER PARTITION
    4. AUDIT
    5. DATA CAPTURE
    6. DROP MATERIALIZED QUERY
    7. DROP RESTRICT ON DROP
    8. ROTATE PARTITION
    9. KEY LABEL
    10. NO KEY LABEL

Les clauses ADD RESTRICT ON DROP et DROP RESTRICT ON DROP ne peuvent pas être utilisées dans la même instruction.

28

ALTER TABLE n’est pas autorisé pour une table d’accélérateur uniquement, sauf si la seule modification spécifiée est ADD RESTRICT ON DROP ou DROP RESTRICT ON DROP.

29

ALTER TABLESPACE n’est pas autorisé lorsque l’espace table contient une table d’accélérateur uniquement.

32

Une instruction ALTER avec une clause ADD PARTITION a tenté d’insérer une partition. Ceci n’est pas autorisé pour l’une des raisons suivantes :

  • La table n’est pas dans un espace table partition par plage.
  • Le numéro de partition n’est pas valide.
  • La valeur de la clé limite n’est pas valide pour une partition affectée.
  • La table contient une colonne LOB ou une colonne de type distinct basée sur un type de données LOB.

34

ALTER TABLESPACE COMPRESS n’est pas autorisé pour un espace table LOB lorsque l’espace table de base associé n’est pas un espace table universel.

35

ALTER TABLESPACE PAGENUM échoue car l’espace table n’est pas une partition par plage d’espace table.

36

ALTER TABLESPACE PAGENUM échoue car l’espace table est DEFINE NO, mais au moins un index pour l’espace table est DEFINE YES.

37

ALTER TABLESPACE PAGENUM n’a pas réussi car un mot clé non valide a été spécifié. PAGENUM doit être suivi du mot-clé RELATIVE.

38

ALTER TABLESPACE PAGENUM échoue car l’espace table utilise une organisation de hachage, ou ALTER TABLE ne peut pas être utilisé pour ajouter une organisation de hachage lorsque la table réside dans un espace table qui utilise des numéros de page relatifs.

39

ALTER TABLESPACE PAGENUM n’a pas réussi car la table contient des valeurs de clé de limite tronquées.

40

Une instruction ALTER TABLESPACE avec une clause MOVE TABLE doit spécifier une table qui existe dans l’espace table en cours de modification.

41

Une instruction ALTER TABLESPACE avec une clause MOVE TABLE doit spécifier un espace table simple ou segmenté (non UTS) qui doit être modifié.

42

Une instruction ALTER TABLESPACE avec une clause MOVE TABLE doit spécifier un espace table qui existe dans la même base de données que l’espace table en cours de modification.

43

Une instruction ALTER TABLESPACE avec une clause MOVE TABLE doit spécifier un espace table cible qui est un espace table universel partition par croissance.

44

Une instruction ALTER TABLESPACE avec une clause MOVE TABLE doit spécifier un espace table cible qui n’a pas encore d’ensembles de données créés.

45

Une instruction ALTER TABLESPACE avec une clause MOVE TABLE doit spécifier un espace table cible défini avec MAXPARTITIONS 1.

46

Une instruction ALTER TABLESPACE avec une clause MOVE TABLE doit spécifier un espace table cible défini avec le même attribut LOGGED que l’espace table source.

47

Si un espace table est la cible d’une modification de définition en attente pour déplacer une table, l’espace table cible ne peut pas être supprimé et recréé avant que la modification en attente ne soit matérialisée.

48

Un ALTER TABLESPACE avec une clause MAXPARTITIONS pour convertir l’espace table en un espace table universel partition par croissance doit spécifier MAXPARTITIONS 1 s’il existe une modification de définition en attente pour déplacer une table de l’espace table.

49

ALTER TABLESPACE COMPRESS YES HUFFMAN n’est pas autorisé pour un espace table non universel.

50

ALTER TABLESPACE COMPRESS YES FIXEDLENGTH ou COMPRESS YES HUFFMAN n’est pas autorisé pour un espace table LOB.

51

ALTER TABLESPACE COMPRESS YES HUFFMAN n’est pas autorisé pour un espace table qui utilise une organisation de hachage.

Action du système
L’instruction ne peut pas être traitée.

Réponse du programmeur
Corrigez l’erreur en fonction des informations fournies pour la valeur du code anomalie et réémettez l’instruction.

Pour les erreurs dues à une définition incorrecte de l’espace table cible pour une modification de définition en attente pour déplacer une table, effectuez l’une des actions suivantes :

  • Modifiez l’espace table cible pour spécifier les attributs corrects.
  • Effectuez les étapes suivantes :
    1. Supprimez toutes les modifications de définition en attente, y compris l’opération MOVE TABLE, associée à l’espace table source.
    2. Supprimez l’espace table cible.
    3. Recréez l’espace table cible avec les attributs corrects.
    4. Exécutez à nouveau toutes les modifications de définition en attente.

SQLSTATE
56090

CODE RETOUR -647

BUFFERPOOL bp-name FOR IMPLICIT OR EXPLICIT TABLESPACE OR INDEXSPACE name HAS NOT BEEN ACTIVATED

Explication
Le pool de mémoire tampon spécifié dans une instruction CREATE ou ALTER pour un espace table ou un index (espace d’index) n’est pas activé. Sinon, sur une instruction CREATE TABLE sans clause IN, le pool de mémoire tampon, qui est choisi implicitement par Db2 en fonction de la taille d’enregistrement réelle, n’est pas activé.

Les espaces table et les index (espaces d’index) ne peuvent être affectés ou réaffectés qu’aux pools de mémoire tampon actuellement activés.

Action du système
L’instruction ne peut pas être traitée. L’espace table ou l’espace d’index spécifié n’a pas été créé ou modifié.

Réponse du programmeur
Vérifiez que le pool de mémoire tampon approprié a été spécifié dans l’instruction CREATE ou ALTER et que le pool de mémoire tampon est choisi par Db2. Utilisez la commande -DISPLAY BUFFERPOOL pour afficher les attributs du pool de mémoire tampon et déterminer si le pool de mémoire tampon est activé. Si le pool de mémoire tampon n’est pas activé, utilisez la commande -ALTER BUFFERPOOL pour modifier le VPSIZE de 0 à la taille appropriée.

SQLSTATE
57003

CODE RETOUR -646

TABLE table-name CANNOT BE CREATED IN OR MOVED TO SPECIFIED TABLE SPACE table-space-name BECAUSE IT ALREADY CONTAINS A TABLE

Explication
L’espace table spécifié dans une instruction CREATE TABLE ou ALTER TABLESPACE est l’un des types d’espaces table suivants et contient déjà une table existante ou a une modification de définition en attente pour déplacer une table vers table-space-name :

  • Un espace table partitionné
  • Un espace table défini implicitement
  • Un espace table LOB
  • Un espace table XML
  • Un espace table qui contient une table temporelle de période système ou une table d’historique
  • Un espace table qui contient une table d’archivage ou une table d’archivage
  • Un espace table qui est l’espace table cible pour une instruction ALTER TABLESPACE MOVE TABLE en attente

Une seule table peut exister dans ces types d’espaces table.

Action du système
L’instruction ne peut pas être traitée. La table n’a pas été créée ou déplacée.

Réponse du programmeur
Vérifiez que l’espace table correct a été spécifié dans l’instruction défaillante.

SQLSTATE
55017

CODE RETOUR -644

INVALID VALUE SPECIFIED FOR KEYWORD OR CLAUSE keyword-or-clause IN STATEMENT statement-type

Explication
La valeur spécifiée pour le paramètre keyword-or-clause dans l’instruction SQL statement-type n’est pas valide.

Action du système
L’instruction ne peut pas être traitée.

Réponse du programmeur
Dans la plupart des cas, remplacez la valeur du keyword-or-clause spécifié par une valeur valide.

Cette erreur peut être émise pour des modifications de définition en attente par des utilitaires ou des instructions de définition de données. Dans ce cas, recherchez dans la colonne STATEMENT_TEXT des lignes associées de la table de catalogue SYSIBM.SYSPENDINGDDL une modification de définition en attente contenant une valeur non valide. Si l’erreur concerne une modification MAXPARTITIONS non valide, comparez le nombre réel de partitions pour l’espace table à la valeur MAXPARTITIONS spécifiée. Il est possible que le nombre de partitions ait augmenté pour dépasser la valeur MAXPARITIONS d’un changement de définition en attente. Dans ce cas, modifiez l’espace table pour supprimer toutes les modifications de définition en attente. Ensuite, rééditez les modifications en attente avec des spécifications valides.

SQLSTATE
42615

CODE RETOUR -643

A CHECK CONSTRAINT OR THE VALUE OF AN EXPRESSION FOR A COLUMN OF AN INDEX EXCEEDS THE MAXIMUM ALLOWABLE LENGTH KEY EXPRESSION

Explication
La définition d’une contrainte de vérification ou d’une expression d’une colonne d’index dépasse la longueur maximale autorisée :

  • Une contrainte de vérification a dépassé 3 800 octets UTF-8. Les espaces vides redondants sont exclus de cette limite.
  • La valeur d’une expression pour un index dépassait 4 000 octets UTF-8.

Action du système
L’instruction CREATE TABLE ou ALTER TABLE a échoué. L’instruction ne peut pas être exécutée.

Réponse du programmeur
Modifiez la contrainte ou l’expression afin qu’elle ne dépasse pas la limite maximale autorisée. S’il s’agit d’une contrainte de vérification, réécrivez la définition de la contrainte de vérification afin qu’elle soit inférieure à 3 800 octets UTF-8. Vous devrez peut-être diviser une contrainte de vérification en deux ou plusieurs contraintes de vérification plus petites.

SQLSTATE
54024

CODE RETOUR -640

LOCKSIZE ROW CANNOT BE SPECIFIED BECAUSE TABLE IN THIS TABLESPACE HAS TYPE 1 INDEX

Explication
Si LOCKSIZE ROW est spécifié pour un espace table, tous les index des tables de l’espace table doivent être des index de type 2. L’instruction SQL suivante identifie tous les index de type 1 :

SELECT I.CREATOR, I.NAME FROM SYSIBM.SYSINDEXES I, SYSIBM.SYSTABLES T WHERE INDEXTYPE = ' ' AND T.TSNAME = 'table_space_name' AND T.DBNAMe = 'database_name' AND T.CREATOR = I.TBCREATOR AND T.NAME = I.TBNAME;

où ‘table_space_name‘ est le nom de l’espace table qui doit être modifié ; ‘database_name‘ est le nom de la base de données qui contient l’espace table.

Action du système
L’instruction ne peut pas être traitée.

Réponse du programmeur
Étant donné que LOCKSIZE ROW sur l’espace table et les index de type 1 sont en conflit, utilisez l’instruction ALTER INDEX pour convertir tous les index de type 1 en index de type 2 ou utilisez une autre option LOCKSIZE.

SQLSTATE
56089

CODE RETOUR -639

A NULLABLE COLUMN OF A FOREIGN KEY WITH A DELETE RULE OF SET NULL CANNOT BE A COLUMN OF THE KEY OF A PARTITIONED INDEX

Explication
Une clé de partition de l’index de cluster ne peut pas être mise à jour. Par conséquent, une colonne de clé étrangère avec une règle de suppression de SET NULL ne peut pas être une colonne d’une clé de partition si cette colonne est “nullable”. Si cette erreur se produit pour une opération ALTER TABLE, la clé étrangère ne peut pas être créée. Si cette erreur se produit pour une opération CREATE INDEX, l’index ne peut pas être créé.

Action du système
L’instruction ne peut pas être traitée.

Réponse du programmeur
Vérifiez la règle de suppression de la contrainte référentielle et les clés de partition de l’index. Effectuez l’une des actions suivantes:

  • Si l’opération erronée était CREATE INDEX, modifiez la définition de la clé de partition d’index ou supprimez et redéfinissez la contrainte référentielle avec une règle de suppression différente.
  • Si l’opération erronée était ALTER TABLE, modifiez la règle de suppression référentielle afin que toutes les clés d’index “nullables” ne fassent pas partie des clés étrangères.

SQLSTATE
56027

CODE RETOUR -638

TABLE table-name CANNOT BE CREATED BECAUSE COLUMN DEFINITION IS MISSING

Explication
L’instruction CREATE TABLE ne contient aucune définition de colonne.

Action du système
L’instruction SQL ne peut pas être exécutée.

Réponse du programmeur
Ajoutez une définition de colonne à l’instruction.

SQLSTATE
42601