gestion du commit en programmes batch

48
S D D C 1 er août 2000 C.O.M.B.A.T. GESTION DU COMMIT DANS LES PROGRAMMES BATCH Version 2.1. Le présent document décrit le produit COMBAT, réalisé par MAG INFO CONSULTANT, pour permettre aux programmeurs de simplifier la gestion des COMMIT dans les programmes Batch et de faciliter la reprise d'un programme après incident. Le produit COMBAT met en œuvre deux composants principaux: * L'outil, sous forme de dialogue sous ISPF, qui permet de définir la structure des lignes de reprise utilisées par le module CMTEXIT ainsi que la modification et la visualisation de ces lignes. La visualisation de la ligne de reprise d'un programme est possible y compris pendant l'exécution de ce programme. On dispose ainsi d'un moniteur de surveillance en temps réel du déroulement d'un programme Batch. * Le module CMTEXIT de réalisation effective du COMMIT et de mise à jour de la table de reprise. Ce module doit être appelé dans tous les programmes Batch qui doivent réaliser des COMMIT. La mise en œuvre de ce produit exige, au préalable, une maîtrise des principes généraux de réalisation du COMMIT. 1

Upload: mistieger

Post on 27-Dec-2015

75 views

Category:

Documents


6 download

DESCRIPTION

Gestion Du COMMIT en Programmes BatchLe présent document décrit le produit COMBAT, réalisé par MAG INFO CONSULTANT, pour permettre aux programmeurs de simplifier la gestion des COMMIT dans les programmes Batch et de faciliter la reprise d'un programme après incident.

TRANSCRIPT

Page 1: Gestion Du COMMIT en Programmes Batch

S D D C1er août 2000

C.O.M.B.A.T.

GESTION DU COMMIT

DANS LES PROGRAMMES BATCH

Version 2.1.

Le présent document décrit le produit COMBAT, réalisé par MAG INFO CONSULTANT, pour permettre aux programmeurs de simplifier la gestion des COMMIT dans les programmes Batch et de faciliter la reprise d'un programme après incident.

Le produit COMBAT met en œuvre deux composants principaux:

* L'outil, sous forme de dialogue sous ISPF, qui permet de définir la structure des lignes de reprise utilisées par le module CMTEXIT ainsi que la modification et la visualisation de ces lignes.La visualisation de la ligne de reprise d'un programme est possible y compris pendant l'exécution de ce programme. On dispose ainsi d'un moniteur de surveillance en temps réel du déroulement d'un programme Batch.

* Le module CMTEXIT de réalisation effective du COMMIT et de mise à jour de la table de reprise. Ce module doit être appelé dans tous les programmes Batch qui doivent réaliser des COMMIT.

La mise en œuvre de ce produit exige, au préalable, une maîtrise des principes généraux de réalisation du COMMIT.Ces principes ont été exposés dans le guide méthodologique, rédigé par MAG INFO CONSULTANT et intitulé "LE COMMIT DANS LES PROGRAMMES BATCH AVEC DB2".

1

Page 2: Gestion Du COMMIT en Programmes Batch

I - PRINCIPES GENERAUX

1.1 - L'outil de dialogue sous ISPF

Un outil de dialogue sous ISPF permet de définir, dans un sous-système DB2, des structures de lignes de reprise pour les programmes BATCH devant réaliser des COMMIT, et d'associer à chaque programme une structure parmi celles précédemment définies.

La table de reprise est unique, mais l'outil de dialogue permet de définir des structures de données totalement différentes, et à l'extrême, spécifiques à chaque programme.

Les fonctions offertes par l'outil de dialogue sous ISPF, sont les suivantes :

* choix du sous-système DB2

* choix d'un PDS par défaut, destiné à accueillir les définitions COBOL des différentes structures.

* choix d'une durée minimum, par défaut, entre deux COMMIT.

* définition de structures de données de reprise.

* définition de la ligne de reprise par programme ou "Programme - Occurrence" dans le cas des programmes destinés à s'exécuter en Inits multiples.

* modification du contenu des lignes de reprise.

* visualisation pendant le déroulement d'un programme de la ligne de reprise qui lui est associée.

1.2 - Le module CMTEXIT

Le module CMTEXIT est utilisable dans les programmes Batch qui souhaitent réaliser des COMMIT.

Il remplit les principales fonctions suivantes:

* lecture de la ligne de reprise

* mise à jour de la ligne de reprise et COMMIT impératif.

* mise à jour de la ligne de reprise et COMMIT, les deux opérations étant conditionnées par la constatation d'une durée minimum depuis le dernier COMMIT.

* mise à jour spéciale de la ligne de reprise en cas de fin de traitement du programme Batch.

2

Page 3: Gestion Du COMMIT en Programmes Batch

DPCMT00 G E S T I O N D E S C O M M I T S 00/08/09 -------- Mag Info Consultant -------- CHOIX 1 Identification du DB2 : DB2T 1- PARAMETRES PAR DEFAUT 2- GESTION DES STRUCTURES Nom structure ________ Fonction _ 3- GESTION DES LIGNES DE REPRISE D'UN PROGRAMME Nom du pgm ________ Fonction _ Nombre d'occurrences __ * en création seulement Nom de la structure ________ * 4- TRANSFERT VERS UN AUTRE DB2 Nom du pgm ________ DB2 cible ____ Fonction: (C) création (M) modification (S) suppression (V) visualisation F1=HELP F2=SPLIT F3=FIN F4=RETURN F5=RFIND F6=RCHANGE F7=UP F8=DOWN F9=SWAP F10=LEFT F11=RIGHT F12=RETRIEVE

3

Page 4: Gestion Du COMMIT en Programmes Batch

II - L'outil de dialogue sous ISPF

2.1 Ecran DPCMT00 Ecran d'accueil.

Il réclame un choix par l'utilisateur: "1" , "2" ou "3".

2.1.1. Choix "1". Paramètres par défaut.

Ce choix ne réclame la saisie d'aucun champ complémentaire.Il permet la consultation et la mise à jour des paramètres par défaut. ( Ecran DPCMT10 ) Ces paramètres par défaut sont spécifiques de chaque utilisateur.

La première fois que tout nouvel utilisateur accède au système, ce choix est impératif. En effet, dans ce cas le système refuse les choix 2 et 3, tant que les paramètres par défaut n'ont pas été saisis et validés.

2.1.2 Choix "2". Gestion des structures.

Champs complémentaires:

2.1.2.1. Nom ( de la structure ) :

8 caractères au maximum.

a) Pour faciliter les recherches, ce champ peut contenir un ou plusieurs caractères "*". Ce caractère entraîne une recherche du type LIKE en substituant chaque "*" et chaque "espace" par "%".L'écran DPCMT21 fournira les noms des structures qui répondent à la sélection.

Exemples :- "STRUC*" fournira la liste des structures dont le nom commence par STRUC.- "*A" fournira la liste les structures dont le nom contient la lettre A en n'importe quelle position.

Si le caractère "*" a été saisi dans le champ "Nom", le champ "Fonction" ne doit pas être renseigné. Il devra l'être sur l'écran DPCMT21.

b) Si le champ ne contient pas le caractère "*", le champ "Fonction" est obligatoirement renseigné.

2.1.2.2. Fonction : "C", "M" , "S" ou "V".

Ce champ est interdit si un caractère "*" a été saisi dans le champ "Nom". Sinon, il est obligatoire.

"C" Création d'une nouvelle structure."M" Modification d'une structure à condition qu'elle n'ait

jamais été référencée par une ligne de reprise."S" Suppression d'une structure si elle n'est référencée par

aucune ligne de reprise. "V" Visualisation d'une structure sans modification possible.

4

Page 5: Gestion Du COMMIT en Programmes Batch

2.1.3 Choix "3". Gestion des lignes de reprise.

Champs complémentaires:

2.1.3.1. Nom du pgm ( Nom du programme ) : 8 caractères au maximum.a) Pour faciliter les recherches, ce champ peut contenir un ou plusieurs caractères "*". Ce caractère entraîne une recherche du type LIKE en substituant chaque "*" et chaque "espace" par "%".L'écran DPCMT31 fournira les lignes de reprise dont le nom du programme répond à la sélection.

exemples:- "PGM1*" fournira la liste des lignes de reprise dont le nom du programme commence par PGM1.- "*" fournira la liste de toutes les lignes de reprise.

Si le caractère "*" a été saisi dans le champ "Nom", le champ "Fonction" ne doit pas être renseigné. Il le sera sur l'écran DPCMT31.

b) Si le champ ne contient pas le caractère "*", le champ "Fonction" est obligatoirement renseigné.

2.1.3.2. Fonction : "C", "M" , "S" ou "V".Ce champ est interdit si un caractère "*" a été saisi dans le champ "Nom du pgm". Sinon, il est obligatoire.Le système affiche ensuite l'écran DPCMT32.

