JCL - DD 语句

数据集是包含以特定格式组织的记录的大型机文件。 数据集存储在主机的DASD(Direct Access Storage Device)或磁带上,是基本的数据存储区域。 如果需要在批处理程序中使用/创建这些数据,则文件(即数据集)物理名称以及文件格式和组织都以 JCL 进行编码。

JCL 中使用的每个数据集的定义是使用 DD 语句给出的。 作业步骤所需的输入和输出资源需要在DD语句中描述,其中包含数据集组织、存储要求和记录长度等信息。

语法

以下是 JCL DD 语句的基本语法:

//DD-name DD Parameters

描述

让我们看看上述 DD 语句语法中使用的术语的描述。

DD-NAME

DD-NAME 标识数据集或输入/输出资源。 如果这是 COBOL/汇编程序使用的输入/输出文件,则该文件在程序中通过该名称引用。

DD

这是将其标识为 DD 语句的关键字。

PARAMETERS

以下是DD语句的各个参数。 您可以根据需要使用一个或多个参数,参数之间以逗号分隔:

参数 描述
DSN

DSN参数是指新创建的或现有数据集的物理数据集名称。 DSN 值可由子名称组成,每个子名称长度为 1 到 8 个字符,以句点分隔,总长度为 44 个字符(字母数字)。 语法如下:

DSN=物理数据集名称

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

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

DISP

DISP 参数用于描述数据集的状态、作业步骤结束时对正常和异常完成的处理。 仅当在同一作业步骤中创建和删除数据集(如临时数据集)时,DD 语句中才不需要 DISP。 语法如下:

DISP=(status, normal-disposition, abnormal-disposition)

以下是status(状态)的有效值:

  • NEW : 数据集是由作业步骤新创建的。 上例中的 OUTPUT1。

  • OLD : 数据集已创建,并将在作业步骤中被覆盖。 该作业步骤获得对数据集的独占访问权限,并且在该作业步骤完成之前没有其他作业可以访问该数据集。

  • SHR:数据集已创建并将在作业步骤中读取。 数据集可以同时被多个作业读取。 示例:INPUT1 和 INPUT2。

  • MOD:数据集已创建。 当需要将新记录追加到现有数据集时(现有记录不会被覆盖),将使用此配置。

normal-disposition(正常处置)参数可以采用以下值之一

  • CATLG, UNCATLG, DELETE, PASS 和 KEEP

abnormal-disposition(异常处置)参数可以采用以下值之一

  • CATLG, UNCATLG, DELETE 和 KEEP

以下是 CATLG、UNCATLG、DELETE、PASS 和 KEEP 参数的说明:

  • CATLG : 数据集通过系统目录中的条目保留。

  • UNCATLG:保留数据集,但删除系统目录条目。

  • KEEP:保留数据集而不更改任何目录条目。 KEEP 是 VSAM 文件的唯一有效配置。 这仅用于永久数据集。

  • DELETE:从用户和系统目录中删除数据集。

  • PASS:这仅对正常处置有效。 当数据集要由 JCL 中的下一个作业步骤传递和处理时使用此属性

当不指定 DISP 的任何子参数时,默认值如下:

  • status(状态) : NEW 是默认值。

  • normal-disposition(正常处置) : 如果状态为NEW,则默认正常处理为DELETE,否则为KEEP。

  • abnormal-disposition(异常处置):与正常处置相同。

DCB

数据控制块(DCB)参数详细描述了数据集的物理特征。 对于作业步骤中新创建的数据集,此参数是必需的。

LRECL 是数据集中保存的每条记录的长度。

RECFM是数据集的记录格式。 RECFM 可以保存值 FB、V 或 VB。 FB 是一种固定块组织,其中一个或多个逻辑记录被分组在单个块内。 V 是可变组织,其中一个可变长度逻辑记录被放置在一个物理块内。 VB 是可变块组织,其中一个或多个可变长度逻辑记录放置在一个物理块内。

BLKSIZE 是物理块的大小。 块越大,FB 或 VB 文件的记录数就越多。

DSORG 是数据集组织的类型。 DSORG 可以保存 PS(物理顺序)、PO(分区组织)和 DA(直接组织)值。

当需要将一个数据集的 DCB 值复制到同一作业步骤或 JCL 中的另一个数据集时,则指定为 DCB=*.stepname.ddname,其中 stepname 是作业步骤的名称,ddname 是作业步骤的名称。 从中复制 DCB 的数据集。

检查下面的示例,其中 RECFM=FB,LRECL=80 形成数据集 OUTPUT1 的 DCB。

SPACE

SPACE参数指定DASD(直接访问存储磁盘)中数据集所需的空间。 以下是语法:

SPACE=(spcunits, (pri, sec, dir), RLSE)

以下是所有使用的参数的说明:

  • spcunits : 这可以是 CYL(圆柱)、TRK(轨道)或 BLKSIZE(块大小)之一。

  • pri:这是数据集所需的主要空间。

  • sec:这是当主空间不足时所需的额外空间。

  • dir:如果数据集是其中包含成员的 PDS(分区数据集),则这是所需的目录块。

  • RLSE:用于在作业完成时释放未使用的空间。

UNIT

UNIT 和 VOL 参数列在编目数据集的系统目录中,因此只需使用物理 DSN 名称即可访问。 但对于未编目数据集,DD 语句应包含这些参数。 对于要创建的新数据集,可以指定 UNIT/VOL 参数,或者 Z/OS 分配合适的设备和卷。

UNIT 参数指定存储数据集的设备类型。 可以使用硬件地址或设备类型组来识别设备类型。 以下是语法:

UNIT=DASD | SYSDA

其中 DASD 代表直接访问存储设备,SYSDA 代表系统直接访问,指下一个可用的磁盘存储设备。

VOL

VOL 参数指定由 UNIT 参数标识的设备上的卷号。 以下是语法:

VOL=SER=(v1,v2)

其中 v1、v2 是卷序列号。 您也可以使用以下语法:

VOL=REF=*.DDNAME

其中 REF 是对 JCL 中任何前述作业步骤中数据集的卷序列号的向后引用。

SYSOUT

到目前为止讨论的 DD 语句参数对应于存储在数据集中的数据。 SYSOUT 参数根据指定的类将数据定向到输出设备。 以下是语法

SYSOUT=class

如果类是 A,则它将输出定向到打印机,如果类是 *,则它将输出定向到与 JOB 语句中的 MSGCLASS 参数相同的目标。

示例

以下是一个示例,它使用了 DD 语句以及上面解释的各种参数:

//TTYYSAMP JOB 'TUTO',CLASS=6,MSGCLASS=X,REGION=8K,
//         NOTIFY=&SYSUID
//*
//STEP010  EXEC PGM=ICETOOL,ADDRSPC=REAL
//*
//INPUT1   DD DSN=TUTO.SORT.INPUT1,DISP=SHR
//INPUT2   DD DSN=TUTO.SORT.INPUT2,DISP=SHR,UNIT=SYSDA,
//         VOL=SER=(1243,1244)
//OUTPUT1  DD DSN=MYFILES.SAMPLE.OUTPUT1,DISP=(,CATLG,DELETE),
//         RECFM=FB,LRECL=80,SPACE=(CYL,(10,20))
//OUTPUT2  DD SYSOUT=*