目录

JCL - 定义数据集( Defining Datasets)

数据集名称指定文件的名称,它在JCL中由DSN表示。 DSN参数引用新创建或现有数据集的物理数据集名称。 DSN值可以由1到8个字符长度的子名组成,以句点分隔,总长度为44个字符(字母数字)。 以下是语法:

<b class="notranslate">DSN=&name | *.stepname.ddname</b>

Temporary datasets仅需要存储作业持续时间,并在作业完成时删除。 此类数据集表示为DSN=&name或仅指定DSN。

如果要在下一个作业步骤中使用作业步骤创建的临时数据集,则将其引用为DSN=*.stepname.ddname 。 这称为Backward Referencing.

连接数据集

如果存在多个相同格式的数据集,则可以将它们连接起来并作为输入传递给单个DD名称中的程序。

//CONCATEX JOB CLASS=6,NOTIFY=&SYSUID
//*
//STEP10    EXEC PGM=SORT
//SORTIN    DD DSN=SAMPLE.INPUT1,DISP=SHR
//          DD DSN=SAMPLE.INPUT2,DISP=SHR
//          DD DSN=SAMPLE.INPUT3,DISP=SHR
//SORTOUT   DD DSN=SAMPLE.OUTPUT,DISP=(,CATLG,DELETE),
//          LRECL=50,RECFM=FB

在上面的示例中,三个数据集连接在一起,并作为输入传递给SORTIN DD名称中的SORT程序。 合并文件,在指定的键字段上排序,然后写入SORTOUT DD名称中的单个输出文件SAMPLE.OUTPUT。

覆盖数据集

在标准化的JCL中,要执行的程序及其相关数据集放在编目过程中,该过程在JCL中调用。 通常,出于测试目的或事件修复,可能需要使用除编目过程中指定的数据集之外的其他数据集。 在这种情况下,可以在JCL中覆盖过程中的数据集。

//SAMPINST JOB 1,CLASS=6,MSGCLASS=Y,NOTIFY=&SYSUID
//*
//JSTEP1    EXEC <b class="notranslate">CATLPROC</b>,PROG=CATPRC1,DSNME=MYDATA.URMI.INPUT
//          DATAC=MYDATA.BASE.LIB1(DATA1)
//STEP1.IN1 DD DSN=MYDATA.OVER.INPUT,DISP=SHR
//*
//* The cataloged procedure is as below:
//*
//CATLPROC <b class="notranslate">PROC</b> PROG=,BASELB=MYCOBOL.BASE.LIB1
//*
//STEP1     EXEC PGM=&PROG
//STEPLIB   DD DSN=&BASELB,DISP=SHR
//IN1       DD DSN=MYDATA.URMI.INPUT,DISP=SHR
//OUT1      DD SYSOUT=*
//SYSOUT    DD SYSOUT=*
//SYSIN     DD MYDATA.BASE.LIB1(DATA1),DISP=SHR
//*
//STEP2     EXEC PGM=SORT

在上面的示例中,数据集IN1使用PROC中的文件MYDATA.URMI.INPUT,该文件在JCL中被覆盖。 因此,执行中使用的输入文件是MYDATA.OVER.INPUT。 请注意,数据集称为STEP1.IN1。 如果JCL/PROC中只有一个步骤,则只能使用DD名称引用数据集。 同样,如果JCL中有多个步骤,则数据集将被重写为JSTEP1.STEP1.IN1。

//SAMPINST  JOB 1,CLASS=6,MSGCLASS=Y,NOTIFY=&SYSUID
//*
//STEP      EXEC <b class="notranslate">CATLPROC</b>,PROG=CATPRC1,DSNME=MYDATA.URMI.INPUT
//          DATAC=MYDATA.BASE.LIB1(DATA1)
//STEP1.IN1 DD DSN=MYDATA.OVER.INPUT,DISP=SHR
//          DD DUMMY
//          DD DUMMY
//*

在上面的示例中,在IN1中连接的三个数据集中,第一个在JCL中被重写,其余数据保存在PROC中。

在JCL中定义GDG

生成数据组(GDG)是通过通用名称彼此相关的数据集组。 通用名称称为GDG基础,与基础关联的每个数据集称为GDG版本。