Si la fonction demandée est une création ("C") , il est obligatoire de renseigner les champs "Nombre d'occurrences" et "Nom de la structure".

2.1.3.3. Nombre d'occurrences : Ce champ ne doit être renseigné qu'en cas de création de lignes de reprise pour un programme.Il est compris entre 1 et 99.Il n'est pas possible de modifier le nombre d'occurrences associées à un programme. Pour y parvenir, il faut supprimer les lignes de reprise du programme, puis les recréer avec le nombre d'occurrences désiré.

2.1.3.4. Nom de la structure Il désigne le nom de la structure à utiliser pour décrire les lignes de reprises associées à un programme.Ce champ ne doit être renseigné qu'en cas de création de lignes de reprise.Le nom de la structure est unique pour toutes les occurrences d'un programme.Une fois les lignes créées pour un programme, il n'est pas possible de changer la structure associée.

5

Page 6: Gestion Du COMMIT en Programmes Batch

DPCMT10 00/08/09 PARAMETRES PAR DEFAUT --------------------- -1 Nom du PDS pour COPY COBOL : SEX.MVS.VDEVA.DCLLIB -2 Durée entre 2 COMMIT (en secondes) : 5 -3 Identification du DB2 : DBT F1=HELP F2=SPLIT F3=FIN F4=RETURN F5=RFIND F6=RCHANGE F7=UP F8=DOWN F9=SWAP F10=LEFT F11=RIGHT F12=RETRIEVE

6

Page 7: Gestion Du COMMIT en Programmes Batch

DPCMT00 G E S T I O N D E S C O M M I T S 00/08/09 -------- Mag Info Consultant -------- CHOIX 2 Identification du DB2 : DB2T 1- PARAMETRES PAR DEFAUT 2- GESTION DES STRUCTURES Nom stucture COM*____ Fonction _

--------------------------------------------------------------------------------

DPCMT21 Row 1 to 2 of 2 LISTE DES STRUCTURES 00/08/09 --------------------- Command ===> Scroll ===> Sél Structure Modifiable Description COMBAGM N STRUCTURE COMBAGM COMB10 N FORMATION COMBAT (COMMIT BATCH)

7

Page 8: Gestion Du COMMIT en Programmes Batch

2.2 Ecran DPCMT10 Paramètres par défaut.

2.2.1. Nom du PDS pour COPY COBOL :44 caractères alphanumériques.Ce champ est obligatoire.Il contient le nom du PDS, dans lequel le système va stocker la définition COBOL de chaque structure, lors de sa création ou de sa modification.Le système vérifie que le nom du fichier fourni existe et qu'il s'agit bien d'un PDS.

2.2.2. Durée entre 2 COMMIT ( en secondes ) :4 caractères numériques.Ce champ est facultatif.Il contient la durée à utiliser par défaut lors de la création de lignes de reprise. Si ce champ n'est pas renseigné, le système assume une valeur par défaut de 5 secondes.

2.2.3. Identification du DB2 :4 caractères alphanumériques.Ce champ est obligatoire.Il indique le nom du sous système DB2 sur lequel on travaille.Aucune vérification de la validité du nom du sous-système ou de son fonctionnement n'a lieu à ce moment

2.2.4. Touches de fonctionsFP3 : permet l'enregistrement des données saisies.

2.3 Ecran DPCMT21 Liste des structures.

2.3.1. Sél (sélection).Ce caractère est offert en saisie à l'utilisateur.Il sert à spécifier l'une des actions possibles sur l'une des structures:"V" Visualisation de la définition de la structure, sans

possibilité de modification."M" Modification de la définition de la structure.

Les modifications ne seront réalisables que si la colonne"Modifiable" contient un "O" qui autorise lesmodifications.

"S" Suppression de la structure.Cette suppression n'est possible que si aucune ligne dereprise ne référence cette structure. Ce contrôle risqued'être ralenti par un nombre important de lignes de reprise.

2.3.2. Structure : Nom de la structure.

2.3.3. Modifiable : "O" ou "N" pour indiquer si Oui ou Non, la structure est modifiable.Une structure est modifiable tant qu'elle n'a pas été référencée par une ligne de reprise.

2.3.4. Description : Contient la désignation de la structure.

8

Page 9: Gestion Du COMMIT en Programmes Batch

DPCMT00 G E S T I O N D E S C O M M I T S 00/08/09 -------- Mag Info Consultant -------- CHOIX 3 Identification du DB2 : DB2T 1- PARAMETRES PAR DEFAUT 2- GESTION DES STRUCTURES Nom stucture Fonction 3- GESTION DES LIGNES DE REPRISE D'UN PROGRAMME Nom du pgm com*____ Fonction _ Nombre d'occurrences __ * en création seulement Nom de la structure ________ *

--------------------------------------------------------------------------------

DPCMT31 Row 1 to 11 of 12 LISTE DES LIGNES DE REPRISE 00/08/09 ---------------------------- Command ===> Scroll ===> PAGE Sél Programme Occ/Occ Structure Durée TS dernier commit COMBAGM 1 / 2 COMBAGM 5 0001-01-01-00.00.00.000000 COMBAGM 2 / 2 COMBAGM 5 0001-01-01-00.00.00.000000 COMB10 1 / 10 COMB10 5 0001-01-01-00.00.00.000000 COMB10 2 / 10 COMB10 5 0001-01-01-00.00.00.000000 COMB10 3 / 10 COMB10 5 0001-01-01-00.00.00.000000

9

Page 10: Gestion Du COMMIT en Programmes Batch

2.4 Ecran DPCMT31 Liste des lignes de reprise.

Dans ce qui suit, on évoque les lignes de reprise d'un programme, ce qui est la désignation correcte dans le cas de programme à occurrences multiples. Nos commentaires s'appuient sur ce type de programmes. Nous utilisons la même terminologie dans le cas des programmes à occurrence unique bien qu'ils ne possèdent qu'une seule ligne de reprise.

2.4.1. Sél (sélection).Ce caractère est offert en saisie à l'utilisateur.Il sert à spécifier l'une des actions possibles sur l'un des programmes :

"V" Visualisation des lignes de reprise du programme. Lavisualisation débutera par la ligne de reprise désignéeparmi celles du programme.

"M" Modification des lignes de reprises.La modification débutera par la ligne désignée.

"S" Suppression de toutes les lignes de reprise du programme.L'écran de confirmation affichera la ligne désignée.

2.4.2. Occ / Occ : Le premier nombre indique le numéro de la ligne de programme.Le deuxième nombre fournit le nombre total d'occurrences pour le programme.

2.4.3. Structure : Nom de la structure.Elle est identique pour toutes les occurrences d'un même programme.

2.4.4. Durée : Durée minimum en secondes qui doit séparer deux COMMIT.

2.4.5. TS dernier COMMIT : Contient le TIMESTAMP observé lors du dernier COMMIT, réalisé par CMTEXIT, pour cette ligne de reprise.

10

Page 11: Gestion Du COMMIT en Programmes Batch

DPCMT22 Row 1 to 6 of 8 MODIFICATION D'UNE STRUCTURE 00/08/09 ----------------------------- Command ===> Scroll ===> Structure ==> COMB10 Longueur ==> 34 Modifiable ==> N Copy PDS ==> SEX.DB2.VDBCA.DBPREEXP Langage ==> COBOL Désignation ==> FORMATION COMBAT (COMMIT BATCH) Type: (I)=Integer (S)=Smallint (C)=Char (DE)=Decimal (DA)=Date (TS)=Timestmp (T)=Time Nom Colonne Désignation Type Longueur 1 APPLICATION CHAR 4 2 CLI DECIMAL 11 3 CONT DECIMAL 11 4 NUM-OP DECIMAL 11 5 CPT-LECP DECIMAL 11 6 CPT-MAJP DECIMAL 11 F1=HELP F2=SPLIT F3=FIN F4= F5= F6= F7=UP F8=DOWN F9=SWAP F10= F11= F12=ABANDON

11

Page 12: Gestion Du COMMIT en Programmes Batch

2.5 Ecran DPCMT22 Mise à jour d'une structure.

2.5.1. Structure :Nom de la structure.Ce champ est toujours protégé sur cet écran.Pour des raisons de restrictions en COBOL, il est conseilléde choisir un nom de structure différent des programmes quidoivent s'appuyer sur cette structure.

2.5.2. Longueur :Champ calculé par le système et protégé. Il représente la longueur d'un groupe de données ( Reprise,Borne inférieure, Borne supérieure).La longueur d'un groupe ne peut dépasser 1000 caractères.

Il n'est pas possible de définir de nouvelles colonnes au delà de ce seuil.

