2

我在生产中遇到了 GDG 生成问题。

在步骤 2 中创建了新一代:

//INP DD DSN=sample.test(+1),  
//      DISP=(,CATLG,KEEP),                     
//       SPACE=(CYL,(50,20),RLSE),               
//       DCB=(RECFM=FB,LRECL=1020,BLKSIZE=4080)  

STEP 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 版,那么作业运行良好。

4

4 回答 4

1

您需要指定消息编号,IEF... INP 步骤中的默认处置是新的,因此该消息表明数据集已经存在 - 没有看到卡组中的其他步骤,很难提供帮助。

于 2012-10-26T21:18:40.787 回答
1

你对GDG的想法是正确的。在这种情况下,如果创建 GDG的步骤失败或由于 COND / IF 语句被跳过或 Step2 未打开 GDG(非 SMS ???),您将收到 JCL 错误,那么 step3 将收到 JCL 错误,因为 sample.测试(+1)不存在。还有其他可能导致 JCL 错误的可能性(例如,无法分配数据集),但我认为这是最有可能的。如果列出完整的 JCL / 错误消息会更容易

有两种可能的解决方案(在大多数情况下选择选项 1 或 2

  1. 在 step2 之前添加IEBGENER step1a 以创建 GDG,这应确保创建 GDG。

  2. 在第 3 步中添加条件

    //step3 exec PGM=SORT,COND=(0,NE)

  3. 将 disp 更改为 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 允许您创建未分类的数据集。

或者 SMS 可能是一个问题。

于 2013-05-13T02:32:47.003 回答
0

您使用了错误的 GDG 索引。您应该使用 (0) 索引将最新添加的数据集引用到 GDG。

(+1) 表示应将新数据集添加到 GDG。

更多信息:IBM 检索生成数据集

于 2012-10-27T13:41:20.400 回答
0

由于关于哪个 DD 语句错误的信息有限,很难解释确切的问题。我认为您对在示例中使用 +1 有正确的想法。我不认为这是您的错误的问题。

我怀疑该错误与//INP DD 语句中第一个DD 的KEEP 异常处置有关。实际上,您要求创建一个新的 gdg 数据集,只有在第 2 步正常执行时才会对其进行编目。如果作业在步骤 2 中异常终止,则您正在向系统请求 KEEP尚未在系统目录中注册的 GDG 数据集。我认为 DISP=(,CATLG,CATLG) 在这种情况下将是 //INP DD 语句的更合适的编码。

通常你会在数据集已经存在并且应该保留的情况下使用 KEEP。

但是,如果您的商店使用 SMS 管理的数据集,则 KEEP 将被视为 CATLG,因为必须对所有 SMS 管理的数据集进行编目。如果是这种情况,那么此响应可能不适用于您的具体情况。从您的示例中看来,SMS 并不是这里的一个因素。

于 2013-05-12T23:24:56.277 回答