我在GDG生产中遇到了一个问题。
在STEP 2中创建新一代:
//INP DD DSN=sample.test(+1),
// DISP=(,CATLG,KEEP),
// SPACE=(CYL,(50,20),RLSE),
// DCB=(RECFM=FB,LRECL=1020,BLKSIZE=4080)
第3步提到了同一代:
//step3 exec PGM=SORT
//SORTIN DD DSN=sample.test(+1),
// DISP=SHR
//SORTOUT DD DSN=xxxx.yyyy,
// DISP=(NEW,CATLG,DELETE),
// UNIT=(SYSDA,9),DCB=(RECFM=FB,LRECL=132),
// SPACE=(CYL,(50,20),RLSE)
我这样给了,但是因为JCL错误而失败了。
任何人都可以帮忙解决这个失败的原因吗?
根据理论,一旦工作完成了。我们必须参考第0版。在同一工作中,我们必须参考+1版本。如果我在步骤3中更改为第0版,则作业运行良好。
答案 0 :(得分:1)
你需要指定消息号,IEF ...... INP步骤中的默认处置是NEW,因此消息表明数据集已经存在 - 没有看到套牌中的其他步骤,很难提供帮助。
答案 1 :(得分:1)
您使用的是错误的GDG索引。 您应该使用(0)索引将最新添加的数据集引用到GDG。
(+ 1)表示应将新数据集添加到GDG。
答案 2 :(得分:1)
您对GDG的看法是正确的。在这种情况下,如果步骤创建GDG 失败或跳过,则会因为COND / IF语句或Step2不会导致JCL错误打开GDG(非SMS ???),然后step3将得到一个JCL错误,因为sample.test(+1)不存在。还有其他可能导致JCL错误的可能性(例如,无法分配数据集),但我认为这是最有可能的。如果列出完整的JCL /错误消息
会更容易有两种可能的解决方案(在大多数情况下选择选项1或2 )
在第2步之前添加 IEBGENER 步骤1a以创建GDG,这应确保创建GDG。
将cond添加到第3步
// step3 exec PGM = SORT,COND =(0,NE)
将DIS更改为DISP =(,CATLG,CATLG),(如果步骤失败)
// INP DD DSN = sample.test(+1),
// DISP =(,CATLG,CATLG),
如果您希望在作业失败时输出,则仅选择选项2.
我会将DISP =(,CATLG,KEEP)更改为DISP =(,CATLG),DISP =(,CATLG,DELETE)或DISP =(,CATLG,CATLG)之一。在过去,KEEP让您创建一个未发布的数据集。
或者,短信可能是一个问题。
答案 3 :(得分:0)
使用有关哪个DD语句出错的有限信息来解释确切的问题是很困难的。我认为你对你的例子中使用+1有正确的想法。我不相信这是你的错误的问题。
我怀疑错误是在// INP DD语句中第一次DD的KEEP异常处置。实际上,您要求创建一个新的gdg数据集,只有在步骤2正常执行时才会对其进行编目。如果作业在步骤2中异常结束,则表示系统要求保留尚未在系统目录中注册的GDG数据集 。我认为DISP =(,CATLG,CATLG)将是这种情况下// INP DD语句的更合适的编码。
通常,在数据集已存在且应保留的情况下,您将使用KEEP。
但是,如果您的商店使用SMS管理的数据集,则KEEP将被视为CATLG,因为必须对所有SMS管理的数据集进行编目。如果是这种情况,则此响应可能不适用于您的具体情况。从您的示例中看,SMS不是此处的一个因素。