Précédent   Forum des professionnels en informatique > Systèmes > Autres systèmes > z/OS
z/OS Forum d'entraide sur z/OS et MVS (Multiple Virtual Storage), les systèmes d'exploitation des ordinateurs « mainframes » IBM : JCL, Tso, Ispf, Vsam, Racf, SMS, Cics, Ims, OPC, Ca-7, Control-M, Dialog Manager ...
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/09/2008, 16h44   #1
Membre confirmé
 
Inscription : mars 2004
Messages : 1 187
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 1 187
Points : 233
Points : 233
Par défaut connaître la taille d'un fichier

existe-t-il un programme qui permet de connaître la taille d'un fichier ?

exemple : si le fichier est trop volumineux, je n'exécute pas le step précédent.
sam01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/09/2008, 12h10   #2
Membre expérimenté
 
Avatar de Homer-ac
 
Inscription : octobre 2007
Messages : 449
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : octobre 2007
Messages : 449
Points : 518
Points : 518
En MVS les informations de taille d'un fichier ne sont même pas inscrites au catalogue. Elles sont contenues dans les DSCB de la VTOC qu'il faut donc lire. Ca ne laisse que deux possibilités : Un Assembleur ou un REXX via l'instruction LISTDSI. Un tel REXX ne peut en plus pas être appelé via un EXEC PGM=IRXJCL mais via IKJEFT01 (TSO).
Exemple de REXX pour pour vérifier une bonne partie des variables accessibles via la fonction LISTDSI :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/* REXX - INFOS FICHIER */ 
ARG DSNP .
DIRIC = listdsi("'"DSNP"' DIRECTORY NORECALL")
say "REASON CODE LISTDSI               :" SYSREASON
say "DEVICE UNIT                       :" SYSUNIT
say "VOLUME                            :" SYSVOLUME
say "ORGANISATION                      :" SYSDSORG
say "RECFM                             :" SYSRECFM
say "LRECL                             :" SYSLRECL
say "BLKSIZE                           :" SYSBLKSIZE
say "EXTENTS                           :" SYSEXTENTS
say "CREATION DATE                     :" SYSCREATE
say "EXPIRATION DATE                   :" SYSEXDATE
say "LAST REFERENCED DATE              :" SYSREFDATE
say "DATE D'EXPIRATION                 :" SYSEXDATE
say "UPDATE FLAG                       :" SYSUPDATED
say "NOMBRE DE PAGES UTILISEES         :" SYSUSEDPAGES
say "Fichier sequentiel BASIC/LARGE..  :" SYSSEQDSNTYPE
say ' ' ; say 'Informations Allocation Fichier ...'
say "UNITE D'ALLOCATION                :" SYSUNITS
say "ALLOCATION PRIMAIRE               :" SYSPRIMARY
say "ALLOCATION SECONDAIRE             :" SYSSECONDS
say "ALLOCATION UTILISEE               :" SYSUSED
say "ALLOCATION FICHIER TOTALE         :" SYSALLOC
say "NOMBRE D'EXTENTS                  :" SYSEXTENTS
say ' ' ; say 'Pour un PDS ou PDSE ...............'
say "MEMBERS (NOMBRE)                  :" SYSMEMBERS
say "DIRECTORY BLOCKS ALLOUES          :" SYSADIRBLK
say "DIRECTORY BLOCKS UTILISES         :" SYSUDIRBLK
exit
nb. Il existe bien un programme en standard : Le DCOLLECT IDCAMS mais c'est plutôt fait pour faire des relevés fichiers globaux et de toutes façons il faudra un programme pour exploiter les informations du fichier résultant.
Homer-ac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/09/2008, 16h25   #3
Membre confirmé
 
Inscription : mars 2004
Messages : 1 187
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 1 187
Points : 233
Points : 233
Merci. Par rexx je connais.

C'est dommage qu'il n'y ait pas de pgm ibm.

Tanpis.
sam01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/10/2008, 07h59   #4
Invité régulier
 
Inscription : octobre 2008
Messages : 7
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 7
Points : 8
Points : 8
Dans le cas de fichier multi-volumes, la procédure ne semble lire les infos que du premier volume.

Peut-on me le confirmer?
Y'a t il moyen de passer outre?
Njsan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/10/2008, 10h24   #5
Membre expérimenté
 
Avatar de Homer-ac
 
