Accueil

Docs pilotages  

Recherche

UTILITAIRES MVS

 

 

ADRDSSU  est un utilitaire qui permet entre autre de :

Sauvegarder (DUMP) ;*

Copier (COPY)

 Supprimer

Restaurer (RESTORE)

tous les types de fichiers

 

Copy

Copie avec changement de volume :

// JOB ,REGION=7900K,MSGCLASS=R,MSGLEVEL=1,CLASS=D
//COPY EXEC PGM=ADRDSSU
//SYSPRINT DD SYSOUT=*
//************* ancien volume
//I1 DD UNIT=3390,VOL=SER=TRA501,DISP=SHR
//************* nouveau volume
//O1 DD UNIT=3390,VOL=SER=EXD500,DISP=SHR
//SYSIN DD *
                         COPY DS(INCL(Ancien.fichier      -
                                                     ))               -
                         RENAMEU(ancien.fichier..,          -
                         nouveau.fichier))                        -
                             ALLD(*)                               -    
                             ALLE                                    -
                            TGTALLOC(SOURCE)                -
                               SPHERE                              -
                              CAT DELETE                         -
                              IDD(I1)                                -
                             ODD(O1)                               -
                             TOL(ENQF)
//*

 

Copie d'un fichier :

//COPY   EXEC PGM=ADRDSSU
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
   COPY DATASET(INCLUDE(Nom.du.fichier.a.copier)) -
   RENAMEU ((Nom.du.fichier.a.copier,                     -
   Nouveau.nom.du.fichier))                                   -
   TGTALLOC(SOURCE)                                          -
   TGTGDS(SOURCE)                                            -
   SPHERE                                                          -
   TOLERATE(ENQFAILURE)                                    -
   CANCELERROR                                                 -
   CATALOG
