如何更改ps或pds的属性

时间:2012-03-26 15:12:25

标签: 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 *
 / *
 //

2 个答案:

答案 0 :(得分:8)

看起来您正在尝试通过指定DISP = MOD来更改数据集的属性。 MOD的记录目的是指示数据集是否存在,记录是否要添加到其末尾或是否要创建新数据集。

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

我认为这一点的主要意思是不建议这样做。而不是运行风险可能使用您的工作使用LIKE复制数据集并覆盖您想要更改的内容。然后,当您快乐删除旧数据集并将新数据集重命名为旧名称时。

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

EG。对于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             

EG。对于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参数

答案 1 :(得分:0)

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