2.5.3. Modifiable : Champ affiché par le système et protégé."O" ou "N" pour indiquer si Oui ou Non, la structure estmodifiable.Une structure est modifiable tant qu'elle n'a pas étéréférencée par une ligne de reprise.Dès qu'elle a été référencée par une ligne de reprise, unestructure ne peut être que Visualisée ou Supprimée.

2.5.4. Copy PDS :Champ affiché par le système et protégé.Il désigne le nom du PDS qui a été spécifié dans lesParamètres par défaut. (Choix "1" de l'écran DPCMT00).

Quand la structure est créée, et que cette création estvalidée par FP3, le système crée un membre, du même nom quela structure, dans ce PDS. Ce membre contient la descriptionCOBOL des trois groupes de données qui composent une lignede reprise. La description COBOL contenue dans ce membre est actualiséeaprès chaque modification validée par PF3.

Le membre correspondant est supprimé par le système, lorsque la structure est supprimée.

2.5.5. Langage :Champ affiché par le système et protégé.Désigne le langage de définition de la structure dans le PDS. Contient toujours "COBOL".

2.5.6. Désignation :Champ en saisie lors de la création ou de la modification.

2.5.7. Nom Colonne :Champ en saisie lors de la création ou de la modification.Désigne sur 18 caractères alphanumériques le nom de lacolonne. Le caractère "-" est accepté, le "_" est refusé.

2.5.8. Désignation :Champ en saisie lors de la création ou de la modification.Permet d'associer un commentaire au nom de la colonne.Ce commentaire se retrouve dans la description COBOL généréeautomatiquement et stockée, par le système, dans le PDS.

12

Page 13: Gestion Du COMMIT en Programmes Batch

2.5.9. TypeChamp en saisie lors de la création ou de la modification.Il décrit le type de la colonne. Les types possibles sont une partie de ceux permis par DB2.Cette compatibilité rend possible l'utilisation de ces colonnes dans des ordres SQL DB2 sans risquer de dégradation de performance. En effet, à ce jour, si un ordre SQL contient un prédicat du type COL1 = :Variable, DB2 n'utilise pas l'index éventuel sur COL1, si COL1 et :Variable n'ont pas une définition identique (type et longueur).

Les types peuvent être désignés complètement ou sous forme abrégée.

Les colonnes en "CHAR" ou "DECIMAL" exigent une longueur.

Les colonnes sont stockées dans le système comme des "Host-variables", les colonnes de type "DATE", "TIME" et "TIMESTMP" sont stockées selon leur format externe. Les autres colonnes sont stockées en format interne.

Type de Type Longueur Format COBOLcolonne Abrégé possible

INTEGER I S9(9) COMP SMALLINT S S9(5) COMP CHAR C 1 à 25 X(1) à X(25)DECIMAL DE 1 à 25 S9(1) à S9(25) COMP-3 DATE DA X(10)TIMESTMP TS X(26)TIME T X(8)

2.5.10. LongueurChamp en saisie lors de la création ou de la modification.Ce champ ne doit être renseigné que pour les colonnes detype DECIMAL ou CHAR.

NB : Tant qu'une structure est modifiable, tous les éléments sont modifiables ( Nom, Désignation, Type, Longueur).Une colonne peut être supprimée en effaçant à l'écran toutes ses caractéristiques. La renumérotation des colonnes est automatique.

13

Page 14: Gestion Du COMMIT en Programmes Batch

DPCMT32 MODIFICATION DES LIGNES DE REPRISE 00/08/09 ----------------------------------- PROGRAMME: COMB10 OCCURRENCES : 10 OCCURRENCE EN COURS : 1 STRUCTURE: COMB10 FORMATION COMBAT (COMMIT BATCH) COMMIT DUREE: 5 s DERNIER: 2000-08-09-14.52.52.746093 NOMBRE: 36 NB FONCTIONS I: 1 T: 150 F: 1 NB COMMITS FORCES: 0 ACCEPTES: 35 ECARTES: 115 Reprise Bornes Inf / Sup 01 APPLICATION sage aaaa sage 02 CLI 12305781 -999999999 20400000 03 CONT 547889 0 0 04 NUM-OP 6584 0 0 05 CPT-LECP 15279 0 0 06 CPT-MAJP 15279 0 0 Accès direct à l'occurrence : F1=AUTRE... F2=CAR->HéX F3=FIN F4=Raz1 F5= F6=Raz99 F7=ARRIERE F8=AVANT F9=SWAP F10=PREC F11=SUIV F12=ABANDON

14

Page 15: Gestion Du COMMIT en Programmes Batch

2.6 Ecran DPCMT32 Mise à jour des lignes de reprise.

Cet écran ne présente qu'une ligne de reprise à la fois pour un programme donné, mais permet de naviguer entre les différentes lignes associées à un programme.

Attention, certaines actions sont globales, elles peuvent concerner toutes les occurrences ( ou lignes de reprise) d'un programme.exemples :- La fonction "S" entraîne la suppression de toutes les occurrences d'un programme.- La touche de fonction PF6 agit sur toutes les occurrences.

2.6.1. ProgrammeChamp affiché par le système et protégé.

2.6.2. Occurrences :Champ affiché par le système et protégé.Désigne le nombre de lignes de reprise associées au programme.

2.6.3. Occurrence en cours :Champ affiché par le système et protégé.Désigne le numéro de la ligne de reprise affichée.

2.6.4. StructureChamp affiché par le système et protégé.Désigne le nom de la structure associée au programme.Le nom de la structure est suivi de sa désignation.

2.6.5. COMMIT DUREE :Champ affiché par le système et modifiable.Exprime en secondes la durée minimum qui doit séparer deuxCOMMIT pour CMTEXIT.

La valeur 0 indique à CMTEXIT qu'il doit réaliser un COMMITà chaque appel avec une fonction "T".

La modification de cette valeur n'est prise en compte par CMTEXIT que lors du prochain appel avec FONCT = "I".

2.6.6. DERNIERChamp affiché par le système et protégé.Donne le TIMESTAMP lors du dernier COMMIT réalisé par CMTEXIT.

2.6.7. NOMBRE :Champ affiché par le système et protégé.Donne le nombre de COMMIT réalisés par CMTEXIT lors dudernier traitement de l'occurrence du programme.

Ce nombre représente l'addition des 3 compteurs suivants :- Nombre de fonctions F - Nombre de COMMIT forcés - Nombre de COMMIT acceptés

15

Page 16: Gestion Du COMMIT en Programmes Batch

2.6.8. Compteurs.Les 6 compteurs qui suivent, Nombre de FONCTIONS et Nombre de COMMIT résument les réponses de CMTEXIT aux appels du programme.

Ces compteurs ne sont mis à jour, dans la table de reprise, qu'à l'occasion d'un COMMIT de CMTEXIT.

Ces compteurs sont réinitialisés lors d'un nouveau traitement d'une occurrence du programme. Un nouveau traitement démarre obligatoirement par un appel avec une FONCTION "I". Lors de l'appel à CMTEXIT avec une fonction "I", celui-ci détermine s'il s'agit d'un nouveau traitement ou d'un nouvel appel à l'intérieur du traitement en cours.

Lors de la visualisation d'une ligne de reprise, le contenu de ces compteurs est rafraîchi à chaque pression sur la touche "ENTREE". Si le programme est en cours d'exécution, il devient possible de suivre son activité pendant le déroulement du programme.

2.6.8.1. NB FONCTIONS I , T et F :Champs affichés par le système et protégés.

Ces compteurs indiquent le nombre d'appels avec chacune des fonctions "I" , "T" ou "F".

2.6.8.2. NB COMMIT-FORCES , ACCEPTES , ECARTES.Champs affichés par le système et protégés.

Ces 3 compteurs détaillent le nombre d'appels réalisés avec FONCT="T".

NB COMMIT-FORCES : Nombre d'appels à CMTEXIT avec FONCT ='T' et FORCE-COMMIT = 'O'. Tous ces appels ont été suivis d'un COMMIT. Voir NB-COMMIT-FORCE dans PARM-CMTEXIT.

NB COMMIT-ACCEPTES : Nombre d'appels à CMTEXIT avec FONCT ='T'

et FORCE-COMMIT différent de 'O'. Ces appels ont été suivis d'un COMMIT décidé par le module CMTEXIT. Voir NB-COMMIT-DECIDE dans PARM-CMTEXIT.

NB COMMIT-ECARTES : Nombre d'appels à CMTEXIT avec FONCT ='T'

et FORCE-COMMIT différent de 'O'. Ces appels n'ont pas entraîné de COMMIT. Voir NB-SANS-COMMIT dans PARM-CMTEXIT.

16

Page 17: Gestion Du COMMIT en Programmes Batch

2.6.9. Les colonnes.

2.6.9.1. Saisie des valeurs.L'écran détaille le contenu des données de la ligne de reprise.Chaque donnée est affichée sur 2 lignes, selon le format suivant:Numéro et Nom de la colonne Reprise Borne Inférieure Désignation de la colonne Borne supérieure

Si l'écran est accessible en mode création ou modification, il est possible de modifier le contenu des groupes Reprise, Borne inférieure et Borne supérieure.Les champs numériques doivent être valides, peuvent être signés et doivent respecter les plages de valeurs possibles selon leur type (SMALLINT ou INTEGER).Voir aussi les touches de fonctions PF4 et PF6 qui réalisent des mises à jour du contenu de ces informations.

2.6.9.2. Contraintes de cohérence.Pour illustrer ce sujet, nous présentons l'exemple d'une reprise sur 3 colonnes :Dans la table de reprise, pour chaque occurrence:- le groupe "BORNE INFERIEURE" doit contenir le triplet dont la valeur est immédiatement inférieure au plus petit triplet que doit sélectionner et traiter le curseur maître du programme.- le groupe "BORNE SUPERIEURE" contient le plus grand triplet que doit sélectionner le curseur maître. Dans la table de reprise, on trouve donc, des valeurs identiques entre : - le groupe "BORNE SUPERIEURE" de l'occurrence N,- et, le groupe "BORNE INFERIEURE" de l'occurrence N+1

Exemple de définition pour un programme à occurrences multiples:Occurrence COLONNE1 COLONNE2 COLONNE3

BI BS BI BS BI BS1 0 1 0 5 0 102 1 1 5 5 10 123 1 10 5 0 12 04 10 99 0 99 0 99

2.6.10. Accès direct à l'occurrence.Champ en saisie.Il permet à l'utilisateur d'accéder directement à l'occurrence désignée.Cet accès direct entérine les modifications de la ligne en cours.Voir aussi les touches de fonction PF10 et PF11.

2.6.11 La touche "ENTREE" en mode VisualisationSi la fonction "V" a été demandée pour aboutir à cette ligne de reprise, l'écran est en mode de "Visualisation".Dans ce cas, toute pression sur la touche "ENTREE" force le système à relire certaines informations dans la table de reprise.

Les informations ainsi rafraîchies sont les suivantes : TIMESTAMP du dernier COMMIT, Nombre de COMMIT, Nombre de fonctions "I", Nombre de fonctions "T", Nombre de fonctions "F", Nombre de COMMIT forcés, Nombre de COMMIT acceptés, Nombre de COMMIT écartés.

17

Page 18: Gestion Du COMMIT en Programmes Batch

2.6.12. Les touches de fonction

PF1

PF2

PF3 Retour à l'écran d'appel et validation.Toutes les modifications sur l'occurrence en cours sontentérinées.

PF4 Remise à zéro de l'occurrence en cours.Cette fonction ne concerne que l'occurrence en cours.Au cours de cette opération les zones en saisie affichées à l'écran sont recopiées dans la table de reprise, puis le contenu des colonnes du groupe "Borne inférieure" est recopié dans les colonnes du groupe de "Reprise".Ce traitement est similaire à celui réalisé par CMTEXIT avec la fonction "F" de fin de traitement.Les modifications réalisées par cette fonction sont immédiatement entérinées.

PF5

PF6 Remise à zéro globale.Cette fonction concerne toutes les occurrences du programmeen cours.Au cours de cette opération les zones en saisie del'occurrence en cours sont recopiées dans la table dereprise, puis, pour toutes les occurrences, le contenu descolonnes du groupe "Borne inférieure" est recopié dans lescolonnes du groupe de "Reprise".Les modifications réalisées par cette fonction sontimmédiatement entérinées.

PF7 Pagination arrière.Permet le positionnement sur les colonnes de rang inférieur.

PF8 Pagination avant.Permet le positionnement sur les colonnes de rang supérieur.

PF9 Fonction SWAP de TSO.

PF10 Occurrence précédente. Pagination latérale gauche. Permet de passer de l'occurrence n à l'occurrence n-1.Entérine les modifications sur l'occurrence n.

PF11 Occurrence suivante. Pagination latérale droite. Permet de passer de l'occurrence n à l'occurrence n+1.Entérine les modifications sur l'occurrence n.

PF12 Abandon.Permet d'abandonner la fonction en cours.Le système renvoie l'écran précédent.Permet d'annuler les dernières modifications réalisées parsaisie sur cet écran et non encore entérinées.

18

Page 19: Gestion Du COMMIT en Programmes Batch

III - Le module CMTEXIT

3.1 Invocation

Le module CMTEXIT est appelé de la façon suivante: CALL module USING Paramètres Structure SQLCA

BY CONTENT LENGTH OF Structure

3.1.1 Module.

Cette zone définie en niveau 01 ou 77 contient obligatoirement sur 8 caractères le nom du module CMTEXIT qui gère les COMMIT.

77 MODULE PIC X(8) VALUE 'CMTEXIT'.

3.1.2 Paramètres.

Cette structure contient les paramètres de communication entre CMTEXIT et le programme appelant.Ces paramètres sont décrits ci-dessous.

01 PARM-CMTEXIT.05 PGMNAME PIC X(8).05 OCCURRENCE PIC S9(4) COMP.

05 FONCT PIC X.05 FORCE-COMMIT PIC X.05 RET-CODE-CMTEXIT PIC S9(4) COMP.05 JUSTE-COMMIT PIC X.05 DUREE-ENTRE-COMMIT PIC S9(4) COMP-3.05 NOM-STRUCTURE PIC X(8).05 TS-DERNIER-COMMIT PIC X(26).

05 NB-APPEL-I PIC S9(15) COMP-3.05 NB-APPEL-T PIC S9(15) COMP-3.05 NB-COMMIT-FORCE PIC S9(15) COMP-3.05 NB-COMMIT-DECIDE PIC S9(15) COMP-3.05 NB-SANS-COMMIT PIC S9(15) COMP-3.05 NB-APPEL-F PIC S9(15) COMP-3.

3.1.2.1. PGMNAME :

Ce champ est renseigné par le programme appelant.Il doit contenir le nom du programme appelant.

Cette information n'est prise en compte par CMTEXIT que lors de l'appel avec un code fonction = 'I'.

3.1.2.2. OCCURRENCE :

Ce champ est renseigné par le programme appelant.Il doit contenir le numéro d'occurrence du programme appelant dans le cas o- le programme peut s'exécuter en plusieurs Inits en parallèle. Si tel est le cas, le numéro d'occurrence doit être transmis au programme par une clause PARM, et le programme doit affecter, au contenu du champ, le numéro de l'occurrence lu en paramètre.

19

Page 20: Gestion Du COMMIT en Programmes Batch

Dans tous les cas o- le programme n'est pas découpé en plusieurs Inits en parallèle, c'est à dire dans la majorité des cas, ce champ doit contenir la valeur 1.

Cette information n'est prise en compte par CMTEXIT que lors de l'appel avec un code fonction = 'I'.

NB : Ce sont les deux valeurs contenues respectivement dans PGMNAME et OCCURRENCE qui permettent au module CMTEXIT de retrouver la ligne de reprise associée au couple "nom du programme" et "occurrence". Cette recherche est effectuée uniquement lors de l'appel avec le code fonction 'I'.

3.1.2.3. FONCT :

Ce champ est renseigné par le programme appelant.Il doit contenir, sur un caractère, le code de la fonction demandée au module CMTEXIT.Ce champ peut contenir l'une des valeurs suivantes : I , T ou F.

3.1.2.3.1 FONCTION "I" :

Initialisation ou lecture de la ligne de reprise afin d'assurer le repositionnement du curseur maître.Dans ce cas, le module CMTEXIT retrouve la ligne de reprise associée au couple "programme - occurrence" et restitue le contenu de cette ligne dans la zone de communication "Structure" (fournie parmi l'un des paramètres de l'ordre CALL CMTEXIT).

L'appel à CMTEXIT avec la fonction 'I' doit obligatoirement être le premier réalisé au cours de chaque exécution d'un programme.

Les 3 groupes de données "Reprise", "Borne inférieure" et "Borne supérieure" sont documentés avec le contenu de la ligne de reprise.Les colonnes de la clé logique de reprise sont celles qui ne servent qu'au repositionnement logique d'un curseur maître. Le repositionnement peut être effectué à partir de données ou de compteurs logiques.

Les compteurs à usage statistique ne font pas partie des colonnes logiques de reprise.

Principes :

a) Il n'y a que le programme appelant qui peut déterminer s'il démarre un nouveau traitement ou s'il s'agit de la continuation d'un traitement précédemment interrompu.