Inscription : octobre 2007
Messages : 449
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : octobre 2007
Messages : 449
Points : 518
Points : 518
Exact, après vérification, LISTDSI renvoie un Reason Code 19 dans ce cas (SYSREASON).
Pour autant, LISTDSI répond bien à la question d'origine : connaitre la taille d'un fichier. A ma connaissance, les allocations totale et utilisée (SYALLOC, SYSUSED) sont rendues correctement, même pour un fichier multi volumes.
Si le fichier est multi volumes, on reçoit un message IKJ8419I explicite dans SYSMSGLVL1 et 2 et on ne récupère que le premier volume dans SYSVOLUME.
On peut toujours dans ce cas passer un LISTCAT VOL pour récupérer la liste des volumes. Au niveau d'un fichier il faudrait essayer mais on devrait aussi retrouver l'info via Library Management. Au niveau gestion globale des fichiers, encore une fois c'est plutôt le DCOLLECT la bonne solution.
Homer-ac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/10/2008, 12h03   #6
Invité régulier
 
Inscription : octobre 2008
Messages : 7
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 7
Points : 8
Points : 8
Je vais te contredire mais SYALLOC, SYSUSED ne donne que l'alloc et le used du premier volume (en général ont a la meme valeur).
Et le prob du DCOLLECT c'est que les info ne sont pas exploitable directement à moins que tu n'es qqchose pour exploiter le résultat.
Njsan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/10/2008, 13h08   #7
Membre expérimenté
 
Avatar de Homer-ac
 
Inscription : octobre 2007
Messages : 449
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : octobre 2007
Messages : 449
Points : 518
Points : 518
Oups, je viens de vérifier, tu as raison et mes fichues idées reçues étaient fausses. En cas de fichier multi-volumes LISTDSI ne donne que le premier volume, donc SYSALLOC = SYSUSED au maximum d'extent pour l'allocation utilisée sur le premier volume.
Pour le DCOLLECT j'utilise un REXX qui s'inspire du LISTVTOC proposé en modèle par Thierry Fallisard sur CBTTAPE (vraiment très bien construit ce sample) qui fusionne en fait les info du DCOLLECT et du catalogue via un programme d'appel IGGCSI.
Voir aussi ARCETOOLS en SYS1.SAMPLIB : il y a tout ce qu'il faut.
Sorti de là j'ai déjà dans des temps anciens géré ça en Assembleur (lecture CAMLST des DSCB VTOC) mais je n'ai pas d'autre idée sur le sujet dans l'immédiat et vais je explorer qques pistes par curiosité également (DFDSS par exemple, les autres programmes standards capables de lire les DSCB VTOC ne doivent pas être foules)
Homer-ac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/10/2008, 14h06   #8
Invité régulier
 
Inscription : octobre 2008
Messages : 7
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 7
Points : 8
Points : 8
Pourrais tu diffuser ton rexx ou donner des liens stp
Njsan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/10/2008, 14h16   #9
Membre expérimenté
 
Avatar de Homer-ac
 
