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 13/08/2009, 16h49   #1
Invité de passage
 
Inscription : août 2009
Messages : 8
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 8
Points : 1
Points : 1
Par défaut copie d'un pds avec modification des noms des membres

Bonjour,

Je recherche une méthode rapide pour renommer tout les membres dans un PDS.

C'est-à-dire que j’ai mon pds ED.DFGO.SRC contenant des sources FGO___, on fait une copie de ce PDS en ED.DBAL.SRC avec les sources FGO, or il faut que les sources dans ED.DBAL.SRC doivent commencer par BAL___. Quand on en a qq’uns, on peut faire 3.1.
Mais quand on en a 150, cela devient lord.

FGO00125 devient BAL00125
FGOBPROD devient BALBPROD

Avez-vous une méthode par JCL?

Pour la copie du PDS, je le fais par IEBCOPY.

Merci par avance.
Guy
naimespseudo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/08/2009, 14h45   #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
Par IEBCOPY tu peux faire comme ça :
Code :
1
2
3
4
5
//SYSIN    DD *              
 COPY INDD=IN01,OUTDD=OU01   
 S M=((FGO00125,BAL00125,R)) 
 S M=((FGOBPROD,BALBPROD,R))
Mais faire un JCL pour générer le 'SELECT MEMBER=((OLDMEMBR,NEWMEMBR,R))' n'est simple que si les noms de membre ont tous la même longueur. IEBCOPY n'acceptera pas un SELECT du genre S M=((FGO001 ,BAL001 ,R)). Il faut donc que tous les noms de membres aient la même longueur.
Dans ce cas un IEHLIST sur un fichier temporaire,
(SYSIN : LISTPDS DSNAME=MON.PDS.INPUT,VOL=3390=VOLID)
+1 un SORT de ce fichier de génération du SYSIN de SELECT
Code :
1
2
3
4
5
//SYSIN    DD  *                                                       
 SORT FIELDS=COPY                                                      
 OMIT COND=(22,1,CH,LT,C'0')     SI PAS TTR (VALEUR CHIFREE) ON JETTE  
 OUTREC FIELDS=(C' S M=((',12,8,C',BAL',15,5,C',R))',80:C' ')
Et enfin l'IEBCOPY !
C'est il me semble un cas typique ou un REXX apparait comme beaucoup plus simple (si tu as déjà pratiqué bien entendu).
Un LISTDS pour lire la Directory et la génération du SYSIN de SELECT MEMBER qui va bien puis appel d'IEBCOPY ou encore au choix, recopie directement par LMCOPY.
Homer-ac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/08/2009, 21h02   #3
Invité de passage
 
Inscription : août 2009
Messages : 8
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 8
Points : 1
Points : 1
bonsoir,

je vais regarder lundi votre proposition.

J'ai fait des recherches et je vois regulierement la notion de REXX.
J'ai l'impression que cela a l'air vraiment puissant. Mais je ne connais pas.

Avez vous une doc ou un site qui peut m'aider?

deja merci pour votre réponse.
Mais je risque d'en avoir d'autres car je ne connais pas le listds. mais avant je vais voir sur le net si je trouve des infos la dessus.

Guy
naimespseudo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/08/2009, 23h46   #4
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
Citation:
et je vois regulierement la notion de REXX.
J'ai l'impression que cela a l'air vraiment puissant. Mais je ne connais pas.
REXX est un language interprété (encore qu'il puisse être compilé si on a la chance de disposer du compilateur). Structuré et disposant d'une bonne cinquantaine de fonctions, il s'averre très pratique quand on a un peu le dos au mur avec les outils standards MVS (nb. REXX tourne aussi sur d'autres OS) et permet de faire un peu tout ce que l'on veut. C'est donc un outil courrant, tout au moins dans les métiers de production z/OS, qui permet d'appeler les services TSO et ISPF en particulier mais en fait bien d'autres. Il y a pas mal de doc sur REXX sur le NET mais en francais, plus grand chose à ma connaissance depuis que le responsable du site HOSTHELPONLINE a baissé les bras suite à des attaques de virus multiples et en attendant un nouvel hebergeur. J'espère que l'on reverra bientôt ce site, En attendant, si tu ne connais pas, je te conseilles de te rapprocher des équipes type bureau technique de ton site, il serait étonnant qu'ils ne puissent pas te preter un support de cours, il y a en effet pas mal de sociétés qui donnent des cours REXX et services ISPF, dont IBM bien entendu.
Pour ton problème, en JCL pur c'est un peu plus difficile sur des noms de membres variables mais ça reste jouable. Je vais vérifier lundi une ou deux possibilités. Par SORT ou ICETOOL mais le SYSIN pour éliminer les blancs ne m'apparait pas si trivial que ça, mais comme souvent en MVS on peut toujours ruser, par exemple en appelant l'EDIT en Batch.
Homer-ac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2009, 08h59   #5
Invité de passage
 
