1

我使用下面的 jcl 来修改现有的 ps。我能够修改参数。但我收到 I/O 错误。

//TXXXXXSP JOB (MOD),'PRAMOD',CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1),

// NOTIFY=&SYSUID
//FIXPDS EXEC PGM=IEBGENER
//SYSPRINT DD SYSOUT=*
//SYSIN DD DUMMY
//SYSUT2 DD DSN=XXXXXX.CREATE.GDG,
// DISP=MOD,SPACE=(TRK,(10, 10,0),RLSE),UNIT=SYSDA,
// DCB=(RECFM=FB,LRECL=80,BLKSIZE=800)
//SYSUT1 DD *
/*
//

4

2 回答 2

8

看起来好像您正试图通过指定 DISP=MOD 来更改数据集的属性。MOD 的文档化目的是表明数据集存在并且记录要添加到它的末尾,或者要创建一个新的数据集。

但是,它可用于更改数据集的属性。我建议您需要小心执行此操作,因为您很容易损坏数据集。例如,为现有 PS 更改 DCB 可能是合理的,但如果该 PS 数据已经包含数据,您可能会损坏它。我没有尝试过,但我相信你可以增加空间,只要你不超过 16 个范围。我相信您甚至可以将PS再次更改为PDS,不要指望能够再次看到任何数据。

我认为这样做的要点是不推荐。与其冒风险,不如使用您的工作使用 LIKE 复制数据集并覆盖您想要更改的内容。然后,当您高兴地删除旧数据集并将新数据集重命名为旧名称时。

以下示例是从内存中完成的,因此它们可能存在轻微的语法错误。您需要指定 SPACE 但删除您不需要“修复”的任何其他参数。

例如。对于 PS

//FIXPS    EXEC PGM=IEBGENER
//SYSPRINT DD SYSOUT=*                            
//SYSUT1   DD DSN=XXXXXX.CREATE.GDG,DISP=SHR     
//SYSUT2   DD DSN=XXXXXX.CREATE.GDG.NEW, 
//            DISP=(NEW,CATLG,DELETE), 
//            SPACE=(TRK,(10,10,0),RLSE),UNIT=SYSDA,
//            DCB=(RECFM=FB,LRECL=80,BLKSIZE=800),           
//            LIKE=XXXXXX.CREATE.GDG             

例如。用于 PDS

//FIXPDS    EXEC PGM=IEBCOPY
//SYSPRINT DD SYSOUT=*                            
//SYSUT1   DD DSN=XXXXXX.CREATE.GDG,DISP=SHR     
//SYSUT2   DD DSN=XXXXXX.CREATE.GDG.NEW, 
//            DISP=(NEW,CATLG,DELETE), 
//            SPACE=(TRK,(10,10,0),RLSE),UNIT=SYSDA,
//            DCB=(RECFM=FB,LRECL=80,BLKSIZE=800),           
//            LIKE=XXXXXX.CREATE.GDG             
//SYSUT3   DD UNIT=SYSDA,SPACE=(TRK,(30,30),RLSE) 
//SYSUT4   DD UNIT=SYSDA,SPACE=(TRK,(30,30),RLSE) 
//SYSIN    DD *                                   
 C I=SYSUT1,O=SYSUT2                              
/*                                        

有关详细信息,请参阅 JCL 参考手册http://publibz.boulder.ibm.com/epubs/pdf/iea2b6b0.pdf第 12 章中的 DISP 参数

于 2012-03-27T07:46:00.547 回答
0

“惹怒一个伍基人是不明智的。” 我强烈建议,如果您希望实际更改 PDS 的属性,则实际分配相关库的 X 版本,然后将所有成员复制到其中,然后运行比较以确保没有损坏的位或字节,然后删除旧库并将新库重命名为旧名称。

于 2017-07-20T20:21:21.873 回答