Inscription : octobre 2007
Messages : 449
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : octobre 2007
Messages : 449
Points : 518
Points : 518
En cherchant dans la doc Library Management je suis tombé sur la solution REXX/ISPF :
DSINFO que j'avais un peu oublié :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
/* REXX INFORMATIONS FICHIER DSINFO */               
DSN = 'MON.FICHIER.A.VERIFIER'                       
address ISPEXEC "DSINFO DATASET('"DSN"')"            
say "ZDSVOL First or only volume       :" ZDSVOL     
say "ZDS£VOLS Number of volumes        :" ZDS£VOLS   
say "ZDSDEVT Device type               :" ZDSDEVT    
say "ZDSORG Dataset organization       :" ZDSORG     
say "ZDSRF Record format               :" ZDSRF      
say "ZDSLREC Logical record length     :" ZDSLREC    
say "ZDSBLK Blocksize                  :" ZDSBLK     
say "ZDSSPC Primary space units        :" ZDSSPC     
say "ZDS1EX Primary space allocation   :" ZDS1EX     
say "ZDS2SPC Secondary space units     :" ZDS2SPC    
say "ZDS2EX Secondary space allocation :" ZDS2EX     
say "ZDSDSNT Dataset name type         :" ZDSDSNT    
say "ZDSSEQ Compressible YES/NO        :" ZDSSEQ     
say "ZDSCDATE Creation date            :" ZDSCDATE   
say "ZDSXDATE Expiration date          :" ZDSXDATE   
say "ZDSRDATE Reference ddate          :" ZDSRDATE   
say "ZDSTOTA Allocated space units     :" ZDSTOTA    
say "ZDSTOTU Used space units          :" ZDSTOTU    
say "ZDSEXTA Allocated extents         :" ZDSEXTA    
say "ZDSEXTU Used extents              :" ZDSEXTU    
say "ZDSDIRA Allocated directory blks  :" ZDSDIRA    
say "ZDSDIRU Used directory blocks     :" ZDSDIRU    
say "ZDSDIR PDSE directory blocks      :" ZDSDIR     
say "ZDS£MEM Number of members         :" ZDS£MEM    
say "ZDSPAGU Pages used(PDSE)          :" ZDSPAGU  
say "ZDSPERU Percent used(PDSE)        :" ZDSPERU  
say "ZDSMC Management class            :" ZDSMC    
say "ZDSSC Storage class               :" ZDSSC    
say "ZDSDC Dataclass                   :" ZDSDC    
say "ZDSCB1 Format1 datacontrol block  :" ZDSCB1   
say "ZDSVTAB Volume table              :" ZDSVTAB  
exit
En z/OS 1.9 en tous cas, ZDSTOTA, ZDSTOTU, ZDSEXTA, ZDSEXTU donnent les bonnes informations pour un fichier multi-volumes. En prime ZDSVTAB donne la liste des volumes et cerise sur le gateau, je découvre que ZDSCB1 donne dans son intégralité le contenu du DSCB FORMAT 1 du fichier.
Homer-ac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/10/2008, 14h22   #10
Membre expérimenté
 
Avatar de Homer-ac
 
Inscription : octobre 2007
Messages : 449
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : octobre 2007
Messages : 449
Points : 518
Points : 518
Pour le lien CBTTAPE et le mode d'emploi je j'avais déjà donné recemment sur ce forum :
http://www.developpez.net/forums/d61...iste-fichiers/
Homer-ac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/10/2008, 08h40   #11
Invité régulier
 
Inscription : octobre 2008
Messages : 7
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 7
Points : 8
Points : 8
Nom code

"EXECIO * DISKR LIST (FINIS STEM List."
"FREE FI(LIST)"
DO i=1 to List.0
Fic="'"WORD(List.i,1)"'"
/* SAY Fic */
address ISPEXEC "DSINFO DATASET('"Fic"')"
CALL _Info
END

_Info:
say "ZDSVOL First or only volume :" ZDSVOL
say "ZDS£VOLS Number of volumes :" ZDS£VOLS
say "ZDSDEVT Device type :" ZDSDEVT
.
.
.
Return

Le résultat
ZDSVOL First or only volume : ZDSVOL
ZDS£VOLS Number of volumes : ZDS£VOLS
ZDSDEVT Device type : ZDSDEVT
...

Qu'est ce que j'ai bien pu oublié?
Njsan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/10/2008, 09h50   #12
Membre expérimenté
 
Avatar de Homer-ac
 
Inscription : octobre 2007
Messages : 449
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : octobre 2007
Messages : 449
Points : 518
Points : 518
Code :
1
2
3
4
Fic="'"WORD(List.i,1)"'" 
/* SAY Fic */ 
address ISPEXEC "DSINFO DATASET('"Fic"')"
Tu as certainement un code retour après DSINFO. Ajouter un test du style : if RC > 0 then say 'RC='RC 'sur DSINFO' ou ajouter un ordre trace 'R'
Je pense que l'erreur vient du fait que tu ajoutes une quote devant et après le DSN lors de l'affectation FIC= et une nouvelle fois dans le DSINFO qui ne devrait pas aimer ''Fic''.
Nb. Si réellement tu dois gérer une liste de fichier et que celle-ci est assez conséquente, si tu n'as besoin que des infos catalogue (pas les allocations QSAM mais on a les alloc VSAM) tu trouveras éventuellement un intérêt à regarder le sample IGGCSIRX en SYS1.SAMPLIB. C'est une gestion moins évidente mais terriblement plus performante.
Homer-ac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/10/2008, 10h43   #13
Invité régulier
 
Inscription : octobre 2008
Messages : 7
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 7
Points : 8
Points : 8
J'ai essayé sans les quotes, à chaque fois j'ai un RC -3.
Njsan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/10/2008, 11h19   #14
Membre expérimenté
 