b) Si le programme appelant est au début d'un nouveau traitement, il constate que le contenu des colonnes du groupe de "Reprise" est identique à celui du groupe "Borne inférieure".

c) Si le contenu des colonnes logiques de reprise est différent dans les groupes "Reprise" et "Borne inférieure", le programme appelant se trouve dans le cas de la poursuite d'un traitement antérieur qui a été interrompu. Il s'agit d'un repositionnement en cours de traitement.

d) Le contenu des colonnes logiques de reprise doit normalement servir à l'ouverture du curseur maître du programme appelant.( Veiller à documenter les host-variables du curseur maître avant son ouverture).

20

Page 21: Gestion Du COMMIT en Programmes Batch

3.1.2.3.2. FONCTION "T" :

C'est la fonction de traitement standard du module.

Quand le module est appelé pour réaliser cette fonction, il examine en premier lieu la valeur du paramètre FORCE-COMMIT (décrit au paragraphe 3.1.2.6). Si ce paramètre contient la valeur "O" , on poursuit au repère A.

Si le paramètre FORCE-COMMIT contient une valeur différente de "O", le module CMTEXIT recherche la valeur du TIMESTAMP au moment du précédent COMMIT.Ce TIMESTAMP est comparé au TIMESTAMP courant.

Le module en déduit une durée écoulée (en secondes) qui sépare les deux TIMESTAMP.