/*

  

Copie ; restore ; Rename d'un GDG :

//RENAME  EXEC PGM=ADRDSSU
//SYSPRINT SYSOUT=*
//SYSIN DD *
  COPY DATASET(INCLUDE(  +
  MON.GDG.A.COPIER(0)      +
                                   )) +
  RENAMEU( +
  (MON.GDG.A.COPIER.** +
   MON.NOUVEAU.GDG.A.G0001V00 ) +
  ) +
  TOLERATE(ENQFAILURE) -
  CANCELERROR -
  SHARE -
  SPHERE -
  TGTGDS(ACTIVE) -
  CATALOG
/*

Delete

//DEL01 EXEC PGM=ADRDSSU
//*
//SYSPRINT DD SYSOUT=*
//NOTAPE DD DUMMY
//SYSIN DD *
             DUMP                                            -
             DS (INCLUDE(                                 -
             RNRJP10.NRJIBFW.PELPARM.R310*      -
             RNRJP10.NRJIBFW.AUDIT.R310*          -
             RNRJP10.NRJIBFW.NBRNRJ.R310*         -
             OUTDD(                                          -
             NOTAPE )                                        -
             DELETE
/*

  

Delete d'un fichier :

//DELET1 EXEC PGM=ADRDSSU
//SYSPRINT DD SYSOUT=*
//OUT DD DUMMY
//SYSIN DD *
   DUMP -
   DATASET(INCLUDE(MON.FICHIER.A.SUPPRIM*.MASQUE)) -
   OUTDD(OUT) -
   CANCELERROR -
   DELETE
/*

 

Adrdssu - Suppression de fichiers par rapport à une date :

Ce JCL permet de faire le 'ménage' sur disque en copiant sur K7 les fichiers qui n'ont pas été ouverts depuis X jours ou qui ont été créés avant (date du jour - X) 
L'option DUMMY de BAND permet de virer les fichiers sans sauvegarde
L'option 'PARM='TYPRUN=NORUN'' permet de faire un passage à blanc. 


//EX1 EXEC PGM=ADRDSSU,PARM='TYPRUN=NORUN' <== Mode TEST 
//*EX1 EXEC PGM=ADRDSSU                               <== Mode normal 
//SYSPRINT DD SYSOUT=* 
//BAND DD DUMMY                  <==== Mode test ou DELETE seulement 
//*BAND DD DSN=dsname, <==== Mode normal 
//* DISP=(,CATLG),UNIT=T3490, 
//* LABEL=RETPD=xxx                     <========== 
//D1 DD UNIT=3390,VOL=SER=ARI200,DISP=SHR 
//D2 DD UNIT=3390,VOL=SER=ARI202,DISP=SHR 
//D3 DD UNIT=3390,VOL=SER=ARI203,DISP=SHR 
//D4 DD UNIT=3390,VOL=SER=ARI204,DISP=SHR 
//D5 DD UNIT=3390,VOL=SER=ARI205,DISP=SHR 
//D6 DD UNIT=3390,VOL=SER=ARI206,DISP=SHR 
//SYSIN DD * 
DUMP OUTDD(BAND) INDD(D1 D2 D3 D4 D5 D6) - 
DATASET(INCLUDE(**) BY((REFDT,LT,*,-400) (CREDT,LT,*,400))) - 
DELETE 
/* 


REFDT : date de dernière consultation du fichier
LT : LESS THAN
CREDT : Date de création du fichier
-400 : Nb de jour depuis lequel le fichier n'a pas été accéder
400 : Nb de jour depuis lequel le fichier a été créée
* : Date du jour à partir de laquelle on veut décompter (* : date du jour)
DD1 / DD2 ... : Liste des disques sur lesquels ont veut faire du ménage

DUMP de fichiers

//STEP0010 EXEC PGM=ADRDSSU,REGION=4M
//SYSPRINT      DD SYSOUT=*
//OUTDD1         DD DSN=MON.FICHIER.DE.SAUVEGARDE.DFDSS,
//                         DISP=(,CATLG,DELETE),VOL=(,,,99),
//                         UNIT=3490,LABEL=RETPD=95
        DUMP DATASET (INCLUDE(
                     F*001.*J.*.M%OYYMM       -
                     F*001.%%%%%%%K.*.M%OYYMM      -
                     F*P00.*R.*.M%OYYMM       -
                     F*P01.*C.*.M%OYYMM       -
                            EXCLUDE(
                                               FIDE001.** -
                                               FIPE001.**
                                                 
)) -
        OUTDDNAME(OUTDD1) -
        CANCELERROR -
        OPT(4) TOL(ENQF) -
        WAIT(5,10)
        IF LASTCC = 4 THEN SET MAXCC = 0
/*

   

 

 

Dump d'un alias sur un disque précis

//SAVE EXEC PGM=ADRDSSU
//DISK1 DD UNIT=3390,VOL=SER=VOL001,DISP=SHR
//DISK2 DD UNIT=3390,VOL=SER=VOL002,DISP=SHR
//OUT DD DSN=MON.FICHIER.DE.SAUVEGARDE,
//       DISP=(NEW,CATLG,DELETE),
//       UNIT=T3490,RETPD=30,DATACLAS=NONTMM
//*
//SYSPRINT DD DSN=MON.FICHIER..SYSPRINT,
// DISP=(NEW,CATLG,DELETE),
// SPACE=(TRK,(30,5),RLSE)
//*
//SYSIN DD *
DUMP INDDNAME(DISK1,DISK2) -
OUTDD(OUT) -
DATASET(INCLUDE(Q01.**)) -
TOLERATE(ENQFAILURE) -
SHARE -
ALLDATA(*) -
COMPRESS -
CANCELERROR

Ici, on DUMP tous les fichiers avec comme première charnière Q01 et qui se trouvent sur le volume VOL001 et VOL002.

avec un fichier SYSIN

//SAVE1 EXEC PGM=ADRDSSU
//*
//FDD DD DSN=RNRJP10.NRJ007JR.REPLISTE.D981112,DISP=SHR
//*
//SYSPRINT DD SYSOUT=*
//TAPE1 DD DSN=RNRJP10.NRJ007S.NRJSIT.D981112,
//            DISP=(,CATLG,DELETE),
//            LABEL=(RETPD=105),UNIT=CARTR,VOL=(,,,99)
//SYSIN DD *
           DUMP DATASET              -
           (FILTERDD(FDD))            -
           OUTDDNAME(                  -
           TAPE1                           -
                    )                         -
           CANCELERROR                 -
           OPT(4)                          -
           TOL(ENQF)

Exemple de Sysin :

INCLUDE(                                         -
PGMR.SEPG.TTT.*.D311299                 - PGMR.SEPG.TT.*.SYSREC00.D311299    -
                   )                                 -

 

Restore

 

//RESTORE EXEC PGM=ADRDSSU,REGION=3M
//SYSPRINT DD SYSOUT=*
//TAPE1 DD DSN=LE.FICHIER.DE.SAUVEGARDE,
//             DISP=SHR
//SYSIN DD *
            RESTORE INDDNAME(TAPE1)         -
            DATASET(INCLUDE(                     -
  MON.PREMIER.FICHIER.A.RESTORER          -
  MON.SECOND.FICHIER.A.RESTORER          -
                                              ))           -
            CATALOG                                   -
            REPLACE
/*
//* RENAMEU(NOM DU FICHIER,NOUVEAU FICHIER)

  

Restore de GDG :

Lors de la restauration d'un gdg, si l'on veut qu'il soit reconnu lorsqu'un job y fait appel 
en Version (0), il faut le restaurer avec le parametre TGDG (à vérifier !!)

 

Simulation

Ce paramètre simule un ADRDSSU. Cela permet de voir les effet de la commande en SYSIN sans risques.

//STEPNAME  EXEC PGM=ADRDSSU,PARM='TYPRUN=NORUN'

 

Objectifs d'AMS

AMS (ACCESS METHOD SERVICES) est avant tout l'ensemble des programmes de gestion des objets VSAM.

Le nom de l'utilitaire de mise en oeuvre de ces programmes est IDCAMS.
Il réside comme les autres utilitaires système dans la bibliothèque SYS1.LINKLIB.
IDCAMS peut être appelé par JCL batch, par TSO ou encore par un programme utilisateur.
 

Les fonctions d'AMS sont de trois catégories : 

·        fonctions catalogue : création, maintenance, suppression des objets (fichiers ou autres) dans les catalogues. 

·        fonctions VSAM : création, maintenance, suppression des clusters VSAM (et d'autres éléments vus plus loin.

·        fonctions non-VSAM : certaines fonctions sont applicables à la fois aux fichiers VSAM et aux fichiers non-VSAM.  

 

 

Jcl d'appel

 

//AMS        JOB.....
//STEP       EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=classe de sortie
//SYSIN      DD * (ou nom de PDS contenant le cluster)
  ordres AMS (commandes et paramètres)

Le fichier SYSPRINT (format VBA,LRECL=125,BLKSIZE=629 (5 articles par blocs + 4 octets) ) contient les messages informatifs ou d'erreur envoyés par IDCAMS lors de l'exécution des commandes ainsi que les listes demandées.

 

Syntaxe des commandes AMS

Les commandes ont le format général suivant :

COMMANDE paramètres caractère-de-continuation

·        Les commandes peuvent commencer n'importe où à partir de la position 2 (écriture de 2 à 72 par défaut).

·        Les commandes sont séparées des paramètres par un ou plusieurs séparateurs (espaces, virgules ou commentaires).

·        Les commentaires sont des chaînes de caractères précédées de "/*" et terminées par "*/".

