如果在步骤2中创建生成并且在步骤3中参考,则如何参考GDG生成

时间:2012-10-26 10:47:07

标签: mainframe jcl

我在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版,则作业运行良好。

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

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

更多信息:IBM Retrieving a Generation Data Set

答案 2 :(得分:1)

您对GDG的看法是正确的。在这种情况下,如果步骤创建GDG 失败跳过,则会因为COND / IF语句或Step2不会导致JCL错误打开GDG(非SMS ???),然后step3将得到一个JCL错误,因为sample.test(+1)不存在。还有其他可能导致JCL错误的可能性(例如,无法分配数据集),但我认为这是最有可能的。如果列出完整的JCL /错误消息

会更容易

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

  1. 在第2步之前添加 IEBGENER 步骤1a以创建GDG,这应确保创建GDG。

  2. 将cond添加到第3步

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

  3. 将DIS更改为DISP =(,CATLG,CATLG),(如果步骤失败)

    // INP DD DSN = sample.test(+1),
    // DISP =(,CATLG,CATLG),

    如果您希望在作业失败时输出,则仅选择选项2.

  4. 我会将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不是此处的一个因素。