如何更改ps或pds的属性

Pra*_*mod 1 jcl

我使用下面的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*
/*
//

小智 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             
Run Code Online (Sandbox Code Playgroud)

例如.用于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                              
/*                                        
Run Code Online (Sandbox Code Playgroud)

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