·        Les paramètres sont des paramètres à mot-clé auxquels sont souvent associées des listes de valeurs positionnelles : dans ce cas la liste de valeurs positionnelles doit être incluse entre parenthèses sauf si une seule valeur y figure.

·        Les caractères de continuation permettent de poursuivre l'écriture d'une commande sur plusieurs lignes.
Le plus courant est le caractère "-" (signe moins ou trait d'union) terminant chaque ligne qui doit se continuer.
Le signe "+" (plus) a une signification différente. il indique non seulement la continuation de la commande mais aussi la suite d'une valeur dans la liste des paramètres.

Exemples :

DELETE (FICHIER1 -
               FICH2) CLUSTER (pour vérification : Si cluster : DELETE ; Si non, pas de DELETE)

DELETE (VSAM.KSDS.DATA  -
                VSAM.KSDS.INDEX  -
                VSAM.KSDS.+
               PATH)

L'absence de caractère de continuation sur une ligne signifie pour AMS : FIN DE LA COMMANDE.

Cas particulier : 

Appel sous TSO

TSO fonctionnant en mode ligne à ligne, le caractère de continuation n'a pas lieu d'être. Chaque commande AMS est entrée avec ses paramètres associés dans la limite de 256 caractères consécutifs.

  

 

Les codes conditions AMS

Chaque commande AMS rend à la fin de son exécution un code condition (ou code retour) qui peut prendre cinq valeurs différentes :

 

0

La commande s'est exécutée comme souhaité.

4

Au cours de l'exécution de la commande, un problème a été rencontré qui a pu être contourné par VSAM (par ex.: une entrée manquante dans un LISTCAT).
Un message d'avertissement (warning) est émis.
Vérifier que l'action prise par VSAM est conforme à ce que l'on souhaitait.

8

La commande s'est terminée mais certaines spécifications ont du être ignorées (par ex.: suppression ou ALTER d'une entrée non inscrite au catalogue, un DUPLICATE NAME lors d'un DEFINE).

12

Une erreur logique a empêché l'exécution de la commande (paramètres inconsistants, paramètres obligatoires manquants, valeur spécifiée trop petite ou trop grande, longueur de clé, taille d'enregistrement ou espace pour les buffers).

16