例如,MYDATA.URMI.SAMPLE.GDG是GDG基本名称。 数据集命名为MYDATA.URMI.SAMPLE.GDG.G0001V00,MYDATA.URMI.SAMPLE.GDG.G0002V00等。 最新版本的GDG称为MYDATA.URMI.SAMPLE.GDG(0),以前的版本称为(-1),( - 2),依此类推。 在程序中创建的下一个版本在JCL中称为MYDATA.URMI.SAMPLE.GDG(+1)。

在JCL中创建/更改GDG

GDG版本可以具有相同或不同的DCB参数。 初始模型DCB可以定义为由所有版本使用,但在创建新版本时可以覆盖它。

//GDGSTEP1 EXEC PGM=IDCAMS
//SYSPRINT DD  SYSOUT=*
//SYSIN    DD  *
           DEFINE GDG(NAME(MYDATA.URMI.SAMPLE.GDG)   -
           LIMIT(7)                           -
           NOEMPTY                            -
           SCRATCH)
/*
//GDGSTEP2 EXEC PGM=IEFBR14
//GDGMODLD DD  DSN=MYDATA.URMI.SAMPLE.GDG,
//         DISP=(NEW,CATLG,DELETE),
//         UNIT=SYSDA,
//         SPACE=(CYL,10,20),
//         DCB=(LRECL=50,RECFM=FB)
//

在上面的示例中,IDCAMS实用程序使用SYSIN DD语句中传递的以下参数在GDGSTEP1中定义GDG基础:

  • NAME指定GDG基础的物理数据集名称。

  • LIMIT指定GDG基础可容纳的最大版本数。

  • 当达到LIMIT时, EMPTY取消所有代的编目。

  • NOEMPTY取消了最近一代的编目。

  • SCRATCH在未编目时物理删除生成。

  • NOSCRATCH不删除数据集,即可以使用UNIT和VOL参数引用它。

在GDGSTEP2中,IEFBR14实用程序指定所有版本使用的模型DD参数。

IDCAMS可用于更改GDG的定义参数,例如增加LIMIT,将EMPTY更改为NOEMPTY等,使用SYSIN命令的相关版本为ALTER MYDATA.URMI.SAMPLE.GDG LIMIT(15) EMPTY

在JCL中删除GDG

使用IEFBR14实用程序,我们可以删除单个版本的GDG。

//GDGSTEP3   EXEC PGM=IEFBR14
//GDGDEL     DD  DSN=MYDATA.URMI.SAMPLE.GDG(0),
//           DISP=(OLD,DELETE,DELETE)

在上面的示例中,删除了最新版本的MYDATA.URMI.SAMPLE.GDG。 请注意,正常作业完成时的DISP参数编码为DELETE。 因此,当作业完成执行时,将删除数据集。

IDCAMS可用于使用SYSIN命令DELETE(MYDATA.URMI.SAMPLE.GDG) GDG FORCE/PURGE删除GDG及其相关版本。

  • FORCE删除GDG版本和GDG基础。 如果任何GDG版本设置的过期日期尚未到期,则不会删除这些版本,因此将保留GDG基础。

  • 无论过期日期如何, PURGE删除GDG版本和GDG基础。

在JCL中使用GDG

在以下示例中,最新版本的MYDATA.URMI.SAMPLE.GDG用作程序的输入,并创建新版本的MYDATA.URMI.SAMPLE.GDG作为输出。

//CNDSAMP JOB CLASS=6,NOTIFY=&SYSUID
//*
//STP01   EXEC PGM=MYCOBB
//IN1     DD DSN=MYDATA.URMI.SAMPLE.GDG(0),DISP=SHR
//OUT1    DD DSN=MYDATA.URMI.SAMPLE.GDG(+1),DISP=(,CALTG,DELETE)
//        LRECL=100,RECFM=FB

在这里,如果GDG已被实际名称引用,如MYDATA.URMI.SAMPLE.GDG.G0001V00,那么每次执行前它都会导致更改JCL。 使用(0)和(+1)使其动态替代GDG版本执行。

↑回到顶部↑
WIKI教程 @2018