Sujet : Allocation de fichier
Je n'arrive pas à allouer une taille suffisamment grande pour pouvoir écrire
toutes les données dans mon fichier; en effet, je tombe toujours sur un B37.
1er étape : Je décharge un VSAM dans un séquentiel
Ça fonctionne : je copie un peu plus de 5 millions de lignes du fichier VSAM
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 //S020IDCA EXEC PGM=IDCAMS //FICIN DD DSN=DKIO.DTCDM.IOMSB,DISP=SHR //FICOUT DD DSNDKIO.KIO.DP2DM.IOMSSEQ,DISP=(,CATLG), // SPACE=(CYL,(1700,300),RLSE), // DCB=(RECFM=VB,LRECL=4084,BLKSIZE=8192) //SYSPRINT DD SYSOUT=* //SYSIN DD * REPRO IFILE(FICIN) OFILE(FICOUT) /*
vers le séquentiel.
2nde étape : modification de données dans fichier séquentiel.
1er test :
Ça ne marche pas : tombe sur un B37 pour le fichier FSORTIE. Pourtant mon programme ne rajoute aucune ligne, il ne fait que modifier des données dans les lignes.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 //S010COTY EXEC PGM=KYIOS024,REGION=2M //SYS000 DD SYSOUT=* //SYSOUT DD SYSOUT=* //SYSPRINT DD SYSOUT=* //SYSDBOUT DD SYSOUT=* //SYSUDUMP DD SYSOUT=* //FENTREE DD DISP=SHR,DSN=DKIO.KIO.DP2DM.IOMSSEQ //FSORTIE DD DSN=DKIO.SAVE.IOMS0,DISP=(,CATLG), // SPACE=(CYL,(1700,300),RLSE), // DCB=(RECFM=VB,LRECL=4084,BLKSIZE=8192)
J'ai aussi essayé en rajoutant l'option UNIT=(SYSDA,10) pour du multivolume, sans plus de succès
Je me suis dit que c'était mon programme Cobol qui ne savait pas gérer ce fichier mutli-volume correctement, aussi test 2
2nd test :
Où j'ai une rupture dans mon programme : tous les 500 000 enregistrements, je change de fichier de sortie.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 //S010COTY EXEC PGM=KYIOS024,REGION=2M //SYS000 DD SYSOUT=* //SYSOUT DD SYSOUT=* //SYSPRINT DD SYSOUT=* //SYSDBOUT DD SYSOUT=* //SYSUDUMP DD SYSOUT=* //FENTREE DD DISP=SHR,DSN=DKIO.KIO.DP2DM.IOMSSEQ //FSORTIE DD DSN=DKIO.SAVE.IOMS0,DISP=MOD //FSORTI1 DD DSN=DKIO.SAVE.IOMS1,DISP=MOD //FSORTI2 DD DSN=DKIO.SAVE.IOMS2,DISP=MOD //FSORTI3 DD DSN=DKIO.SAVE.IOMS3,DISP=MOD //FSORTI4 DD DSN=DKIO.SAVE.IOMS4,DISP=MOD //FSORTI5 DD DSN=DKIO.SAVE.IOMS5,DISP=MOD //FSORTI6 DD DSN=DKIO.SAVE.IOMS6,DISP=MOD //FSORTI7 DD DSN=DKIO.SAVE.IOMS7,DISP=MOD //FSORTI8 DD DSN=DKIO.SAVE.IOMS8,DISP=MOD //FSORTI9 DD DSN=DKIO.SAVE.IOMS9,DISP=MOD //FSORT10 DD DSN=DKIO.SAVE.IOMS10,DISP=MOD
Ensuite étape suivante :
Mais là, à nouveau, je me retrouve avec un B37 au bout d'environ 1 300 000 lignes écrites.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 //S100SORT EXEC PGM=SORT //* //SYSOUT DD SYSOUT=* //SORTIN DD DSN=DKIO.SAVE.IOMS0,DISP=SHR // DD DSN=DKIO.SAVE.IOMS1,DISP=MOD // DD DSN=DKIO.SAVE.IOMS2,DISP=MOD // DD DSN=DKIO.SAVE.IOMS3,DISP=MOD // DD DSN=DKIO.SAVE.IOMS4,DISP=MOD // DD DSN=DKIO.SAVE.IOMS5,DISP=MOD // DD DSN=DKIO.SAVE.IOMS6,DISP=MOD // DD DSN=DKIO.SAVE.IOMS7,DISP=MOD // DD DSN=DKIO.SAVE.IOMS8,DISP=MOD // DD DSN=DKIO.SAVE.IOMS9,DISP=MOD // DD DSN=DKIO.SAVE.IOMS10,DISP=MOD //SORTWK01 DD UNIT=SYSDA, // SPACE=(CYL,200) //SORTWK02 DD UNIT=SYSDA, // SPACE=(CYL,200) //SORTWK03 DD UNIT=SYSDA, // SPACE=(CYL,200) //SORTWK04 DD UNIT=SYSDA, // SPACE=(CYL,200) //SORTOUT DD DSN=DKIO.SAVE.IOMSB,DISP=(,CATLG), // SPACE=(CYL,(1700,300),RLSE),UNIT=(SYSDA,10), // DCB=(RECFM=VB,LRECL=4084,BLKSIZE=8192) //SYSIN DD * SORT FIELDS=COPY SUM FIELDS=NONE /*
Ce que je ne comprends pas, c'est pourquoi dans ma 1er étape (copie VSAM vers séquentiel), mon allocation fonctionne et j'arrive bien à écrire toutes les
lignes.
Et pourquoi dans les autres cas cela ne fonctionne pas ?
Merci d'avance pour votre aide.
PS : Ma reconnaissance éternelle à celui qui me donnera la solution.
Partager