Une erreur grave est rencontrée qui provoque le rejet du reste du flot de commandes (par ex.: ordre SYSPRINT DD manquant, séquence de commandes incorrecte dans un IF-THEN-ELSE)

En cas de commandes multiples dans un seul et même appel d'AMS, la valeur maximum rencontrée constitue le code condition de l'étape qui est passé à MVS® et peut être testé dans des étapes ultérieures par le paramètre COND du JCL.

 

 

IDCAMS

JCL complet de création d'un VSAM (Cluster / Data / Index / Index Alterné / Path / Repro / Build Index)

Exemple 1 :

//CREVSAM   JOB (XT18),MSGCLASS=R,CLASS=D
//DEFVSAM EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
    DELETE (MON.FICHIER.VSAM) CLUSTER PURGE
    SET MAXCC=0
    DEFINE CLUSTER (NAME (MON.FICHIER.VSAM) -
        CISZ (4096) -
        CYL (2 1) -
        KEYS (8 0) -
        RECSZ (193 193) -
        SHR (3 3) -
        VOL (EXD512) ) -
    DATA (NAME (MON.FICHIER.VSAM.DATA) ) -
    INDEX (NAME (MON.FICHIER.VSAM.INDX) )
/*
//*
//DEFAIX EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN DD  *
    DEFINE AIX (NAME (MON.FICHIER.VSAMX1.AIX) -
    RELATE (MON.FICHIER.VSAM) -
        CISZ (4096) -
        CYL (2 1) -
        IMBED -
        KEYS (2 16) -
        RECSZ (807 807) -
        REPL -
        SPEED -
        SHR (3,3) -
        VOL (EXD511) ) -
    DATA (NAME (MON.FICHIER.VSAMX1.AIX.DATA) ) -
    INDEX (NAME (MON.FICHIER.VSAMX1.AIX.INDX) )
//*
//DEFPATH EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
    DEFINE PATH (NAME (MON.FICHIER.VSAM.PATH) -
    PATHENTRY (MON.FICHIER.VSAMX1.AIX) )
//*
//REPVSAM EXEC PGM=IDCAMS
//SYSOUT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//INUT DD DSN=MON.FICHIER.SEQUENTIEL,
// DISP=SHR
//OUUT DD DSN=MON.FICHIER.VSAM,
// DISP=SHR
    REPRO INFILE(INUT) OUTFILE(OUUT)
//*
//BLDAIX EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
    BLDINDEX IDS(MON.FICHIER.VSAM) -
    ODS(MON.FICHIER.VSAMX1.AIX)

Exemple 2 :

//YD010M JOB JXM30000,CLASS=A,MSGCLASS=R,
//            MSGLEVEL=(1,1),REGION=0K
//*
//DEFVSAM EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
    DELETE (MON.FICHIER.VSAM)
        SET MAXCC=0
    DEFINE CLUSTER -
        (NAME(MON.FICHIER.VSAM) -
        INDEXED -
        KEYS(14 5) -
        VOLUMES(EXA510) -
        RECORDSIZE(800 800) -
        SPEED -
        IMBED -
        SHAREOPTIONS(2) -
        FREESPACE(10 10) -
        TRK(80 8) -
        CONTROLINTERVALSIZE(4096)) -
    DATA -
        (NAME(MON.FICHIER.VSAM.DATA)) -
    INDEX -
        (NAME(MON.FICHIER.VSAM.INDEX))
/*
//REPRO EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=R,OUTLIM=2500
//INPUT DD DSN=MON.FICHIER.SEQUENTIEL,
// DISP=SHR
//OUTPUT DD DSN=MON.FICHIER.VSAM,
// DISP=SHR
//SYSIN DD *
    REPRO    -
    INFILE(INPUT)   -
    OUTFILE(OUTPUT)    REPLACE
//*
//DEFVSAM EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
    DELETE (MON.FICHIER.VSAM.AIX)
        SET MAXCC=0
    DEFINE AIX -
        (NAME(MON.FICHIER.VSAM.AIX) -
        RELATE(MON.FICHIER.VSAM) -
        KEYS(11 595) -
        NONUNIQUEKEY -
        VOLUMES(EXA510) -
        TRK(30 3) -
        SPEED -
        SHAREOPTIONS(2) -
        FREESPACE(10 10) ) -
    DATA -
        (NAME(MON.FICHIER.VSAM.AIX.DATA) -
        CONTROLINTERVALSIZE(4096)) -
    INDEX -
        (NAME(MON.FICHIER.VSAM.AIX.INDEX))
//*
//DEFVSAM EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
    DEFINE PATH (NAME(MON.FICHIER.VSAM.PATH)
    PATHENTRY(MON.FICHIER.VSAM.AIX))
//*
//CONSAIX EXEC PGM=IDCAMS,COND=(4,LT)
//*--------------------------------------------------------------*
//* CONSTRUCTION DE L'INDEX SECONDAIRE DE B2CSM *
//*--------------------------------------------------------------*
//SYSPRINT DD SYSOUT=*
//POINTA DD DSN=MON.FICHIER.VSAM,
// DISP=OLD
//AIXD DD DSN=MON.FICHIER.VSAM.AIX,
// DISP=OLD
//SYSIN DD *
    BLDINDEX -
    INFILE(POINTA) -
    OUTFILE(AIXD) -
    EXTERNALSORT
//*
 

 

 

 

Delete

NVSAM : Fichier non VSAM
NSCR : Oter le fichier du catalogue mais sans le deleter

IF LASTCC = 8 THEN SET MAXCC = 2 : Si le code retour est 08 (Fichier non trouvé), on met le code retour à 02, ce qui permet au cas ou le Code COND est fixé à (08,LE) de passer l'étape.

//UNCAT EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
    DELETE (MON.FICHIER.A.DELETER) NVSAM NSCR;
       IF LASTCC = 8 THEN SET MAXCC = 2

Delete d'un séquentiel :

//DELSAUVE EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
              DELETE FICHIERS.SEQUENTIELS.A.DELETER.*
              DELETE FICHIERS.SEQUENTIELS.A.DELETER.*.DIVERS
              SET MAXCC=0
/*

Delete d'un VSAM :

//DELSAUVE EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
              DELETE FICHIER.VSAM.A.SUPPRIMER.*    CLUSTER PURGE
              SET MAXCC=0
/*

  

 

Define Cluster

//CREVSAM   JOB (XT18),MSGCLASS=R,CLASS=D
//DEFVSAM EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
    DEFINE CLUSTER (NAME(PYEXAC.KQ.GMP11£££) -
        CYL(000125,000025) -
        VOLUMES(EXD513) -
        KEYS(41 0) -
        RECORDSIZE(160 160) -
        SHAREOPTIONS(2 3) -
        IMBED -
        SPEED -
        FREESPACE(10 10))  -
DATA (NAME(PYEXAC.KQ.GMP11£££.DATA) -
        CISZ(4096)) -
INDEX (NAME(PYEXAC.KQ.GMP11£££.INDEX) -
        CISZ(4096))
/*

AIX : Index Alterné sur un Cluster.

//CREVSAM   JOB (XT18),MSGCLASS=R,CLASS=D
//DEFVSAM EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
    DEF AIX (NAME (MON.FICHIER.AIX) -
    REL (MON.FICHIER) -
        CISZ (4096) -
        CYL (2 1) -
        IMBED -
        KEYS (2 16) -
        RECSZ (807 807) -
        REPL -
        SPEED -
        SHR (3,3) -
        VOL (EXD511) ) -
    DATA (NAME (MON.FICHIER.AIX.DATA) ) -
    INDEX (NAME (MON.FICHIER.AIX.INDX) )

 

Define Path

//CREVSAM   JOB (XT18),MSGCLASS=R,CLASS=D
//DEFVSAM EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
    DEFINE PATH (NAME (MON.FICHIER.VSAM.PATH) -
    PENT (MON.FICHIER.VSAMX1.AIX) )

  

 

Build Index

 

//CONSAIX EXEC PGM=IDCAMS,COND=(4,LT)
//*----------------------------------------*
//* CONSTRUCTION DE L'INDEX SECONDAIRE *
//*----------------------------------------*
//SYSPRINT DD SYSOUT=*
//POINTA DD DSN=MON.FICHIER.CLUSTER.DE.BASE,
//               DISP=OLD
//AIXD    DD DSN=MON.FICHIER.INDEX.SECONDAIRE.AIX,
//               DISP=OLD
//SYSIN DD *
    BLDINDEX -
    INFILE(POINTA) -
    OUTFILE(AIXD) -
    EXTERNALSORT
//*

 

Repro

Repro avec remplacement des enregistrement déjà existant :

//STEP1 EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=R
//INPUT DD DISP=SHR,DSN=MON.FICHIER.EN.ENTREE
//OUTPUT DD DISP=SHR,DSN=MON.FICHIER.EN.SORTIE
//SYSIN DD *
    REPRO -
    INFILE(INPUT) -
    OUTFILE(OUTPUT) -
    REPLACE
/*

   

Plusieurs Repro dans un seul step : 

//REPRO  EXEC PGM=IDCAMS
//SYSPRINT   DD SYSOUT=*
//SYSOUT     DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//UIN1    DD DSN=MON.PREMIER.FICHIER.EN.ENTREE,DISP=SHR
//UOUT1 DD DSN=MON.PREMIER.FICHIER.EN.SORTIE,DISP=OLD
//UIN2    DD DSN=MON.SECOND.FICHIER.EN.ENTREE,DISP=SHR
//UOUT2 DD DSN=MON.SECOND.FICHIER.EN.ENTREE,DISP=OLD
//SYSIN  DD *
     REPRO INFILE(UIN1) OUTFILE(UOUT1)
     REPRO INFILE(UIN2) OUTFILE(UOUT2)
/*

Repro avec un fichier MODEL :

//DEFINE1 EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
  DELETE MON.FICHIER.A.CREER
  SET MAXCC = 0
  DEFINE CLUSTER(NAME(MON.FICHIER.A.CREER) -
  MODEL(MON.FICHIER.MODEL))
/*

Repro avec concatenation de données in-stream :

//REPRO  EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//IN DD     DSN=MON.FICHIER.EN.ENTREE,
//            DISP=SHR
//            DD *
MES DONNEES A INSERER
/*
//OUT DD DSN=MON.FICHIER.EN.SORTIE,
//       DISP=(NEW,CATLG,DELETE),
//       SPACE=(TRK,(10,10),RLSE),
//       RECFM=FB,LRECL=80
//SYSIN DD *
   REPRO INFILE(IN) OUTFILE(OUT)
/*

Repro d'une clé précise

//REPRO01 EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//IN DD DSN=LE.FICHIER.DUQUEL.J.EXTRAIS,
// DISP=SHR
//OUT DD DSN=LE.FICHIER.EN.SORTIE,
// DISP=SHR
//SYSIN DD *
REPRO INFILE(IN) OUTFILE(OUT) FROMKEY(02GLO) COUNT(1)
/* 

Fromkey : nom de la clé à extraire
Count(1) : on extrait un seul enregistrement 

 

Repro en erreur (1) :

LENGTH INVALID

Des enregistrements n'ont pas une taille valide pour le fichier de sortie (LENGTH INVALID).
Le code 12 arrive au bout de 4 erreurs.
Les enregistrements en erreur sont compris (ici) entre le 1 er et le 3266 ème et les clés sont données en HEXA.

Pour retrouver les enregistrements en erreur, il faut se positionner sur le fichier en BROWSE ou en EDIT et se mettre en HEXA (HEX ON), puis faire un FIND de (ici pour le premier enreg) : X'F0F2C7D3D6'

IDCAMS SYSTEM SERVICES TIME: 17:09:35

REPRO INFILE(IN) OUTFILE(OUT)
IDC3302I ACTION ERROR ON SE1.XTO9.XTDME1O9.NZOP1DO9.REPRO05
IDC3309I ** RECORD X'F0F2C7D3D6' NOT WRITTEN.
LENGTH INVALID
IDC3302I ACTION ERROR ON SE1.XTO9.XTDME1O9.NZOP1DO9.REPRO05
IDC3309I ** RECORD X'F0F2D1C3D7' NOT WRITTEN. LENGTH INVALID
IDC3302I ACTION ERROR ON SE1.XTO9.XTDME1O9.NZOP1DO9.REPRO05
IDC3309I ** RECORD X'F0F2D9C5C7' NOT WRITTEN. LENGTH INVALID
IDC3302I ACTION ERROR ON SE1.XTO9.XTDME1O9.NZOP1DO9.REPRO05
IDC3309I ** RECORD X'F0F2D9C5C7' NOT WRITTEN. LENGTH INVALID
IDC31467I MAXIMUM ERROR LIMIT REACHED.
IDC0005I NUMBER OF RECORDS PROCESSED WAS 3266
IDC3003I FUNCTION TERMINATED. CONDITION CODE IS 12

IDC0002I IDCAMS PROCESSING COMPLETE. MAXIMUM CONDITION CODE WAS 12

  

REPRO en erreur (2) :

RECORD OUT OF SEQUENCE

Des enregistrements sont en double.
Ils sont supprimés automatiquement par IDCAMS.

REPRO -
INFILE(INPUT) -
OUTFILE(OUTPUT) -
REPLACE
IDC3302I ACTION ERROR ON OPCLOC.WARR.OPC220.AD
IDC3314I **RECORD OUT OF SEQUENCE - KEY FOLLOWS:
000000 F0F1D1E2 D9F1F0D1 D6F94040 40404040 4040C1F2 F5F1F2F3 F1

IDC3302I ACTION ERROR ON OPCLOC.WARR.OPC220.AD
IDC3314I **RECORD OUT OF SEQUENCE - KEY FOLLOWS:
000000 F0F1D1E7 C4C9C6D5 D6F94040 40404040 4040C1F9 F9F1F2F3 F1

IDC0005I NUMBER OF RECORDS PROCESSED WAS 1249
IDC0001I FUNCTION COMPLETED, HIGHEST CONDITION CODE WAS 8

IDC0002I IDCAMS PROCESSING COMPLETE.
MAXIMUM CONDITION CODE WAS 8

Le message RECORD OUT OF SEQUENCE indique qu'une ou des clés sont en doubles ou mal triées. Elles sont supprimées du fichier en sortie.

Pour retrouver ces clés en double, on va en EDIT sur le fichier en entrée et on cherche les clés incriminées (se mettre en HEXA (HEX ON)).

File-AID - Edit - OPCLOC.WARR.OPC220.AD.REPRO.REPLAN00.ACT --------------------
COMMAND ===> f x'F0F1D1E7C4C9C6D5D6F94040404040404040C1'
000603 01JTC1UMO9 A991231ADR 260101 OAGCCP00GCO9
            FFDECFEDDF44444444CFFFFFFCCD40FFFFFF444444444444444444444444
            011331446900000000199123114901260101000000000000000000000000
------------------------------------------------------------------------------
000604 01JXDIFNO9 A991231ADR 260511RECEPTION DIFFUSION OAGCCP00GCO9
           FFDECCCDDF44444444CFFFFFFCCD40FFFFFFDCCCDECDD4CCCCEECDD
           0117496569000000001991231149012605119535739650496642965
------------------------------------------------------------------------------
000605 01JXDIFNO9 A991231ADR 260511RECEPTION DIFFUSION OAGCCP00GCO9
           FFDECCCDDF44444444CFFFFFFCCD40FFFFFFDCCCDECDD4CCCCEECDD
           0117496569000000001991231149012605119535739650496642965
------------------------------------------------------------------------------

Lorsque les clés sont mals triées, passer un sort sur le fichier (sur la clé) et repasser le repro

  

 

Alter Rename

Ce job permet de renommer un fichier.

//RENAME EXEC PGM=IDCAMS
//VDSBYPAS DD DUMMY
//SYSPRINT DD SYSOUT=R
//SYSIN DD *
    ALTER MON.FICHIER.A.RENOMMER.&&.*.DIVERS -
    NEWNAME(MON.NOUVEAU.FICHIER.RENOMME.&&.*.DIVERS.DUxxxxxx)
    SET MAXCC=0
/*

 

Verify

Ce job permet de fermer un fichier qu'il l'a mal été lors de son dernier accès par un PGM.  

//VERIFY     JOB MSGCLASS=Q,CLASS=3
//S001AMS  EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN      DD *
   VERIFY DATASET('MON.FICHIER.VSAM.A.VERIFIER')
/*

 

Réinitialisation d'un fichier


Ce job permet de vider un fichier séquentiel de ses données.

 //INITFIC JOB CLASS=3,MSGCLASS=Q 
//* 
//S10AMS   EXEC PGM=IDCAMS 
//SYSPRINT DD SYSOUT=*
//IN           DD DUMMY
//OUT        DD   DSN=MON.FICHIER.A.INITIALISER,DISP=SHR
//SYSIN DD *  
  REPRO INDD(IN)  OUTDD(OUT)
/*

/*
REPRO INFILE(DUMMY) OUTDATASET(
MON.FICHIER.A.INITIALISER)
/*

 

Allocation d'un fichier

 

//CC073 EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//IN1 DD DSN=NULLFILE
//OUT1 DD DSN=MON.FICHIER.A.ALLOUER,
//           DISP=(,CATLG,DELETE),
//           SPACE=(360,(5,2),RLSE),AVGREC=K,
//           RECFM=FB,LRECL=360
//SYSIN DD *
  REPRO INFILE(IN1) OUTFILE(OUT1)

 

Création d'un GDG de base

 

//GDG JOB (XT18),LCO,CLASS=A,MSGCLASS=T,COND=(0,NE)
//*****************************************
//DEFINE EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
  DEFINE GDG(NAME(MON.PIED.DE.GDG) +
  LIMIT(5) NOEMPTY SCRATCH)
/*

 

Listcat

Exemple :

//LISTCAT EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//LISTCAT DD DSN=MON.FICHIER.DE.SORTIE.RESULTAT,
//             DISP=(,CATLG,DELETE),
//             SPACE=(CYL,(1,1)),
//             RECFM=VBA,LRECL=125
//IAMPRINT DD DSN=SE1.XT18.XTDME118.ARIVSAM1.IAMPRINT,
//              DISP=(,CATLG,DELETE),
//              SPACE=(CYL,(1,1))
//SYSIN DD *
   LISTCAT LEVEL(IB2) ALL OUTFILE(LISTCAT)
   LISTCAT LEVEL(JA2) ALL OUTFILE(LISTCAT)

Level = 1ère charnière du fichier

On Obtient un LISTCAT de tout les fichiers commençant par IB2 et JA2 dans le fichier LISTCAT.

 

LISTCAT ENTRIES(MON.FICHIER.A.LISTER) -
ALLOCATION
Donne l'allocation pour un VSAM

LISTCAT ENTRIES(MON.FICHIER.A.LISTER) -
VOLUME
Donne le ou les volumes sur lequel se trouve le fichier

ALL
Donne toute les informations sur le fichier

HISTORY
Donne l'historique du fichier

ALIAS
Donne l'alias du fichier

ALTERNATEINDEX
Donne l'index alterné d'un fichier

CLUSTER

DATA 

 

LISTCAT ENTRIES(MON.FICHIER.A.LISTER) -
GENERATIONDATAGROUP

LISTCAT ENTRIES(MON.FICHIER.A.LISTER) -
INDEX

LISTCAT ENTRIES(MON.FICHIER.A.LISTER) -
NONVSAM

LISTCAT ENTRIES(MON.FICHIER.A.LISTER) -
PAGESPACE

LISTCAT ENTRIES(MON.FICHIER.A.LISTER) -
PATH

LISTCAT ENTRIES(MON.FICHIER.A.LISTER) -
USERCATALOG
 

 

Print

Ce job permet d'imprimer des enregistrements d'un fichier.

//PRINT JOB (XT18),LCO,MSGCLASS=R,CLASS=D
//PRINT EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=R
//DATA DD DISP=SHR,DSN=MON.FICHIER.A.IMPRIMER
//SYSIN DD *
    PRINT -
    FROMKEY('000000') -
    TOKEY('100000') -
    COUNT(100) -
    CHAR -
    INFILE(DATA)
//*

Test fichier vide

//TESTP02B EXEC PGM=IDCAMS
//SYSOUT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//IN1 DD DSN=FICHIER.A.TESTER,
//     DISP=SHR
//SYSIN DD *
PRINT IFILE(IN1) COUNT(1)
/*
// IF TESTP02B.RC EQ 00 THEN
// ... suite des traitements ...
// ENDIF

Ici, avec la commande COUNT(1), on teste si il y a au moins un enregistrement. Si ce n'est pas le cas, on aura un code 04 et on ne passera pas la suite du traitement.

  

LES UTILITAIRES FICHIERS


Les utilitaires fichiers vont permettre de traiter des ensembles de données. Leur nom commence en général par IEB.

Les utilitaires fichiers sont les suivants :

IEBCOMPR :  

·        Compare les enregistrements de fichiers séquentiels ou partitionnés au niveau article.

·        Liste les différences

IEBCOPY :

·        Copie un fichier partitionné sur un autre fichier partitionné,

·        Interclasse des fichiers partitionnés,

·        Copie un fichier partitionné sur un fichier séquentiel,

·        Compresse les fichiers partitionnés,

·        Possibilités d'exclusions, de sélection, de remplacement ou de rename lors de l'exécution de toutes les fonctions IEBCOPY.

IEBDG :

·        Permet de créer des fichiers de test constitués de données conformes à un modèle précisé.

IEBEDIT :

·        Permet de copier de façon sélective le JCL d'étapes d'un JOB ainsi que les cartes JOB correspondantes.

IEBGENER  :

·        Permet de copier des enregistrements extraits d'un fichier séquentiel.

·        Permet de convertir un fichier séquentiel en fichier partitionné.

IEBIMAGE :

·        Permet de définir, modifier, imprimer ou relier des modules à utiliser avec le sous-systeme 3800.

·        Permet de créer les images des bandes pilotes et des chaînes de caractères.

IEBISAM :

·        Permet de copier un fichier ISAM sur un autre, de sauvegarder et restaurer des fichiers ISAM, d'éditer des fichiers ISAM.

IEBPTPCH :

·        Permet d'imprimer ou de perforer les enregistrements d'un fichier séquentiel ou  partitionné.

ICEGENER :

·        Opération de copy de fichiers

IEFBR14 :

·        Opérations diverses sur les fichiers