JCL - DD声明

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

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

语法

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

//DD-name DD Parameters

描述

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

DD-NAME

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

DD

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

PARAMETERS

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

参数描述
DSN

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

DSN =物理数据集名称

临时数据集需要存储仅适用于作业持续时间,并在作业完成时删除.此类数据集表示为 DSN =& name ,或者只是没有指定DSN.

如果要在作业步骤中创建临时数据集下一个作业步骤,然后它被引用为 DSN = * .stepname.ddname .这称为向后引用.

DISP

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

DISP =(状态,正常处置,异常处置)

以下有效状态的值:

  • :数据集是新的由工作步骤创建.上例中的OUTPUT1.

  • OLD :数据集已经创建,将在作业步骤中被覆盖.作业步骤获得对数据集的独占访问权,并且在完成作业步骤之前,任何其他作业都无法访问此数据集.

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

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

normal-disposition 参数可以采用以下值之一

  • CATLG,UNCATLG,DELETE ,通过和保留

异常处置参数可以采用以下值之一

  • CATLG,UNCATLG,DELETE和KEEP

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

  • CATLG :数据集保留在系统目录中的条目.

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

  • KEEP :保留数据集而不更改任何商品. KEEP是VSAM文件的唯一有效处置方式.这仅用于永久数据集.

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

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

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

  • 状态:NEW是默认值.

  • 正常处置:如果状态为NEW,则默认正常处置为DELETE,否则为KEEP.

  • 异常处置:与正常处置相同.

DCB

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

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

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

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

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

当需要将一个数据集的DCB值复制到另一个数据集时相同的jobstep或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 :当主要空间不足时,这是所需的额外空间.

  • 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

如果类是A,那么它将输出定向到打印机,如果class是 * 然后它将输出指向与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=*