Inscription : août 2009
Messages : 8
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 8
Points : 1
Points : 1
Bonjour,

En faite pour te simplifier la recherche, les noms ont tous 8 caractères.
Donc c'est pas utile de chercher l'astuce. Mais cela peut être intéressant de voir la solution.

Pour le moment j'ai un pb dans mon sort (err 158)... mais je ne baisse pas les bras, je vais chercher le pourquoi entre midi et 14h.

Guy
naimespseudo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2009, 10h19   #6
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 fun donc (ça complique effectivement, mais si un autre voit plus simple je suis aussi preneur), une solution avec SORT (pour des noms de membres sur 5 à 8 caractères) :
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
//S0010  EXEC PGM=IEHLIST                                               
//SYSPRINT DD DSN=&&OUT1,DISP=(NEW,PASS),                               
// SPACE=(TRK,(15,15),RLSE),LRECL=121,RECFM=FBA,BLKSIZE=0               
//VOL      DD UNIT=3390,VOL=SER=volser,DISP=SHR                         
//SYSIN    DD *                                                         
     LISTPDS DSNAME=Mon.PDS.Origine,VOL=3390=volser                    
//*-------------------------------------------------------------------  
//S0020    EXEC PGM=SORT                                                
//SYSOUT   DD  SYSOUT=*                                                 
//SYSPRINT DD  SYSOUT=*                                                 
//SORTIN   DD DSN=&&OUT1,DISP=(OLD,DELETE)                              
//SORTOUT  DD DSN=&SYSUID..WORK.TEMP1,DISP=(NEW,CATLG,DELETE),          
// SPACE=(TRK,(5,5),RLSE),LRECL=80,RECFM=FB,BLKSIZE=0                   
//SYSIN    DD  *                                                        
 SORT FIELDS=COPY                                                       
 OMIT COND=((22,1,CH,LT,C'0'),OR,(15,1,CH,EQ,C' '))  - NON TTR / MBR <4 
 OUTFIL  IFTHEN=(WHEN=(16,1,CH,EQ,C' '),   LONG. MBR = 4                
         BUILD=(C' S M=((',12,4,C',BAL',15,1,C',R))',80:C' ')),         
         IFTHEN=(WHEN=(17,1,CH,EQ,C' '),   LONG. MBR = 5                
         BUILD=(C' S M=((',12,5,C',BAL',15,2,C',R))',80:C' ')),         
         IFTHEN=(WHEN=(18,1,CH,EQ,C' '),   LONG. MBR = 6                
         BUILD=(C' S M=((',12,6,C',BAL',15,3,C',R))',80:C' ')),         
         IFTHEN=(WHEN=(19,1,CH,EQ,C' '),   LONG. MBR = 7                
         BUILD=(C' S M=((',12,7,C',BAL',15,4,C',R))',80:C' ')),         
         IFTHEN=(WHEN=NONE,                LONG. MBR = 8                
         BUILD=(C' S M=((',12,8,C',BAL',15,5,C',R))',80:C' '))          
//* GENERATION D'UN SELECT MEMBER=((OLDMEMBR,NEWMEMBR,R))
Homer-ac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2009, 11h05   #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
Toujours pour le fun et pour rappeler qu'un EDIT assez rustique fonctionne aussi en batch, bien que l'on n'y pense pas souvent :
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
//SYSIN    DD  *                                                      
 SORT FIELDS=COPY                                                     
 OMIT COND=(22,1,CH,LT,C'0')     SI PAS TTR (VALEUR CHIFREE) ON JETTE 
 OUTREC FIELDS=(C' S M=((',12,8,C',BAL',15,5,C',R))',80:C' ')         
