DD 声明

优质
小牛编辑
136浏览
2023-12-01

数据集是具有以特定格式组织的记录的大型机文件。 数据集存储在直接访问存储设备(DASD)或大型机磁带上,是基本数据存储区域。 如果需要在批处理程序中使用/创建这些数据,则文件(即数据集)物理名称以及文件格式和组织将在JCL中编码。

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

语法 (Syntax)

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

//DD-name DD Parameters

描述 (Description)

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

DD-NAME

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

DD

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

参数

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

参数描述
DSN

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

DSN=Physical Dataset Name

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

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

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是VSAM文件的唯一有效处置方式。 这仅用于永久数据集。

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

  • PASS :这仅适用于正常处置。 当数据集由JCL中的下一个作业步骤传递和处理时使用

如果未指定DISP的任何子参数,则默认值如下:

  • status :NEW是默认值。

  • normal-disposition :如果status为NEW,则默认正常处置为DELETE,否则为KEEP。

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

DCB

数据控制块(DCB)参数详细说明了数据集的物理特征。 在作业步骤中新创建的数据集需要此参数。

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

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

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

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

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

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

SPACE

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

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

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

  • spcunits :这可以是CYL(Cylinder),TRK(Tracks)或BLKSIZE(Block Size)之一。

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

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

  • ir :如果数据集是包含成员的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

如果class为A,则它将输出定向到打印机,如果class为*则它将输出定向到JOB语句中MSGCLASS参数的目标。

例子 (Example)

以下是一个示例,它使用了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=*