1、第四章 作业控制语言,内容提要,基本概念 JCL语句 DD语句的关键字参数 特殊的DD语句 过程 实用程序,基本概念作业 作业(JOB)是用户在完成该任务时要求计算机所做工作的集合,基本概念作业与作业流,在大型主机系统中,当用户需要使用计算机完成某项批处理任务时,用户必须准备一个作业流(Job Stream) 作业流中包含一个或多个作业(Job),基本概念作业控制语言JCL,与COBOL等一般的编程语言不同,作业控制语言JCL(Job Control Language)是批处理作业的用户与操作系统的接口 作业控制语言便是提供给用户,为实现所需作业控制功能委托系统代为控制的一种语言 用户通过JC
2、L的相应语句来与操作系统通讯,获得作业所需的资源等,按自己的意图来控制作业的执行,基本概念作业步,一个作业中,每一段程序的执行称为一个作业步,一个作业可包含一个或多个作业步。一般的,作业由以下相对独立的三步组成:编译:把源程序语句(源模块)转换成目标模块链接编辑:把目标模块同子程序库中的其他程序链接起来得到可执行模块执行:运行可执行模块得到结果 一个作业中的各个作业步是顺序执行的,因此一个作业步的输出可以作为下一个作业步的输入 用户的作业可以由一个或多个作业步构成,基本概念单步作业与多步作业,只有一个作业步的作业叫做单步作业;由多个作业步构成的作业叫做多步作业。不论单步作业还是多步作业都必须包
3、含三个JCL基本语句(JCL Statement): 作业语句(JOB):标识一个作业的开始,提供必要的运行参数 执行语句(EXEC):标识一个作业步的开始,定义本作业步所要执行的程序或过程 数据定义语句(DD):用于描述应用程序所需要的数据文件,JCL语句JCL语句的分类,作业控制语言JCL由九种语句组成,除了前面介绍的三种外,其余六种是: /* 语句:表示流内数据结束或调用JES控制语句 /*语句:注释语句,由第4到第80列写出注释内容 /语句:空语句,用以标记一个作业的结束 PROC语句:流内过程(IN-STREAM PROCEDURE)或编目过程(CATALOGED PROCEDURE
4、)的起始标记 PEND语句:标志一个流内过程的结束。 Command语句:操作员用这个语句在输入流中写入操作命令,JCL语句单步作业实例,/BACKUP JOB ,EXAMPLE JOB /* /* IT IS A EXAMPLE! * /* /STEP1 EXEC PGM=IEBGENER /STEPLIB DD DSN=SYS1.LINKLIB,DISP=SHR /SYSIN DD DUMMY /SYSPRINT DD SYSOUT=A /SYSU1 DD DSN=PR.MASTER,DISP=OLD /SYSU2 DD DSN=PR.MAILY.BACKUP,DISP=(NEW,CATL
5、G),UNIT=TAPE, / DCB=(RECFM=FB,LRECL=200,BLKSIZE=1000) /,JCL的语法规则JCL字符集,字母(共26个) A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 数字(共10个) 0 1 2 3 4 5 6 7 8 9 特殊字符(共10个) , . / ( ) * & + - = 通配符 $ # (也可分别用X7CX5B和X7B表示) EBCDIC 可打印字符集,JCL的语法规则一般语句格式规范,在JCL中,除/*语句外的所有语句均以第1、2列的/符号作为开始标志,系统规定这些语句的长度为80
6、列。这80列在逻辑上被划分为五个区域,分别是: 标识符区 名字区 操作符区 参数区 说明区,一般语句格式规范标识符区,一般情况下,标识符区的符号为“/”,该符号表明该条语句为JCL语句 标识符区位于每条语句的第1、2列 在特殊情况下,标识符区的符号将有所变化,一般语句格式规范名字区,名字区指明一个语句,便于系统控制块或其他语句引用它 名字可以由18个字母数字或通配符组成,但第一个字符必须是字母或通配符,且必须从第3列开始 名字区后必须跟一个或多个空格,可以选择名字表达出这个JCL语句的作用,一般语句格式规范操作符区,操作符区位于名字区之后,规定了语句的类型:JOB、EXEC、DD、PROC、P
7、END,或操作员命令 操作符区后必须跟一个或多个空格,一般语句格式规范参数区,参数区在操作符区之后,其中包括被逗号分隔的参数 这些参数决定该JCL语句如何被处理 参数区没有固定的长度及列的要求,一般语句格式规范说明区,说明区位于参数区后,用于对相应语句进行注释说明,它可以是任何所需的说明信息,注释区后必须跟一个空格 需要注意的是,仅当参数出现时才能书写说明信息,不然容易与参数混淆,一般语句格式规范续行,JCL只允许在参数区和说明区有续行,当需要续行时,在当前行的第71列前必须将某个参数或某个子参数以及参数后的逗号写完整,且下一行第1、2列为“/”,第3列为空格,续行的内容只能从416列开始,如
8、果从16列后开始,将被认为是注释语句,JCL的语法规则参数规则,在JCL中,参数区内的参数的类型分为两类:位置参数(positional):与其他参数保持相对位置的参数关键字参数(keyword):由一个关键字和等号后面的可变数据组成 如果在一个语句内既有位置参数又有关键字参数时,所有的关键字参数必须位于位置参数之后,JCL的语法规则参数的语法,1.位置参数和关键字参数之间必须用逗号分开,不允许有空格 2.必须按规定的次序书写参数:所有的关键字参数必须位于位置参数之后,而所有位置参数也必须按规定排列 3.当缺省某个位置参数或某个子参数时,应以一个逗号指明所在位置。当缺省最后一个位置参数时,逗号
9、可以省略 4.当没有任何位置参数时,则不必书写任何内容表示 5.关键字参数之间没有相对位置的规定,可以按任何次序排列 6.允许含有特殊字符的参数或子参数,且其中的特殊字符并非起某种特定的语法功能必须用撇号“”替代括号将这些参数和子参数括起来,而在这些参数与子参数中要用到撇号时,则需两个连续的撇号表示有些语句中的某些参数或子参数含有一些特定的特殊字符时,将不需要用撇号括起来在JCL中用“&”来表识符号参数的开始。当参数中含有“&”且不用来表示符号参数时,则需使用连续的两个“&”来表示“&”。 7.JCL的位置参数与关键字参数最多只能由两级子参数。也就是说用于括起子参数列表的括号最多只能有两层,J
10、CL的语法规则JCL语句的位置,1.JOB 语句 2.JOBLIB语句 3.JOBCAT及SYSCHK语句 4.任何流内过程 5.第一个EXEC语句 6.任何的STEPCAT、STEPLIB,或一般的属于这一步的DD语句 7.任何更多的EXEC语句及与他们相关联的DD语句 8.任何空语句,JCL的语法规则JCL语法实例,作业语句 /EXPJOB JOB ,USERNAME,MSGLEVEL=(1,1), EXAMPLE 作业语句续行/ MSGCLASS=Q,CLASS=A/* 注释语句 /* IT IS A EXAMPLE * /* 执行语句 /STEP1 EXEC PGM=IEFBR14 语
11、句 /DD1 DD DSN=MJSN.TEAM01.ONE,DISP=(,CATLG), 语句续行 / SPACE=(TRK,(5,2), UNIT=SYSDA 语句 /DD1 DD DSN=MJSN.TEAM01.TWO,DISP=(,KEEP), DD语句续行 / SPACE=(TRK,(1,1), UNIT=SYSDA,JCL语句JOB语句,JOB语句标志一个作业的开始、分配作业名并设置相关的位置参数及关键字参数,每个作业的第一个语句必须是JOB语句,JOB语句语法规则,JOB语句的格式如下:/作业名JOB 位置参数,关键字参数,关键字参数。注释说明作业名作业名是用户给作业指定的名字。为
12、使操作系统识别作业,必须选择确定的作业名字,由于系统不能同时运行具有相同名字得到作业,因此只能给作业一个唯一确定的名字 位置参数记账信息(accounting information)程序员名(programmers name):程序员名用于标识作业的所有者(owner)信息,包括特殊字符在内,其长度不得超过20个字符 关键字参数ADDRSPC BYTES CLASS MSGCLASS MSGLEVEL PRTY REGION TIME TYPRUN ,JOB语句作业名,作业名必须遵守前面所提到的JCL语法规则 除此之外,建议用户采用“用户标识USERID+数字或字符”的作业名,例如用户标识为
13、JACK,则作业名可用JACKA。,JOB语句的位置参数记账信息位,记账信息位于操作符“JOB”后,它用于提供用户使用系统的合法性、机时及纸张的收费管理等 如果省略记帐信息参数不写,则需要在“程序员名”前用一个逗号来表示;但如果两个位置参数全部忽略不写,则无需任何标示,JOB语句的位置参数程序员名,程序员名用于标识作业的所有者(owner)信息,包括特殊字符在内,其长度不得超过20个字符,JOB语句关键字参数ADDRSPC,指明作业所需之存储类型,它有两个子参数:VIRT:表示作业请求虚拟页式存贮REAL:表示作业请求实存存储空间缺省值为VIRT 其格式为:ADDRSPC=VIRTREAL 例
14、: /PEH JOB ,BAKER,ADDRSPC=VIRT /DEB JOB ,ERIC,ADDRSPC=REAL,REGION=100K,JOB语句关键字参数CLASS,CLASS 参数规定了作业的类别,JCL中可选用的作业类别有36个,用字母AZ及数字09表示 相同类别的作业处于同一输入队列等待执行并具有相同的处理属性。 作业类别的属性定义在JES中。当CLASS参数缺省时,JES将会根据安装时的缺省值赋予该作业一个缺省的CLASS值,JOB语句关键字参数SGLEVEL,用于控制JCL作业输出清单的内容 格式:MSGLEVEL=(statements,messages),MSGLEVEL
15、statement参数,指明在JCL作业输出清单中应打印出的作业控制语句的类型,取值范围为:02。 取值0:仅打印出作业的JOB语句; 取值1:打印出作业中包括过程语句在内的所有JCL语句; 取值2:输入流中的所有控制语句。,MSGLEVELmessage参数,指明在JCL作业输出清单中应打印出信息的类型,取值范围为:0 1。 取值0:只有在作业异常终止时,打印出有关JCL、JES、操作员及SMS处理信息; 取值1:无论作业是否异常终止,都打印出有关JCL、JES、操作员及的处理信息,MSGLEVEL实例,JOB语句关键字参数MSGCLASS,用于为作业日志(job log)设置输出类别。作业
16、日志是为程序员提供的与作业相关信息的记录。当该参数省略时,系统将会采用默认值。 格式:MSGCLASS=classclass:定义作业日志的类别与输入队列相似,class是一个AZ的字母或一个09的数字。,MESSAGECLASS和MESSAGELEVEL的缺省值,JOB语句关键字参数NOTIFY,用于请求系统在后台作业处理完毕时给指定用户发送信息。如果作业完成时,该用户未在系统登录,则系统所发送的信息将会保留到此用户下次登录 格式:NOTIFY=useriduserid:必须以字母或通配符开头的17个字母、数字或通配符组成,其值必须是一个存在的TSO用户标识。 例:/SIGN JOB ,TL
17、OMP,NOTIFY=TSOUSER,JOB语句关键字参数PRTY,用于为相应的输入队列中的作业分配优先级。系统根据作业优先级的高低来选择来选择作业执行,对于同一级的作业的选择将采取“先进先出”的原则 格式: PRTY=prioritypriority:用数字量来表示优先级,数字越大表示优先级越高。根据作业进入子系统的类型,其取值范围是JES2:015;JES3:014,JOB语句关键字参数REGION(1),用于指定作业所需的实存或虚存空间的大小,系统将在该作业中的每一作业步使用该值。所需空间大小必须包含以下内容: 运行所有程序所需的空间 在运行期间,程序中宏指令GETMAIN所需的所有附加
18、空间 任务初始化和终止时需要的自由空间,JOB语句关键字参数REGION(2),格式:REGION =valueK=valueM valueK:以千字节(Kb)为单位指出所需空间大小,value可取17 位的十进制数,其取值范围为12096128。系统以每4k为一存储单位分配空间,所以value值应取4的倍数,如REGION=68K。当value值不是4的倍数时,系统会将其增至一最为接近的4的倍数的值。 valueM:以兆字节(Mb)为单位指出所需空间大小,value可取14 位的十进制数,其取值范围为12047,REGION和ADDRSPC,/EX JOB .,REGION=512K, /
19、ADDRSPC=REAL,JOB语句关键字参数TIME,用于指定作业占用处理器的最长时间并可通过一些信息得知该作业占用处理器的时间。当作业占用处理器时间超过指定值时,系统将终止该作业。通常情况下,此参数不用设置。当作业所需处理器时间长于系统缺省值时,或出于某种测试目的才设置此参数。 格式:TIME=(minutes,seconds)=1440 =NOLIMIT =MAXIMUM ,JOB语句多个参数的例子,JCL语句EXEC语句(1),EXEC语句标明作业或过程中的每一作业步的开始,并告知系统如何执行该作业步。包括所有在EXEC语句中调用的过程中的所有作业步在内,一个作业最多可以有255个作业
20、步,JCL语句EXEC语句(2),作业步名是可以省略不写的,如需标明作业名时,该作业名必须在该作业内以及该作业调用的所有过程中是唯一的,它由18个字母或通配符开头的字符数字构成 EXEC语句中的位置参数有两个:PGM和PROC。每条EXEC语句必须有且仅有一个位置参数或过程名 EXEC语句的关键字参数是可选的,这些参数只作用于本作业步,EXEC语句作业步名,作业步名是可以省略不写的,如需标明作业名时,该作业名必须在该作业内以及该作业调用的所有过程中是唯一的,它由18个字母或通配符开头的字符数字构成,EXEC语句PGM参数(1),PGM参数用于指明所要执行的程序名。该程序必须是一个分区数据集(P
21、DS)的成员或用作系统库(system library)、私有库(private library)临时库(temporary library)的扩充分区数据集(PDSE)的成员,EXEC语句PGM参数(2),程序名的调用方法分为直接调用和间接调用 格式: PGM =program-name*.stepname.ddname*.stepname.procstepname.ddnameprogram-name:program-name(程序名)指明要执行程序的成员名或别名。程序名由由18个字母或通配符开头的字符数字构成。*.stepname.ddname:表示要执行的程序名由本作业步前名为“ste
22、pname”的作业步内名为“ddname”的DD语句的DSN参数决定。*.stepname.procstepname.ddname:表示要执行的程序名由本作业步前名为“stepname”的作业步里所调用过程内名为“procstepname”的过程步中相应名为“ddname”DD语句的DSN参数决定。在上述三种程序调用方法中,第一种为直接调用,而后两种为间接调用,EXEC语句PROC参数(1),指明作业步所要运行的过程名,EXEC语句PROC参数(2),格式: PROC=procedure-name procedure-name procedure-name:需要调用的过程名,过程名由18个字母
23、或通配符开头的字符数字构成。所调用的过程名可以是:编目过程的成员名或别名由PROC语句定义的流内过程的过程名,该流内过程必须在本作业内且本作业步前定义 在设定该参数时,可直接写出过程名,EXEC语句关键字参数,当EXEC语句的位置参数指定程序名时,关键字参数的写法同JOB语句 当EXEC语句的位置参数指定编目或流内过程时,EXEC语句的关键字参数将覆盖所调用过程中各EXEC语句的关键字参数。因此如果想仅覆盖过程中的某个EXEC语句的关键字参数,则应在设置关键字参数时,同时指出所调用过程的相关过程步的名字,EXEC语句的关键字参数PARM(1),用于向本作业步执行的程序传递变量信息。该程序必须有
24、相应的指令接收这些信息,并使用它们,EXEC语句的关键字参数PARM(2),格式:PARM.过程步名= 子参数PARM.过程步名=( 子参数, 子参数)PARM.过程步名=(子参数, 子参数) PARM.过程步名=子参数, 子参数 包括所有的逗号、撇号以及括号在内,所有子参数的总长度不得超过100个字符。当某子参数中含有特殊字符或空格时,可以将该子参数用撇号括起来,在其它子参数一起用括号括起来,或将所有在参数用撇号括起来。 子参数:包含传递给程序的变量信息,EXEC语句的关键字参数COND(1),用于对先前作业步执行的返回码(return code)进行测试,以决定是否执行本作业步 用户可以对
25、特定作业步的返回码进行测试也可以对每一执行完毕的的返回码都进行测试。如果测试条件不满足,系统执行本作业步如果测试条件满足系统则不执行该作业步 作业中的第一个EXEC语句中的COND参数将被系统忽略 注意,当测试条件满足时,系统并非不正常终止该作业步,而只是跳过该作业步,该作业仍将正常执行,EXEC语句的关键字参数COND(2),格式: (1)COND.过程步名=(code,operator) (2)COND.过程步名=(code,operator,作业步名,过程步名),(code,operator,作业步名,过程步名),EVEN),ONLY (3)COND=EVENCOND=ONLY利用CON
26、D参数最多可以有8个返回码测试,如果有EVEN或ONLY时,最多有7个测试。格式(1)只有在先前作业步没有非正常终止时,才能进行该测试。格式(2)、(3)测试决定于EVEN和ONLY的设置。,EXEC语句的关键字参数COND(3),code:系统使用code(测码)与先前作业步或某特作业步的返回码进行比较。Code的取值范围为: operator:表示code与返码的比较类型,这些比较操作符是:GT(大于)、GE(大于等于)、EQ(等于) 、 NE(不等于)、LT(小于) 、LE(小于等于),EXEC语句的关键字参数COND参数的实例(1),如果前面任意作业步的返回值小于或等于8,则跳过本作业
27、步,EXEC语句的关键字参数COND参数的实例(2),如果作业步EXAMPLE2的返回值小于等于8,则跳过本作业步,EXEC语句的关键字参数COND的EVEN和ONLY子参数,EVEN:表示无论即使先前作业步异常终止,本作业步都要执行。当EVEN子参数设定时:不测试先前任何的异常终止作业步的返回码测试那些正常完成的作业步的返回码,如果测试条件全部不满足的话,本作业步将执行 ONLY:表示只有先前作业步异常终止,本作业步才执行。当ONLY子参数设定时:不测试先前任何的异常终止作业步的返回码测试那些正常完成的作业步的返回码,如果测试条件全部不满足的话,本作业步将执行,EXEC语句的关键字参数CON
28、D的EVEN子参数的例子,即使STEP3非正常中止,STEP4仍会执行,EXEC语句的关键字参数COND的ONLY子参数的例子,只有STEP4前的作业步发生异常中止时,STEP4才执行,JCL语句DD语句,数据定义语句(DD语句)用于定义一个数据集以及该数据集所需的输入输出资源,DD语句格式,格式:/dd名 DD 位置参数,关键字参数注释过程步名.dd名 /dd名 DD 过程步名.dd名,DD语句dd名,“dd名”是为DD语句定义的名字,它由18个字母或通配符开头的字符数字构成 在一个作业步内可以有多个DD语句,但每个DD语句的dd名在本作业步中应该是唯一确定的 “dd名”可以由系统定义也可以
29、由用户自己定义,当用户需要调用公用程序时,需根据公用程序的具体要求选用系统定义的“dd名” 用户自定义的“dd名”不可与系统定义“dd名”相重复 用户子定义“dd名”可以根据数据的用途,遵循“dd名”的规则来命名,当为应用程序输入输出结果定义数据集时,“dd名”的命名规则取决于程序所用语言的类型,DD语句的位置参数*,参数“*”用于开始一个流内数据集。数据记录跟在“DD ”语句之后,其第一、二列不能是“/”或“/*”;该记录可以是任何编如EDCBIC。下列符号表明流内数据记录的结束:输入流中的“/*”。表示另一个JCL语句开始的“/”。当数据记录中需以“/”开始时,就必须使用DATA参数来代替
30、“*”参数。 格式:/dd名 DD *,参数注释,DD语句的位置参数DATA,用作一个流内数据集的开始,该流内数据集里含有以“/”开头的语句。数据记录紧跟在“DD DATA”语句之后;该数据记录可以是BCD或EDCBIC编码。数据记录将以“/*”作为结束。 格式: /dd名 DD DATA,参数注释 例: /GROUP3 DD DATA,DSNAME=&GRP3data /*,DD语句的位置参数DUMMY,DUMMY参数用于标明:没有设备或外存空间分配给该数据集。对该数据集不进行状态处理。对BSAM(Basic Sequential Access Method)或QSAM(Queued Seq
31、uential Access Method)来说,不对该数据集作输入输出操作。 用户使用DUMMY参数对程序进行测试。当测试完成时,如果用户希望恢复对数据集的输入输出操作时,只需将DD DUMMY参数替换成完整的数据集定义DD语句 DUMMY的另一个用途是在编目或流内过程中 格式:/dd名 DD DUMMY,参数,DD语句的关键字参数(1),DD语句的关键字参数及其相关内容相对JOB语句和EXEC语句来说比较复杂 DD语句通过这些参数完成下述任务:定义顺序数据集(sequential data set)或分区数据集(partitioned data set)名;描述数据集状态、属性及保留期限;
32、描述设备类型、数量;设置数据集的记录格式、占用空间;描述作业的处理方式。,DD语句的关键字参数(2),DD语句的关键字参数有很多,但总体上可分为两大类,一类与设备相关,另一类则与数据集或数据相关,与设备相关的参数有UNIT、VOLUME、SPACE、LABEL等,与数据集、数据相关的参数有DSNAME、DISP、DCB、RECORG、EXPDT、RETPD、PROTECT、SYSOUT、HOLD等 在实际应用中,这两类参数是配合使用的,没有一个绝对的分界线,DD语句的关键字参数DSNAME,DSNAME参数被用来指定一个数据集的名字 对于一个新建的数据集来说,DSNAME参数给定新数据集的名字
33、;对于已存在的数据集来说,通过DSNAME参数来定位这个数据集。 格式:DSNAME = 名字DSN ,DD语句的关键字参数DISP,通过DISP参数可以向系统描述数据集的状态,并且可以设定系统在作业步或作业结束如何处理相应的数据集。你可以为作业或作业步的正常结束设定一个参数值同时为非正常结束也设定一个参数值,DD语句的关键字参数DISP的格式,DISP=状态 DISP=(状态,正常结束参数,非正常结束参数) DISP= (NEW ,DELETE ,DELETE )OLD ,KEEP ,KEEP SHR ,PASS ,CATLG MOD ,CATLG ,UNCATLG , ,UNCATLG ,
34、 ,状态子参数可以取下列值:NEW表示在当前作业步中创建一个新的数据集。OLD表示该数据集在当前作业步运行之前已经存在,并且当前作业步将以独占的方式使用这个数据集。SHR表示该数据集在当前作业步运行之前已经存在,并且当前作业步将以共享的方式使用这个数据集,也就是说其它的作业也可以同时使用这个数据集。这个参数值也可以写成SHARE。MOD表示下列两种情况之一:1、数据集已经存在,记录将被添加到数据集的结尾,这个数据集必须是顺序的。2、一个新的数据集将被创建。在任何一种情况下数据集都将以独占的方式被使用。 正常结束参数可以取下列值:DELETE表示在作业步正常结束后,该数据集将不再需要而被删除,所
35、占用的空间将会被释放。KEEP表示在作业步正常结束后,该数据集仍将继续保留在相应的卷上。PASS表示该数据集将会被保留传递到同一作业的后续作业步中被使用。CATLG在作业步正常结束后,系统将对数据集进行编目,在系统编目或用户编目中设置相应的入口指针指向该数据集。UNCATLG在作业步正常结束后,系统解除对数据集的编目,在系统编目或用户编目中删除相应的入口指针和索引。 非正常结束参数可以取的值基本与正常结束参数可以取的值相同,但不能够取PASS。,DD语句的关键字参数UNIT,UNIT参数用于请求物理设备,用户通过设置设备地址或设备类或设备组名等子参数确定设通过设置设备数或P等子参数确定设备数量
36、。 格式: UNIT=(三位设备地址 ,设备数 ,DEFER) /三位设备地址 ,P /四位设备地址 , 设备类型 设备组名 UNIT=AFF=DD名,DD语句的关键字参数UNIT的子参数,设备地址:通过设备地址指定设备。设备地址是在系统安装时建立的,它由一个3位的十进制数或4位十六进制数构成。如用户请求的某设备其地址为340时,参数设置为UNIT=340。 设备类型:通过设备类型名称指定设备,这个名称通常是数字的,如通过3480、3422指定磁带机,通过3340、3375、3380、3390指定磁盘机。如用户请求设备是3380磁盘机时,参数设置UNIT=3380。 设备组名:通过设备组名请求
37、一台或一组设备。被定义在一组中的设备可以是相同的,也可以可以是不同的。如一组设备中可以包含磁盘设备也可包含磁带设备。但通常都是将一类设备作为一个设备组,具体的设备组名在系统安装时定义。设备组名由l8个字母符号构成,常见的有SYSDA、DASD、TAPE、CART等。,DD语句的关键字参数VOLUME,通过VOLUME参数可以指定所引用的数据集所在的卷或卷组,也可以用来指定新建数据集所在的卷或卷组。 在使用这个参数时,用户可以指定一个特定的卷、一组卷、具有特定序列号的卷或另外一个数据集所使用的卷。 对于一个跨越多个卷的数据集来说,这个参数还可以用来指定首先被处理的卷。 对于一个新建的数据集来说,
38、可以通过不指定VOLUME参数或在VOLUME参数中不指定SER和REF子参数的方法在任何一个卷或卷组上创建该数据集,我们称这种方法为非特定卷,DD语句的关键字参数VOLUME的格式,VOLUME = (PRIVATE ,RETAIN ,卷顺序号 ,卷数) VOL , , SER=序列号 SER=(序列号,序列号.) , REF=数据集名 REF=*.DD语句名 REF=*.作业步名.DD语句名 REF=*.作业步名.过程作业步名. DD语句名,DD语句的关键字参数SPACE,SPACE参数用于为新建数据集分配磁盘空间,对于磁带卷不起作用。 请求空间分配一般有两种方法:一是告知系统所需空间大小
39、,由系统来分配合适的空间;二是请求系统分配某个特定的空间,如:从某个特定磁道到另一个特定磁道。,DD语句的关键字参数SPACE的格式,由系统分配空间: SPACE=(TRK,(初次分配数量,再次分配数量,目录空间),RLSE,CONTIG,ROUND)(CYL, , ,索引 , ,MXIG (块长度, ,ALX (记录长度, , 请求特定的磁道: SPACE= (ABSTR,(初次分配数量,地址,目录空间) ,索引 仅请求目录空间: SPACE=(,(,目录空间),DD语句的关键字参数DCB,使用DCB参数可以完善数据集的数据控制块(DCB)中的信息 格式: DCB=(子参数,子参数.),DD
40、语句的关键字参数SYSOUT,通过SYSOUT参数可以将相应的数据集标志为一个系统输出数据集。同时SYSOUT参数还可以完成以下的定义: 将这个系统输出数据集与一个输出类关联起来。 不通过JES而是要求一个外部的书写器程序来处理这个系统输出数据集。 指定这个数据集被打印输出的格式。 引用JES2的/*OUTPUT语句。,DD语句的关键字参数SYSOUT的格式,格式: SYSOUT= 输出类 * (输出类 ,书写器名 ,格式名) ,INTRDR ,代码名 SYSOUT=(,)输出类:为数据集指定的输出类,输出类为一个字符:AZ或09。每一个输出类的属性在JES初始化时被定义。在JES2中输出类的
41、缺省值为A。*表示输出类与在JOB语句中MSGCLASS参数的定义相同。(,)指定输出类为空值。当引用JCL的OUTPUT语句中CLASS参数的定义时必须指定输出类为空值。书写器名:确定一个系统书写器程序的名字(18个字符)。一个外部书写器程是系统中一个用来处理输出的已启动的任务,每一个外部书写器程序有一个用户标识符与其相关联。通过在DD语句中指定外部书写器的名字来使用该书写器程序处理输出,特殊的DD语句,在JCL中有一些特殊的DD语句,通过这些语句用户可以完成指定私有编目、私有库、用于转存和检查点的数据集等特殊的功能,特殊的DD语句JOBCAT,通过DD语句JOBCAT可以为作业定义一个私有
42、的VSAM用户编目或完整的编目功能。系统可以在搜索主编目或搜索与数据集名的第一部分相关联的私有编目前先搜索本语句中定义的私有编目,特殊的DD语句JOBCAT的格式及说明,格式: /JOBCAT DD DISP=OLD,DSNAME=私有编目名,参数. 说明SHR 不要指定任何UNIT和VOLUME参数,系统将会从主编目中获取私有编目的位置。 可以通过在JOBCAT语句后立即跟有省略了语句名的DD语句的方法为作业指定多个这样的私有编目。 应当将JOBCAT语句放置在JOB语句之后,并且位于第一个EXEC语句之前。 如果作业中包含了JOBLIB语句,应当放置在JOBCAT语句之前,特殊的DD语句J
43、OBLIB,通过JOBLIB DD语句用户可以创建一个私有库或为作业指定一个私有库。 系统将会首先搜索所指定的私有库去查找那些在EXEC语句的PGM参数中使用的程序,只有在私有库中没发现相匹配的程序时系统才会去搜索系统库。 一个私有库实际上是一个位于一个直接访问设备上的PDS或PDSE,其中的每一个成员都是一个用户的可执行程序,JOBLIB的实例,该作业未使用JOBLIB定义私有库,系统也无法从系统库中找到STEPA指定的程序REPART,特殊的DD语句STEPCAT,通过DD语句STEPCAT可以为作业步定义一个私有的VSAM用户编目或完整的编目功能。系统可以在搜索主编目或搜索与数据集名的第
44、一部分相关联的私有编目前先搜索本语句中定义的私有编目,特殊的DD语句STEPLIB,STEPLIB语句的作用与JOBLIB相似,主要区别在于作用的范围分别是作业步和作业 同一个作业中后续作业步可以引用在STEPLIB DD语句中定义的私有库,同样,可以将一个STEPLIB DD语句放在内部流或编目过程中,但不能将JOBLIB DD语句放在内部流或编目过程中,特殊的DD语句SYSIN,通常,我们使用SYSIN DD语句作为一个内部流数据集的开始。内部流数据集以DD *或DD DATA语句开头,这样的DD语句可以有任何一个有效的名字,包括SYSIN。如果在内部流数据之前省略这样的DD语句,系统会自动提供一个名为SYSIN的DD *语句,