Si cette durée écoulée est inférieure à la durée minimum entre deux COMMIT telle que trouvée dans la ligne de reprise, aucune mise à jour n'est effectuée, le module CMTEXIT se termine par un code retour 0.

Si la durée écoulée est supérieure ou égale à la durée minimum entre deux COMMIT telle que trouvée dans la table de reprise, on poursuit au repère A.

NB : Si la durée minimum entre deux COMMIT est nulle, la durée écoulée lui sera toujours supérieure. Le positionnement de ce paramètre à zéro permet de réaliser un COMMIT après chaque unité logique de travail sans imposer une modification du programme.

REPERE A:

Le module CMTEXIT réalise principalement les opérations suivantes:

1) mise à jour de la ligne de reprise :par rafraîchissement du TIMESTAMP du dernier COMMIT, et par recopie dans la ligne de reprise des informationstrouvées dans la zone de communication "Structure".

2) réalisation effective d'un COMMIT.

3) mémorisation du TIMESTAMP courant en vue de la détermination de la durée écoulée lors des prochains appels.

4) retour au programme appelant.

3.1.2.3.3. FONCTION "F" :

La fonction 'F' correspond à une fonction de fin d'un traitement Batch.

Il faut remettre la clé de reprise dans son état initial, par recopie des valeurs du groupe "Borne inférieure" dans le groupe de "reprise".

Par convention, on est au début d'un traitement quand la clé logique de reprise est identique dans le groupe de "reprise" et dans le groupe "borne inférieure".

21

Page 22: Gestion Du COMMIT en Programmes Batch

Dans le traitement de cette fonction 'F', le module réalise donc les opérations dans l'ordre suivant :

1) mise à jour de la ligne de reprise :par rafraîchissement du TIMESTAMP du dernier COMMIT, et par recopie dans la ligne de reprise des informationstrouvées dans la zone de communication "Structure".

2) mise à jour de la ligne de reprisepar rafraîchissement du TIMESTAMP du dernier COMMIT, et par recopie dans le groupe de "reprise" de toutes lesinformations contenues dans le groupe "Borne inférieure".

3) réalisation effective d'un COMMIT.

4) mémorisation du TIMESTAMP courant en vue de la détermination de la durée écoulée lors des prochains appels.

4) retour au programme appelant.

3.1.2.4. FORCE-COMMIT :

Ce champ est renseigné par le programme appelant, et modifié par CMTEXIT.

Le contenu de ce champ n'est pris en considération que dans le cas de la fonction 'T'.Lors du traitement de la FONCTION 'I', CMTEXIT ne réalise aucun COMMIT, quelle que soit la valeur de FORCE-COMMIT.Lors du traitement de la FONCTION 'F', CMTEXIT réalise toujours un COMMIT après les mises à jour de la table de reprise.

FORCE-COMMIT contient soit la valeur "O" (Oui) ou toute autre valeur interprétée comme 'N' (Non) .

Le programme appelant a le choix entre deux possibilités :

a) il donne l'ordre au module CMTEXIT de réaliser impérativement un COMMIT.FORCE-COMMIT contient, dans ce cas, la valeur "O" (Oui).

b) il laisse au module CMTEXIT le soin de juger de l'opportunité de réaliser ou non un COMMIT, en fonction du temps écoulé depuis le précédent COMMIT et de la durée qui doit les séparer.FORCE-COMMIT contient dans ce cas une valeur différente de "O".

La durée minimum entre 2 COMMIT a été spécifiée pour le programme grâce à l'outil de dialogue ISPF.

NB : Il est possible d'imposer un COMMIT impératif lors de chaque appel du module CMTEXIT avec la FONCTION 'T' :

* soit en codant 'O' dans le paramètre FORCE-COMMIT, avant chaque appel à CMTEXIT. En effet, CMTEXIT renvoie toujours la valeur 'N' dans ce paramètre, après avoir réalisé un COMMIT.

* soit en indiquant une durée de COMMIT à zéro dans la ligne de reprise associée au couple "programme - occurrence". Dans ce cas, la valeur du paramètre FORCE-COMMIT est indifférente.

22

Page 23: Gestion Du COMMIT en Programmes Batch

Cette solution peut être utile, dans des cas exceptionnels, quand un programme s'interrompt anormalement sans fournir d'indication sur son contexte au moment de l'interruption. Un positionnement temporaire de la durée du COMMIT à zéro permettra de retrouver la clé logique de reprise de la dernière unité logique de travail traitée correctement.

Comme indiqué dans notre GUIDE METHODOLOGIQUE (paragraphe 6.3), nous déconseillons la demande systématique de COMMIT après chaque unité logique de travail. RAPPEL : CMTEXIT renvoie toujours la valeur 'N' dans ce paramètre, après avoir réalisé le COMMIT demandé.

3.1.2.5. RET-CODE-CMTEXIT :

Ce champ est renseigné par le module CMTEXIT.Il contient le code retour d'exécution du module CMTEXIT.Le champ contient une valeur nulle dans le cas d'une exécution normale.

Le test de ce code retour est impératif après chaque appel du module CMTEXIT. Toute valeur différente de zéro doit être considérée comme anormale et doit entraîner l'arrêt du programme appelant, de la même manière que si tout autre ordre de mise à jour SQL, du programme appelant, se réalise mal.

Si le code retour de CMTEXIT est différent de zéro, le programme appelant doit donc :

a) récupérer ce code retour et restituer ( par DISPLAY ou impression) tous les paramètres de communication entre le programme appelant et le module CMTEXIT.

b) tester si le SQLCODE est différent de zéro. Si tel est le cas, le programme appelant doit réaliser une analyse complémentaire de la SQLCA, afin de mettre en forme et restituer le message d'erreur de DB2 formaté par DSNTIAR.

c) terminer l'exécution par la génération d'un ABEND USER ou d'un ordre ROLLBACK afin d'assurer une intégrité des données.

23

Page 24: Gestion Du COMMIT en Programmes Batch

TABLEAU DES VALEURS POSSIBLES DU CODE RETOUR DE CMTEXIT

valeur signification

0 OK. Tout est normal.

1 Fonction invalide. La zone FONCT contient une valeur différente de "I",

"T" ou "F".

2 Inutilisé.

3 La ligne de reprise identifiée par le couple "nom du

programme" et "occurrence" n'a pas été trouvée dans latable de reprise.

4 Problème d'accès DB2 lors du SELECT sur la table dereprise. Il est conseillé d'analyser la SQLCA.

5 Le nom de structure associée au programme dans la tablede reprise, n'a pas été trouvé dans la table desstructures.

6 Problème d'accès DB2 lors du SELECT sur la table des

structures.Il est conseillé d'analyser la SQLCA.

7 La longueur de la structure définie dans le système estdifférente de celle décrite dans le programme.Vérifier si la description COBOL de la structurecorrespond à la description contenue dans la table descolonnes d'une structure. Cette description estaffichable par l'outil de dialogue ISPF.

8 La ligne de reprise a été trouvée, mais elle contientune information interne au système qui indique quecette ligne n'a pas été validée.Il faut accéder, sous dialogue ISPF, avec la fonctionde modification, à cette ligne et la valider par latouche de fonction PF3.

9 Problème DB2 lors de la mise à jour de la table dereprise, avant le COMMIT.Il est conseillé d'analyser la SQLCA.

24

Page 25: Gestion Du COMMIT en Programmes Batch

3.1.2.6. JUSTE-COMMIT :

