UTILITAIRES
MVS
ADRDSSU
est un utilitaire qui permet entre autre
de :
Sauvegarder (DUMP) ;*
Copier (COPY)
Supprimer
Restaurer (RESTORE)
tous les types de fichiers
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
/*
//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
//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.
//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 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 !!)
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'
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.
//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.
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.
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
//*
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
/*
//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) )
//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) )
//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 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
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
/*
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)
/*
//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)
/*
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
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)
//*
//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 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