我使用下面的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 *
/ *
//
答案 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版本,然后将所有成员复制到它,然后运行比较以确保没有损坏的位或字节,然后删除旧库并将新库重命名为旧名称。