//*-------------------------------------------------------------------
//EDIT03   EXEC PGM=IKJEFT01        
//SYSTSPRT DD  SYSOUT=*                                               
//SYSTSIN  DD  *                                                      
EDIT 'MON.FICHIER.SORTIE.DE.TRI' DATA NONUM                                  
CHANGE * 9999 '    ' '' ALL                                           
TOP                                                                   
CHANGE * 9999 '   '  '' ALL                                           
TOP                                                                   
CHANGE * 9999 '  '   '' ALL                                           
TOP                                                                   
CHANGE * 9999 ' '    '' ALL                                           
TOP                                                                   
CHANGE * 9999 'SM='  ' SELECT MEMBER=' ALL                            
TOP                                                                   
END SAVE                                                              
//*
//S0040    EXEC PGM=IEBCOPY                             
//SYSPRINT DD  SYSOUT=*                                 
//SYSUDUMP DD  SYSOUT=*                                 
//IN01     DD  DISP=SHR,DSN=&PDSIN                      
//OU01     DD  DSN=&SYSUID..WORK.MONPDS.COPIE,          
//             DISP=(NEW,CATLG),UNIT=3390,LIKE=&PDSIN   
//SYSIN    DD *                                         
  COPY  INDD=((IN01,R)),OUTDD=OU01                      
//         DD DSN=MON.FICHIER.SORTIE.DE.TRI,DISP=SHR          
//
Homer-ac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2009, 17h50   #8
Invité de passage
 
Inscription : août 2009
Messages : 8
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 8
Points : 1
Points : 1
Merci Homer-ac,

Pour tout le temps que vous avez passé pour répondre à mes questions...

Mais pour le moment, je n'arrive pas à faire fonctionner le IEHLIST, mais je vais pas me laisser embêter par cela, je vais continuer à chercher le pourquoi.
Je me permettrai de remettre un msg si je bloque.

Sinon comme vous avez dis, j'ai fait la demande sur la doc sur Rexx et en même temps sur les jcl's.
naimespseudo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/08/2009, 10h37   #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
IEHLIST est un utilitaire antédiluvien de MVS pour lister une vtoc ou une directory. Comme il faut spécifier le volume, et dans une DD (le plus souvent on met DISP=OLD, mais ça marche avec SHR) et dans le SYSIN, en général, gestion SMS oblige, on le remplace par autre chose sur les sites z/OS, mais au moins marche t'il partout, c'est pourquoi je l'avais signalé.
Un exemple de JCL :
Code :
1
2
3
4
5
6
7
8
  
//S0010  EXEC PGM=IEHLIST                                    
//SYSPRINT DD DSN=&&OUT1,DISP=(NEW,PASS),                    
// SPACE=(TRK,(15,15),RLSE),LRECL=121,RECFM=FBA,BLKSIZE=0    
//VOL      DD UNIT=3390,VOL=SER=volume,DISP=SHR              
//SYSIN    DD *                                              
     LISTPDS DSNAME=mon.PDS.a.lister,VOL=3390=volume 
//*
Vraissemblablement si tu n'arrives pas à le faire fonctionner c'est que tu n'as pas spécifié de DD (DDNAME quelconque) pointant sur le volume disque où se trouve ton PDS
Homer-ac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/08/2009, 15h39   #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
Bien que la finalité de ce forum est de proposer des réponses mais pas des solutions toutes faites, comme ça me faisait une pose, j'ai testé ceci.
Un REXX qui récupère la liste des membres du PDS passé en SYSUT1 dans le JCL et qui réécrit sur un fichier QSAM en DD SYSUT2, pour relecture en SYSIN ensuite, après remise en forme de chaque ligne par l'instruction REXX trouvée dans le PARM.
J'ai mis le tout dans un JCL complet. Bien entendu, normalement le REXX serait dans un PDS de procédures appelées directement par IKJEFT01. Normalement également un REXX de service de ce type aurait très bien pu faire directement la copie des membres. Simplement dans ce cas, c'est un peu plus ouvert puisque l'on génère le SYSIN que l'on veut via le PARM d'appel.
Juste pour ceux qui ne connaissent pas, ça donne une idée de la puissance de REXX. Il n'y a pas beaucoup de languages qui permettent d'exécuter une instruction contenue dans une variable. Donc pourquoi pas un petit coup de pub pour REXX au passage.

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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
//*-----------------------------------------------------------------
//PDSIN    SET PDSIN=ici.le.nom.du.PDS.en.entrée
//PDSOU    SET PDSOU=ici.le.nom.du.PDS.en.sortie
//*-----------------------------------------------------------------
//*------- COPIE DU REXX SUR UN PDS TEMPORAIRE --------------------*
//IEBGENER EXEC PGM=IEBGENER
//SYSUT1   DD   *,DLM=££
/* REXX - LISTE sous TSO ou écriture sur SYSUT2 de tous les membres   */
/* ====   d'un PDS passé en PARM ou via une DD JCL BATCH SYSUT1       */
/*        si DD SYSUT1, le parm contient l'ordre REXX de restitution  */
/*        pour chaque membre trouvé.   Par exemple :                  */
/*        " SELECT MEMBER="MBR.        A défaut, affich/écrit. simple */
/* ------------------------------------------------------------------ */
Arg PARM
/* PARM = '" SELECT MEMBER="MBR'     pour test sous TSO */
PARM=Strip(strip(PARM),"B","'")   /* si QUOTES, VIREES AUX EXTREMITES */
Call ON HALT                /* GESTION INTERRUPTION sous TSO */
Address TSO                 /* MODE EXEC TSO EN BATCH */
RC = LISTDSI('SYSUT1' FILE)
DSNAME = SYSDSNAME
 