Avatar de Homer-ac
 
Inscription : octobre 2007
Messages : 449
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : octobre 2007
Messages : 449
Points : 518
Points : 518
Il faut entourer le DSN d'une appostrophe mais d'une seule.
RC-3 : Tu n'essaierais pas de passer ça en Batch par hasard ? Sous TSO ISPF est lancé, en Batch il faut un JCL spécial. J'avais bien noté qu'il n'y a pas d'alloc avant l'execio mais j'avais mis ça sur le compte d'une copie partielle avec seulement la fin du REXX.
Pour le Batch, si on a besoin de passer un ISPEXEC dans son REXX, il faut faire monter ISPF par un ISPSTART et indiquer une ISPPROF et toutes les ISPxLIB en particulier qui vont bien. J'ai déjà indiqué un JCL exemple sur ce forum :
http://www.developpez.net/forums/d61...ebcopy-select/
Homer-ac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/10/2008, 11h59   #15
Invité régulier
 
Inscription : octobre 2008
Messages : 7
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 7
Points : 8
Points : 8
J'utilise en effet un batch, je vais essayer tout ca. Et mci bcp pour ton aide.
Njsan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/10/2008, 12h16   #16
Membre expérimenté
 
Avatar de Homer-ac
 
Inscription : octobre 2007
Messages : 449
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : octobre 2007
Messages : 449
Points : 518
Points : 518
Juste un point de détail, dans ton batch, entre l'acquisition de la liste des fichiers à traiter et la recup. des infos fichiers un par un, certains peuvent ne plus être accessibles (REXX est un langage très bien mais il ne brille pas en performances). Penser à réinitialiser les variables ou ajouter un truc tu genre IF RC > 0 then iterate apres le DSINFO dans la boucle, sinon ils ressortiraient avec les attributs du fichier précédent.
Homer-ac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/10/2008, 12h22   #17
Invité régulier
 
Inscription : octobre 2008
Messages : 7
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 7
Points : 8
Points : 8
Yep nikel c'est parfait.

Aller je vais abuser de tes connaissances. A part

"ALLOC DD(DDIN) dsn(" fic ") SHR REUSE"
"EXECIO * DISKRU DDIN (FINIS STEM NBR."
Count=NBR.0

Aurais tu qqchose pour compter le nombre d'enregistrement dans un PDS sans avoir à l'ouvrir car pour les gros (tres gros fichiers) c'est tres lent voir çà plante.
Njsan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/10/2008, 13h17   #18
Membre expérimenté
 
Avatar de Homer-ac
 
Inscription : octobre 2007
Messages : 449
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : octobre 2007
Messages : 449
Points : 518
Points : 518
Peux-tu préciser ? Un PDS ? De quel type Fixe ou indéfini (LOADLIB)
Dans un PDS tu peux éventuellement t'appuyer sur les statistiques Directory à condition que celles-ci soient à jour (LMMFIND ou LMMSTATS).
Si c'est un simple fichier QSAM, il n'y a pas le choix, il faudra le lire jusqu'au bout ou déduire grosso modo le nombre d'enregistrements d'après un ratio de sa taille / à son blksize. En clair le nombre d'enregistrement n'est ni au catalogue ni en VTOC à ma connaissance.
Si on veut lire un gros fichier en REXX (mais pour des raisons des performances, je préfererai largement COBOL en particulier), il faudra éviter un EXECIO 0 DISKR qui risque de planter s'il n'a pas la place de tout charger en mémoire mais boucler sur un EXECIO 1 DISKR et réserver le paramètre FINIS sur un dernier appel EXECIO 0 DISKR ddname (FINIS.
Point de détail, j'éviterai aussi le DISKRU qui fait un OPEN OUTPUT et va en plus provoquer un ENQ et donc dégrader les performances. Si le fichier doit être MAJ, en cas de plantage c'est en plus assez dangereux.
Homer-ac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/10/2008, 09h41   #19
Membre expérimenté
 
Avatar de Homer-ac
 
Inscription : octobre 2007
Messages : 449
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : octobre 2007
Messages : 449
Points : 518
Points : 518
Juste une précision. Si tu veux compter le nombre total des enregistrements d'un PDS tu peux le mettre 'à plat' dans un fichier QSAM via l'utilitaire IEBPTPCH
Homer-ac est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h35.


 
 
 
 
Partenaires

Hébergement Web