Ce champ est renseigné par le module CMTEXIT.

Il indique si le module CMTEXIT vient de réaliser ou non un COMMIT.La valeur "O" (Oui) indique que CMTEXIT vient de réaliser un COMMIT.Toute autre valeur indique le contraire.

3.1.2.7. DUREE-ENTRE-COMMIT.

Ce champ est renseigné par le module CMTEXIT.

Il contient la durée minimum qui doit séparer deux COMMIT.Cette durée est exprimée en secondes.

Il est fourni à titre indicatif. Il provient de la ligne de reprise associée au couple "programme - occurrence".

Son contenu est rafraîchi à chaque appel avec une fonction 'I'.

3.1.2.8. NOM-STRUCTURE.

Ce champ est renseigné par le module CMTEXIT.

Il contient le nom de la structure associée au programme dans la table de reprise.

Il est fourni à titre indicatif. Il provient de la ligne de reprise associée au couple "programme - occurrence".

Son contenu est rafraîchi à chaque appel avec une fonction 'I'.

3.1.2.9. TS-DERNIER-COMMIT.

Ce champ est renseigné par le module CMTEXIT.

Il contient le TIMESTAMP observé lors du précédent COMMIT.Le précédent COMMIT peut provenir d'une exécution antérieure du programme, ou du traitement en cours.

Ce TIMESTAMP est aussi mémorisé dans la table de reprise.

3.1.2.10. Les compteurs.

Il existe 6 compteurs renseignés par le module CMTEXIT: * NB-APPEL-I* NB-APPEL-T* NB-COMMIT-FORCE* NB-COMMIT-DECIDE* NB-SANS-COMMIT* NB-APPEL-F

Ces compteurs sont remis à zéro lors du premier appel avec la fonction 'I' au cours d'une nouvelle exécution du programme.

Ces compteurs sont mémorisés dans la table des lignes de reprise.Ils sont affichables par l'outil de dialogue ISPF.

25

Page 26: Gestion Du COMMIT en Programmes Batch

La définition de ces compteurs est la suivante :

1) NB-APPEL-I : Nombre d'appels à CMTEXIT avec FONCT='I'

2) NB-APPEL-T : Nombre d'appels à CMTEXIT avec FONCT='T'

Les trois compteurs qui suivent détaillent NB-APPEL-T.2.a NB-COMMIT-FORCE : Nombre d'appels à CMTEXIT avec FONCT ='T'

et FORCE-COMMIT = 'O'. Tous ces appels ont été suivis d'un COMMIT.

2.b NB-COMMIT-DECIDE: Nombre d'appels à CMTEXIT avec FONCT ='T'

et FORCE-COMMIT différent de 'O'. Ces appels ont été suivis d'un COMMIT décidé par le module CMTEXIT.

2.c NB-SANS-COMMIT : Nombre d'appels à CMTEXIT avec FONCT ='T' et FORCE-COMMIT différent de 'O'. Ces appels n'ont pas entraîné de COMMIT.

3) NB-APPEL-F : Nombre d'appels à CMTEXIT avec FONCT='F'

3.1.3 Structure.

Cette structure contient la définition des critères de reprise, des bornes inférieures et supérieures utilisées par le programme appelant.

Lors de la définition de la ligne de reprise du programme, un nom de structure a été associé à ce programme. Le module de dialogue ISPF a stocké dans le PDS associé à ce programme la déclaration COBOL correspondant à cette structure.

Le nom du membre du PDS qui contient la définition de la structure est identique au nom de cette structure.

La définition de cette structure doit donc être implantée enWORKING-STORAGE SECTION :

* soit implicitement, en utilisant la clause COPY de COBOL COPY structure

Il est bien sûr nécessaire de prévoir dans les procédures de compilation, la possibilité de référencer le ou les PDS concernés.Nous recommandons ce type de déclaration. * soit explicitement, en recopiant la définition évoquée plus haut, directement dans le programme. Nous ne recommandons pas une telle pratique, bien que celle-ci soit acceptable, dans la mesure o- le module de dialogue ISPF interdit toute modification dans la définition d'une structure, dès que celle-ci a été associée à un programme.

La structure est composée de 3 groupes de données:1) groupe de "reprise" (informations préfixées par "RE-")2) groupe "Borne inférieure" (informations préfixées par "BI-")3) groupe "Borne supérieure" (informations préfixées par "BS-")

Chaque groupe de données comporte la même liste d'informations élémentaires. Cette liste d'informations élémentaires provient de la définition de la structure qui a été associée au programme par l'outil de dialogue ISPF.

26

Page 27: Gestion Du COMMIT en Programmes Batch

Parmi la liste d'informations élémentaires, il faut distinguer celles qui constituent la clé logique de reprise, de celles qui représentent des compteurs à usage statistique.

Chaque groupe de données est destiné à un usage particulier.

La clé logique de reprise au moment du COMMIT doit être stockée dans le groupe de "reprise". Les bornes inférieures et supérieures de la clé logique de reprise doivent être stockées dans les groupes correspondants.

Les compteurs à usage statistique doivent être stockés dans le groupe "Borne supérieure" (ou à la rigueur dans le groupe "Borne inférieure"). De cette façon, on peut visualiser ces compteurs, grâce à l'outil de dialogue, après la fin du programme. En effet, la FONCTION 'F' recopie le contenu du groupe "Borne inférieure" dans le groupe de "reprise" et perd ainsi le contenu précédent du groupe de reprise.

3.1.4 SQLCA.

Cette structure correspond à la SQLCA de DB2. La définition de cette structure est obtenue par l'ordre EXEC SQL INCLUDE SQLCA ...

Cet ordre déclaratif doit être implanté en WORKING-STORAGE SECTION.

La SQLCA est passée en paramètre au module CMTEXIT, afin que celle-ci soit renseignée lors des appels à DB2 réalisés par le module CMTEXIT. De cette façon, en cas d'anomalie DB2 rencontrée par le module CMTEXIT, le programme appelant dispose des informations de la SQLCA et peut (doit) mettre en forme et restituer le contenu du message d'erreur fourni par DB2.

Si le code retour du module CMTEXIT est différent de zéro, le programme appelant doit aussi tester le SQLCODE.Si celui-ci est différent de zéro, le programme appelant doit analyser et restituer la SQLCA après appel au module DSNTIAR.

ATTENTION : le module CMTEXIT réalise des ordres DB2. Il utilise la SQLCA. Le contenu de celle-ci est donc modifié à chaque appel du module CMTEXIT. Le programmeur doit être vigilant dans les tests du SQLCODE comme lors de tout appel à un sous-programme qui réalise des ordres DB2.

Exemple :EXEC SQL UPDATE ...

IF SQLCODE = 0 CALL CMTEXIT USING ...END-IF.

IF SQLCODE NOT = 0

===> Attention, ce SQLCODE différent de zéro peut avoir deux originescomplètement différentes :

a) l'ordre EXEC SQL UPDATE du programme principal a obtenu ce code retour. ou

b) l'ordre EXEC SQL UPDATE s'est correctement passé, le SQLCODE correspondant contient la valeur 0. Dans ce cas, le programme principal a fait appel au module CMTEXIT et ce dernier a obtenu un SQLCODE différent de zéro au cours de son déroulement.

27

Page 28: Gestion Du COMMIT en Programmes Batch

La SQLCA n'est pas modifiée par le module CMTEXIT si celui-ci n'a réalisé aucun ordre DB2 à cause d'un problème dans la réception des paramètres.

3.2. BIND.

Le module CMTEXIT réalise des accès à DB2, il est donc nécessaire de réaliser, lors de l'installation sur un sous-système DB2, un BIND du module sous forme de PACKAGE.

IL est bien sûr impératif de faire figurer ce module dans la PKLIST du PLAN de tout programme batch qui fait appel à ce module.

28

Page 29: Gestion Du COMMIT en Programmes Batch

IV – STRUCTURE GENERALE D’UN PROGRAMME BATCH AVEC COMMIT.

IDENTIFICATION DIVISION. PROGRAM-ID. COMB10. *========================* WORKING-STORAGE SECTION. 77 CPT-LOCK PIC S9(04) COMP. 77 CMT-PARTITION PIC 99. 01 PGCOMMIT PIC X(08) VALUE 'CMTEXIT '. * COPY CMTEXIT. 01 PARM-CMTEXIT.