If RC <> 0 then ,           /* PAS DE DDNAME SYSUT1 TROUVE */
   Parse var PARM DSNAME PARM  /* Sous TSO dans le PARM ?  */
DSNAME=Strip(DSNAME,B,"'")  /* si QUOTES, VIREES AUX EXTREMITES */
If SYSDSN("'"DSNAME"'") ^= 'OK' then do
   say DSNAME SYSDSN("'"DSNAME"'") 'ABANDON !' ; Exit 4
End
X= OUTTRAP('TAB.')
"LISTDS  '"DSNAME"' MEMBERS"
If TAB.0 < 5 then do
   say Strip(TAB.1) ; say Strip(TAB.2) 'ABANDON !' ; Exit 4
End
do i=1 TO TAB.0            /* Il faut se pointer sur 1er membre */
   If Pos('-MEMBERS',TAB.i) > 0 then LEAVE
End
If Pos('-MEMBERS',TAB.I) = 0 then EXIT 1      /* CE N'EST PAS UN PDS */
R2 = LISTDSI('SYSUT2' FILE)              /* SYSUT2 EST T'IL ALLOUE ? */
j = i + 1 ; k = TAB.0 - i
do i=1 TO k /* Réaffectation des noms de membres au début du tableau */
   MBR = strip(TAB.j)  ; j = j + 1
   if PARM = '' then TAB.i = MBR              /* simple */
                else interpret 'TAB.i=' PARM  /* ou par affect. Parm */
   if R2 <> 0 then say TAB.I            /* pas de SYSUT2 - Affichage */
End
if R2 = 0 then "EXECIO" k "DISKW SYSUT2 (STEM TAB. FINIS)"  /* Batch */
drop TAB.
Exit 0
 
HALT:
say "LISTE DES MEMBRES PDS INTERROMPUE !"
Exit 0
££
//SYSPRINT DD   SYSOUT=*
//SYSUT2   DD   DISP=(,PASS,DELETE),DSN=&&REXX(TMPREXX),
//         SPACE=(TRK,(15,15,5),RLSE),    BIB DE REXX TEMPORAIRE
//         DCB=(RECFM=FB,LRECL=80,BLKSIZE=0,DSORG=PO)
//*
//SYSIN    DD   *
 GENERATE MAXFLDS=9
 RECORD   FIELD=(80,1,,1)
//*
//DELOUT   DD  DSN=&PDSOU, DELETE DU PDS DE TRAVAIL A CREER VIA IEBCOPY
//             DISP=(MOD,DELETE),UNIT=3390,SPACE=(TRK,(1,1))
//*------------------------------------------------------------------
//*------- EXECUTION DU REXX : GENERATION SYSIN SUR LISTE DES MEMBRES
//REXX001  EXEC PGM=IKJEFT01,
// PARM=('TMPREXX " SELECT MEMBER=(("MBR",NEW"SUBSTR(MBR,4)",R))"')
//*                                       === PREFIXE MEMBRE A CORRIGER
//* GENERATION D'UN SELECT MEMBER=((OLDMEMBR,NEWMEMBR,R))
//SYSPROC  DD   DISP=(OLD,DELETE),DSN=&&REXX
//SYSTSPRT DD   SYSOUT=*
//SYSTSIN  DD   DUMMY
//SYSUT1   DD   DISP=SHR,DSN=&PDSIN
//SYSUT2   DD   DISP=(NEW,PASS),DSN=&&TEMP1,
//         SPACE=(TRK,(15,15,5),RLSE),    GENERATION SYSIN POUR IEBCOPY
//         DCB=(RECFM=FB,LRECL=80,BLKSIZE=0,DSORG=PS)
//*
//*------------------------------------------------------------------
//*------- EXECUTION DE LA COPIE DES MEMBRES, NOUVEAU PREFIXE : NEW
//IEBCOPY  EXEC PGM=IEBCOPY
//SYSPRINT DD  SYSOUT=*
//SYSUDUMP DD  SYSOUT=*
//IN01     DD  DSN=&PDSIN,DISP=SHR
//OU01     DD  DSN=&PDSOU,DISP=(NEW,CATLG),UNIT=3390,LIKE=&PDSIN
//*        SPACE=(TRK,(45,45,100),RLSE)  ,SPACE A AJOUTER SI PB SMS
//SYSIN    DD *
  COPY  INDD=((IN01,R)),OUTDD=OU01
//         DD DSN=&&TEMP1,DISP=(OLD,DELETE)
//
//STEPFIN  EXEC PGM=IEFBR14
//*==================================================================
Homer-ac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/08/2009, 18h18   #11
Invité de passage
 
Inscription : août 2009
Messages : 8
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 8
Points : 1
Points : 1
Bonjour,

je viens de lire ton message, et je ne veux absolument pas la réponse toute faite!!! Car ce que j'aime c'est trouver le pourquoi du problème...
Donc il ne faut surtout pas me donner les réponses mais des chemins pour trouver...

Car ce midi j'ai réussie à trouver le fonctionnement du IEHLIST. Et j'avoue que la sensation était vraiment sympa.

Donc merci pour ta propoition toute faite mais je vais la mettre de coté et je la regarderai quand mon traitement tournera.. Car j'ai un p'tit pb avec le IEBCOPY. Mais rien d'insurmontable.

a bientôt j'espere.
naimespseudo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/08/2009, 21h53   #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
Comme je l'ai dit, le but n'est pas de donner des solutions 'clé en main' mais pour le coup, un REXX m'a détendu, d'autant plus que ce problème d'IEHLIST est récurrent en MVS.
Personnellement, je veux bien utiliser un utilitaire STANDARD MVS qui spécifie un STORAGROUP pour lister un contenu mais pas un VOLSER ! A l'heure de SMS généralisé à peu près partout en z/OS ça me semble débile !
Sauf que pour IEHLIST, je cherche encore une alternative STANDARD au LISTPDS. Pour lister la VTOC, en alternative au LISTVTOC, pas de problème, le DCOLLECT est plus sérieux. De même que , dans la famille IEH je demande le fils, pour remplacer l'ancien utilitaire IEHPROGM de cette génération, rien à dire, IDCAMS a évolué pour ça.
Reste le LISTPDS. Là je cherche encore le digne successeur qui évite de sortir un REXX de son chapeau ou un produit spécifique genre PDSMAN, FILEAID ou autre !
Alors j'en profite pour passer un appel. Si j'ai raté quelque chose et si quelqu'un a vu une alternative crédible au LISTPDS dans les utilitaires STANDARD IBM, ça m'intéresse aussi !
nb. un LISTDS via IKJEFT01 bien entendu, mais c'est un peu pauvre il me semble !
Homer-ac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/08/2009, 15h16   #13
Invité de passage
 
Inscription : août 2009
Messages : 8
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 8
Points : 1
Points : 1
Bonjour,
Je viens de faire la comparaison entre ma sol et la tienne...
Et j'avoue que la votre est plus rapide.

Par contre je viens de remarquer que l'on fait une incertion dans un nouveau pds. Comment faire pour mettre à jour dans un PDS contenant deja des membres sans les ecrasser?

Merci.
naimespseudo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/08/2009, 15h59   #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
Par IEBCOPY
COPY INDD=((IN01,R)),OUTDD=OU01 -> option replace
COPY INDD=IN01,OUTDD=OUT01 -> pas de replace (messages de Warning)
Puis les SELECT MEMBER= (ou S M=)