05 PGMNAME PIC X(8). 05 OCCURRENCE PIC S9(4) COMP. 05 FONCT PIC X. 05 FORCE-COMMIT PIC X. 05 RET-CODE-CMTEXIT PIC 9(4) COMP. 05 JUSTE-COMMIT PIC X. 05 DUREE-ENTRE-COMMIT PIC S9(04) COMP-3. 05 NOM-STRUCTURE PIC X(8). 05 TS-DERNIER-COMMIT PIC X(26). 05 NB-APPEL-I PIC S9(15) COMP-3. 05 NB-APPEL-T PIC S9(15) COMP-3. 05 NB-COMMIT-FORCE PIC S9(15) COMP-3. 05 NB-COMMIT-DECIDE PIC S9(15) COMP-3. 05 NB-SANS-COMMIT PIC S9(15) COMP-3. 05 NB-APPEL-F PIC S9(15) COMP-3.

29

Page 30: Gestion Du COMMIT en Programmes Batch

COPY COMB10 . Déclaration de la structure de reprise La structure contient les 3 groupes de données : 1) groupe de reprise 2) groupe « borne inférieure » 3) groupe « borne supérieure » dans le groupe de reprise, la clé logique de reprise est constituée de 4 colonnes : application, client, contrat et numéro d’opération Cette déclaration est disponible via une clause COPY.

01 COMB10. * GROUPE DE REPRISE 05 RE-APPLICATION PIC X(4). 05 RE-CLI PIC S9(11)V USAGE COMP-3. 05 RE-CONT PIC S9(11)V USAGE COMP-3. 05 RE-NUM-OP PIC S9(11)V USAGE COMP-3. 05 RE-CPT-LECP PIC S9(11)V USAGE COMP-3. 05 RE-CPT-MAJP PIC S9(11)V USAGE COMP-3. 05 RE-CPT-LECT PIC S9(11)V USAGE COMP-3. 05 RE-CPT-MAJT PIC S9(11)V USAGE COMP-3. * GROUPE BORNE INFERIEURE 05 BI-APPLICATION PIC X(4). 05 BI-CLI PIC S9(11)V USAGE COMP-3. 05 BI-CONT PIC S9(11)V USAGE COMP-3. 05 BI-NUM-OP PIC S9(11)V USAGE COMP-3. 05 BI-CPT-LECP PIC S9(11)V USAGE COMP-3. 05 BI-CPT-MAJP PIC S9(11)V USAGE COMP-3. 05 BI-CPT-LECT PIC S9(11)V USAGE COMP-3. 05 BI-CPT-MAJT PIC S9(11)V USAGE COMP-3. * GROUPE BORNE SUPERIEURE 05 BS-APPLICATION PIC X(4). 05 BS-CLI PIC S9(11)V USAGE COMP-3. 05 BS-CONT PIC S9(11)V USAGE COMP-3. 05 BS-NUM-OP PIC S9(11)V USAGE COMP-3. 05 BS-CPT-LECP PIC S9(11)V USAGE COMP-3. 05 BS-CPT-MAJP PIC S9(11)V USAGE COMP-3. 05 BS-CPT-LECT PIC S9(11)V USAGE COMP-3. 05 BS-CPT-MAJT PIC S9(11)V USAGE COMP-3.

EXEC SQL INCLUDE SQLCA END-EXEC.

EXEC SQL INCLUDE JFB116V1 END-EXEC.

01 JFB116C1 REDEFINES JFB116V1. 05 B116-CLE. 10 B116-APPLICATION PIC X(4). 10 B116-CLI PIC S9(11) COMP-3. 10 B116-CONT PIC S9(3) COMP-3. 10 B116-NUM-OP PIC S9(11) COMP-3. 05 B116-INFO-LOCK. 10 B116-TYPE-LOCK PIC S9(3) COMP-3. 10 B116-TIME-STAMP PIC X(26). 10 B116-TERM-ID PIC X(4). 10 B116-CODE-PGM PIC X(8). 10 B116-CODE-SIGNA PIC X(6).

30

Page 31: Gestion Du COMMIT en Programmes Batch

Déclaration du curseur maître Celui-ci simule le cas d’un programme à occurrences multiples, dont chaque occurrence doit traiter une plage définie par application, client Dans la table de reprise, pour chaque occurrence : - le groupe «BORNE INFERIEURE » contient le couple de la valeur la plus basse que doit sélectionner le curseur - le groupe « BORNE SUPERIEURE » contient le plus grand couple que doit sélectionner le curseur Dans la table de reprise on trouvera donc des valeurs consécutives Entre le groupe « BORNE SUPPRIEURE » de l’occurrence N et Le groupe « BORNE INFERIEURE » de l’occurrence N+1

a EXEC SQL DECLARE CURS_LOCK CURSOR WITH HOLD FOR b SELECT APPLICATION , CLI , CONT , NUM_OP c FROM JFB116V1 d WHERE TYPE_LOCK > 0 e AND ( ( APPLICATION = :RE-APPLICATION f AND CLI = :RE-CLI g AND CONT = :RE-CONT h AND NUM_OP > :RE-NUM-OP ) i OR ( APPLICATION = :RE-APPLICATION j AND CLI = :RE-CLI k AND CONT > :RE-CONT ) l OR ( APPLICATION = :RE-APPLICATION m AND CLI > :RE-CLI ) m OR ( APPLICATION > :RE-APPLICATION ) ) o AND APPLICATION BETWEEN :BI-APPLICATION p AND :BS-APPLICATION q AND CLI BETWEEN :BI-CLI r AND :BS-CLI s ORDER BY APPLICATION , CLI , CONT , NUM_OP END-EXEC.

les lignes e à m servent à la reprise du programme après les dernières valeurs traitées, ou valeurs initiales les lignes o à permettent de s’assurer que le curseur ne ramène pas un couple en dehors de la plage traitée

31

Page 32: Gestion Du COMMIT en Programmes Batch

PROCEDURE DIVISION USING FILLER-LINKAGE. COPY CAFINIT REPLACING ' ' BY ' '.

MOVE LINK-SSID TO WS-SSID. MOVE LINK-PLAN TO WS-PLAN. MOVE LINK-PARTITION TO CMT-PARTITION.

PARAGRAPHE-PRINCIPAL. 300-TRAIT

le nom du programme appelant doit être fourni à CMTEXIT MOVE 'COMB10' TO PGMNAME OF PARM-CMTEXIT.

ainsi que le numéro de l’occurrence, ici via les paramètres de CAF

MOVE CMT-PARTITION TO OCCURRENCE OF PARM-CMTEXIT.

lecture de la table de reprise, elle fournit les valeurs de reprise

MOVE 'I' TO FONCT OF PARM-CMTEXIT. MOVE 'N' TO FORCE-COMMIT OF PARM-CMTEXIT.

CALL PGCOMMIT USING PARM-CMTEXIT MY-STRUCT SQLCA BY CONTENT LENGTH OF MY-STRUCT. PERFORM 000-COMMIT-TEST-ERREUR THRU 000-FIN-COMMIT-TEST-ERREUR.

MOVE RE-APPLICATION TO COM-APPLICATION. MOVE RE-CLI TO COM-CLI. MOVE RE-CONT TO COM-CONT. MOVE RE-NUM-OP TO COM-NUM-OP.

Les compteurs liés au passage sont remis à zéro MOVE 0 TO BS-CPT-LECP. MOVE 0 TO BS-CPT-MAJP.

on détermine s’il s’agit d’une reprise après incident ou d’un nouveau traitement

IF RE-APPLICATION = BI-APPLICATION AND RE-CLI = BI-CLI AND RE-CONT = BI-CONT AND RE-NUM-OP = BI-NUM-OP MOVE 0 TO BS-CPT-LECT MOVE 0 TO BS-CPT-MAJT END-IF

si l’on souhaite que les compteurs du passage et du traitement soient dès à présent stockés dans la table de reprise, on appelle le module CMTEXIT en forçant le commit.

MOVE 'T' TO FONCT OF PARM-CMTEXIT. MOVE 'O' TO FORCE-COMMIT OF PARM-CMTEXIT.

CALL PGCOMMIT USING PARM-CMTEXIT MY-STRUCT SQLCA BY CONTENT LENGTH OF MY-STRUCT. PERFORM 000-COMMIT-TEST-ERREUR THRU 000-FIN-COMMIT-TEST-ERREUR.

ouverture du curseur maître avec la clé de reprise EXEC SQL OPEN CURS_LOCK END-EXEC. IF SQLCODE NOT = 0 DISPLAY ' PB OPEN CURSEUR LOCK JFB116V1 ' ..... END-IF.

32

Page 33: Gestion Du COMMIT en Programmes Batch

pendant toue la boucle de traitement, on laisse le soin au module CMTEXIT de décider de l’opportunité du COMMIT. On positionne les paramètres pour toute la boucle.

MOVE 'T' TO FONCT OF PARM-CMTEXIT. MOVE 'N' TO FORCE-COMMIT OF PARM-CMTEXIT.

EXEC SQL FETCH CURS_LOCK INTO :B116-APPLICATION ,:B116-CLI ,:B116-CONT ,:B116-NUM-OP END-EXEC.