Nb. C'est sans rapport mais une info. pour ceux que ça peut interesser : j'ai vérifié par curiosité. Contrairement à ce que laisse penser la DOC IBM, on peut appeller IEHLIST dans un COBOL. Il faut juste faire attention aux options de compilations et Options Langage Environment (IEHLIST est en AMODE 24).
On peut donc remplacer IEHLIST par un COBOL d'appel qui génère le SYSIN qui va bien pour des PDS gérés par SMS.

Dernière modification par Homer-ac ; 21/08/2009 à 16h10.
Homer-ac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/08/2009, 18h28   #15
Invité de passage
 
Inscription : août 2009
Messages : 8
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 8
Points : 1
Points : 1
Bonjour,

je me suis mal exprimé...

Dans le solution que tu as mise, on fait fait une suppression du pds en sortie

//DELOUT DD DSN=&PDSOU, DELETE DU PDS DE TRAVAIL A CREER VIA IEBCOPY
// DISP=(MOD,DELETE),UNIT=3390,SPACE=(TRK,(1,1))

et après on fait :

COPY INDD=((IN01,R)),OUTDD=OU01 (ou OU01 est &PDSOU)

Or mon pb en faisant cela on supprime tout ce qu'il y a dans &PDSOU.
Or je veux mettre à jour certains membres et ne pas toucher les autres.

Je pensai quand suppriment DELOUT, cela serait ok, mais j'ai l'erreur disant de le pds &PDSOU est deja catalogué.

fg
naimespseudo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/08/2009, 20h28   #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
C'est du JCL de base.
Si ou veut faire l'IEBCOPY sur un PDS existant. on le met en DISP=SHR dans le Step d'IEBCOPY : PDSOUT DD DISP=SHR,DSN=le.PDS.en.sortie
Bien entendu pas question de Delete en amont dans ce cas.
Le JCL que j'avais proposé permet simplement de tester sans risque, à charge ensuite d'adapter le JCL à son besoin.
nb. Il y a pas mal de doc sur le JCL sur internet, et il me semble indispensable de pratiquer au moins un peu ce JCL pour travailler en MVS; Si de grosses sociétés choisissent une exploitation z/OS, c'est encore probablement parce que c'est un OS sans concurrence dans une logique de gestion Batch.
Homer-ac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/08/2009, 11h52   #17
Invité de passage
 
Inscription : août 2009
Messages : 8
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 8
Points : 1
Points : 1
Bjr,

Je suis mort de honte en lisant ta réponse...

Merci pour tout et surtout pour tout le temps que tu as passé à me répondre.

Si besoin d'info complementaire, je connais une bonne adresse...

encore merci.
naimespseudo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/08/2009, 23h09   #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
Pas de pb et de honte à avoir, on a tous galéré au début en MVS.
Mais si je peux me permettre un conseil, ne pas s'intéresser aux forums seulement quand on a un problème. Chaque question apporte son lot d'idées et tous avons a y gagner.
Par exemple, cette histoire de LISTPDS IEHLIST. Le fait qu'il faut spécifier le VOLSER énerve tous ceux (en fait presque tous en MVS) qui travaillent avec SMS.
Si on regarde sur le net, chacun y est allé de son REXX. J'ai fait ça aussi comme tout le monde je suppose, parce que même si c'est mieux en assembleur, les sites ont moins de compétences en Assembleur en ces temps.
S'il n'y avais pas eu celle question, parce qu'IEHLIST est un progamme autorisé, je n'aurai pas eu la curiosité de vérifier si un appel COBOL est possible.
Merci donc, je vais me faire ça en COBOL, juste par esprit de contradiction. COBOL n'auant paa le réputation de pouvoir gérer ça.
Parce qu'il y a moins de compétences en Assembleur, IBM met en avant le C à présent pour tout ce qui touche un peu au système. Normal, ils vendent de la CPU. Quand on voit qu'i faut moins d'un Meg pour compiler/linkéditer un Cobol contre 20 pour un progamme C, il ne me semble pa compliqué d'en déduire que le flot de runtime nécessaires à C pour son exécution à un coût.
Nb. Pour ceux qui ne compendraient pas, disons que c'était ma minute nostalgie.
Homer-ac est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 20h41.


 
 
 
 
Partenaires

Hébergement Web