EXEC SQL UPDATE JFB116V1 SET TYPE_LOCK = 0 ,TERM_ID = ' ' ,CODE_PGM = ' ' ,CODE_SIGNA = ' ' WHERE APPLICATION = :B116-APPLICATION AND CLI = :B116-CLI AND CONT = :B116-CONT AND NUM_OP = :B116-NUM-OP END-EXEC.

après l’exécution de l’update, la récupération du sqlcode –911(DEADLOCK) permet d’éviter de laisser filer l’abend et de redémarrer au début programme

IF SQLCODE NOT = 0 AND SQLCODE NOT = -911 DISPLAY ' PB UPDATE LOCK JFB116V1 ' ..... ELSE IF SQLCODE = -911 AND CPT-LOCK <= 10 ADD 1 TO CPT-LOCK GO TO 300-TRAIT END-IF END-IF. MOVE 0 TO CPT-LOCK

Le programme atteint la fin d’une unité logique de travail. Il va appeler le module CMTEXIT en lui laissant le choix de réaliser un COMMIT ou non. Avant l’appel le programme charge la clé de reprise

MOVE B116-APPLICATION TO RE-APPLICATION. MOVE B116-CLI TO RE-CLI. MOVE B116-CONT TO RE-CONT. MOVE B116-NUM-OP TO RE-NUM-OP. MOVE 'T' TO FONCT OF PARM-CMTEXIT. MOVE 'N' TO FORCE-COMMIT OF PARM-CMTEXIT.

CALL PGCOMMIT USING PARM-CMTEXIT MY-STRUCT SQLCA BY CONTENT LENGTH OF MY-STRUCT.

33

Page 34: Gestion Du COMMIT en Programmes Batch

PERFORM 000-COMMIT-TEST-ERREUR THRU 000-FIN-COMMIT-TEST-ERREUR.

Pour faire un traitement après chaque COMMIT … IF JUSTE-COMMIT = 'O' ADD 1 TO NB-COMMIT DISPLAY 'COM-APPLI ' COM-APPLICATION ' CLI ' COM-CLI ' CONT ' COM-CONT ' NUM_OP ' COM-NUM-OP END-IF.

Fin de la boucle de traitement

On a atteint la fin du traitement. Les compteurs statistiques sont disponibles dans le groupe « BORNE SUPERIEURE ». Il faut mettre à jour la clé logique de reprise avec sa valeur minimum. On appelle donc le module CMTEXIT avec la fonction «F».

MOVE 'F' TO FONCT OF PARM-CMTEXIT. MOVE 'O' TO FORCE-COMMIT OF PARM-CMTEXIT.

CALL PGCOMMIT USING PARM-CMTEXIT MY-STRUCT SQLCA BY CONTENT LENGTH OF MY-STRUCT. PERFORM 000-COMMIT-TEST-ERREUR THRU 000-FIN-COMMIT-TEST-ERREUR.

Paragraphe de gestion des erreurs de CMTEXIT 000-COMMIT-TEST-ERREUR. *----------------------- IF RET-CODE-CMTEXIT OF PARM-CMTEXIT NOT = 0 OR FONCT OF PARM-CMTEXIT = 'F' DISPLAY '-- DUREE ENTRE COMMIT-- ' DUREE-ENTRE-COMMIT OF PARM-CMTEXIT DISPLAY '-- NOM STRUCTURE --- ' NOM-STRUCTURE OF PARM-CMTEXIT DISPLAY '-- TS DERNIER COMMIT --- ' TS-DERNIER-COMMIT OF PARM-CMTEXIT DISPLAY '-- NBR D APPEL I --- ' NB-APPEL-I OF PARM-CMTEXIT DISPLAY '—NBR D APPEL T --- ' NB-APPEL-T OF PARM-CMTEXIT DISPLAY '-- NBR COMMIT FORCE --- ' NB-COMMIT-FORCE OF PARM-CMTEXIT DISPLAY '-- NBR COMMIT DECIDE --- ' NB-COMMIT-DECIDE OF PARM-CMTEXIT

34

Page 35: Gestion Du COMMIT en Programmes Batch

DISPLAY '-- NBR SANS COMMIT --- ' NB-SANS-COMMIT OF PARM-CMTEXIT DISPLAY '-- NBR APPEL FIN --- ' NB-APPEL-F OF PARM-CMTEXIT EVALUATE RET-CODE-CMTEXIT OF PARM-CMTEXIT WHEN 0 DISPLAY '0- OK. TRAITEMENT NORMAL ' WHEN 1 DISPLAY '1*-FONCTION INVALIDE----- ' PERFORM 999-DEB-ERREUR THRU 999-FIN-ERREUR WHEN 2 DISPLAY '2*-POINTEUR ERRONE ----- ' PERFORM 999-DEB-ERREUR THRU 999-FIN-ERREUR WHEN 3 DISPLAY '3*-NOM PROG-OCCURRENCE NON TROUVE' PERFORM 999-DEB-ERREUR THRU 999-FIN-ERREUR WHEN 4 DISPLAY '4*-PB ACCES SELECT TABLE REPRISE-' PERFORM 999-DEB-ERREUR THRU 999-FIN-ERREUR WHEN 5 DISPLAY '5*-STRUCTURE NON TROUVEE' PERFORM 999-DEB-ERREUR THRU 999-FIN-ERREUR WHEN 6 DISPLAY '6*-PB ACCES SELECT TABLE STRUCTURE PERFORM 999-DEB-ERREUR THRU 999-FIN-ERREUR WHEN 7 DISPLAY '7*-LONGUEUR DE STRUCTURE INCOMPATIBLE' PERFORM 999-DEB-ERREUR THRU 999-FIN-ERREUR WHEN 8 DISPLAY '8*-INUTILISE ' PERFORM 999-DEB-ERREUR THRU 999-FIN-ERREUR WHEN 9 DISPLAY '9*-PB MISE A JOUR TABLE REPRISE AVANT COMMIT' PERFORM 999-DEB-ERREUR THRU 999-FIN-ERREUR WHEN 10 DISPLAY '10*-PB MISE A JOUR TABLE REPRISE FIN' PERFORM 999-DEB-ERREUR THRU 999-FIN-ERREUR WHEN OTHER DISPLAY '*-INTERPRETATION VALEUR RET-CODE IMPOSSIBLE' PERFORM 999-DEB-ERREUR THRU 999-FIN-ERREUR END-EVALUATE END-IF.

000-FIN-COMMIT-TEST-ERREUR. EXIT. Paragraphe de gestion des abends programmés et mise en forme du SQLCA de DB2.

999-DEB-ERREUR.

* DISPLAY 'ORDRE SQL : ' MCOF-ORDRE-SQL. MOVE SQLCODE TO W-SQLCODE. DISPLAY 'SQLCODE : ' W-SQLCODE. DISPLAY 'TABLE DB2 : ' MCOF-INFO-DIV. DISPLAY 'PARAGRAPHE : ' MCOF-PARAG. DISPLAY 'BASE : ' MCOF-NOM-CURS. * CALL 'DB2ANOS' USING SQLCA MCOF-ZPGM-ID. 999-FIN-ERREUR. EXIT.

35

Page 36: Gestion Du COMMIT en Programmes Batch

V - LES TABLES DB2 DU SYSTEME COMBAT

Le système possède 3 tables DB2.

Il est très fortement recommandé d'interdire la modification directe des tables, décrites ci-dessous, autrement que par les outils destinés spécifiquement à leur mise à jour ( outil de dialogue ISPF ou module CMTEXIT )

5.1 La table des structures : JZZX510T

Cette table contient une ligne pour chaque structure définie. La clé primaire est constituée par le nom de la structure.

5.2 La table des colonnes des structures : JZZX520T

Cette table contient une ligne pour chaque colonne de chaque structure.

La clé primaire est constituée par le couple :* nom de la structure* nom de la colonne

Il existe un deuxième index unique sur le couple :* nom la structure* numéro d'ordre de la colonne dans la structure.

5.3 La table des lignes de reprise : JZZX530T

Cette table contient une ligne pour chaque couple :* nom du programme* numéro d'occurrence.La clé primaire est donc constituée de ces deux colonnes.

L'occurrence 1 est toujours présente pour un programme. Certaines informations présentes dans la table, ne présentent un sens dans le système, que pour l'occurrence numéro 1. ( ex: le nom de la structure trouvé dans l'occurrence 1 est valable pour toutes les occurrences du même programme, de même c'est l'occurrence 1 qui fournit le nombre total d'occurrences du programme).

Chaque ligne de la table de reprise, occupe une taille proche d'une page de 4K. On ne trouve donc qu'une seule ligne de données par page, ce qui permet de diminuer les contentions lors de la mise à jour de cette table.

36