IBM大型机操作系统 学习笔记 联系客服

发布时间 : 星期一 文章IBM大型机操作系统 学习笔记更新完毕开始阅读129ce48a84868762caaed5ed

4、DISP:向系统描述数据集的状态,并且可以设定系统在作业步或作业结束时如何处理相应的数据集。 格式:

{DISP=状态}

{DISP=([状态][,正常结束参数][,非正常结束参数])} DISP= ([NEW] [,DELETE ] [,DELETE ])

[OLD] [,KEEP ] [,KEEP ] [SHR] [,PASS ] [,CATLG ] [MOD] [,CATLG ] [,UNCATLG] [, ] [,UNCATLG] [, ] Notes:所有的子参数均为位置参数。 状态参数说明:

NEW—表示在当前作业步中创建一个新的数据集。

OLD—表示该数据集在当前作业步运行之前已经存在,并且当前作业步将以独占的方式使用这个数据集。

SHR—表示该数据集在当前作业步运行之前已经存在,并且当前作业步将以共享的方式使用这个数据集,也就是说其它的作业也可以同时使用这个数据集。这个参数值也可以写成SHARE。

MOD—表示下列两种情况之一:1.数据集已经存在,记录将被添加到数据集的结尾,这个数据集必须是顺序的;2.一个新的数据集将被创建,在任何一种情况下数据集都将以独占的方式被使用 正常结束参数说明:

DELETE—表示在作业步正常结束后,该数据集将不再需要而被删除,所占用的空间将会被释放。KEEP—表示在作业步正常结束后,该数据集仍将继续保留在相应的卷上,它是缺省值。

PASS—表示该数据集将会被保留传递到同一作业的后续作业步中被使用。 CATLG—在作业步正常结束后,系统将对数据集进行编目,在系统编目或用户编目中设置相应的入口指针指向该数据集。

UNCATLG—在作业步正常结束后,系统解除对数据集的编目,在系统编目或用户编目中删除相应的入口指针和索引。 ?DISP参数缺省:

?NO DISP : DISP=(NEW,DELETE,DELETE) ?DISP=OLD : DISP=(OLD,KEEP,KEEP)

?DISP=(,CATLG): DISP=(NEW,CATLG,CATLG) ?DISP=NEW : DISP=(NEW,DELETE,DELETE) ?DISP=SHR : DISP=(SHR,KEEP,KEEP) ?DISP=MOD : DISP=(MOD,KEEP,KEEP) 例子:

DISP//IXSAMP06 JOB ‘MZ’,’GZ’,? //?

//STEP0X EXEC PGM=PROGRAM1,PARM=(?,?) //DS1 DD DSN=TE02.DS1,DISP=NEW

这里把DISP=NEW相当于DISP=(NEW,DELETE,DELETE)。也就是说当作业步第一次访问这个数据集的时候,系统会试图创建这个数据集,如果作业步正常结束或者不正常结束则删除该数据集

5、DCB:数据控制块参数,用于描述数据集的属性特征,包括记录长度,格式和记录块大小等,新建数据集时必须设置该参数。 格式:

[ DCB=(子参数[,子参数]...)]

[ DCB= ( {数据集名}[,子参数]...)] [ ( {*.DD语句名})]

[ ( {*.作业步名.DD语句名})]

[ ( {*.作业步名.过程作业步名.DD语句名})] 子参数介绍:

RECFM:用于指定记录格式。

RECFM=FB(定长组块记录)F (定长不组块记录)VB(变长组块记录)V (变长不组块记录)

LRECL:用于指定数据集的记录长度。LRECL=bytes对于定长记录,LRECL的值为实际记录的长度;对于变长记录,LRECL的值为最大记录长加上4个字节的控制信息。

BLKSIZE:指定数据集记录块的大小。BLKSIZE=bytes最大的块长为32K,对于定长组块记录,BLKSIZE的值必须是LRECL的整数倍。对于变长组块记录,情况复杂一些,要多8个字节的控制信息。

例1//DD1 DD DSNAME=ALP,DISP=(,KEEP),// VOLUME=SER=44321,

UNIT=3400-6,// DCB=(RECFM=FB,LRECL=240,BLKSIZE=960)DD语句DD1中定义了一个名为ALP的新的数据集。在DCB参数中包含了用以完成数据控制块的必要信息。 例:

//DD4 DD DSNAME=JST,

// DISP=(NEW,KEEP),UNIT=SYSDA,

// SPACE=(CYL,(12,2)),DCB=(A.B.C,KEYLEN=8)

DD语句DD4中定义了一个名为JST的新的数据集,并且要求系统参照一个已编目的数据集A.B.C的DCB信息来确定本语句中的DCB参数的值,通过指定子参数KEYLEN来将相应的定义覆盖。

6、SYSOUT:通过SYSOUT参数可以将相应的数据集标志为一个系统输出数据集,同时SYSOUT参数还可以完成以下的定义:(1)将这个系统输出数据集与一个输出类关联起来;(2)不通过JES而是要求一个外部的书写器程序来处理这个系统输出数据集;(3)指定这个数据集被打印输出的格式;(4)引用JES2的/*OUTPUT语句。

系统输出数据集根据下面的输出定义顺序被处理:(1)在SYSOUT DD语句中指定的选项;(2)参考JCL的OUTPUT语句中指定的选项;(3)参考JES2的/*OUTPUT语句中指定的选项或(4)JES3的//*FORMAT语句中指定的选项;(5)相关的输出类的缺省值。 格式:

SYSOUT= { 输出类}

{ * }

{ ([输出类] [,书写器名] [,格式名]) } [,INTRDR ] [,代码名] SYSOUT=(,) 说明:

输出类:为数据集指定的输出类,输出类为一个字符:A~Z或0~9。 *—表示输出类与在JOB语句中MSGCLASS参数的定义相同。 (,)—指定输出类为空值。当引用JCL的OUTPUT语句中CLASS参数的定义时必须指定输出类为空值

书写器名:确定一个系统书写器程序的名字(1~8个字符)。一个外部书写器程序是系统中一个用来处理输出的已启动的任务,每一个外部书写器程序有一个用户标识符与其相关联。通过在DD语句中指定外部书写器的名字来使用该书写器程序处理输出。(晕。。。。。)

NTRDR:通知JES将这个系统输出数据集作为输入作业流送到内部读卡机。 格式名:确定打印输出的格式,格式名为1~4个字符,可以为字母、数字或特殊字符($、#、@)。 代码名:用来确定JES2获得处理属性的JES2 /*OUTPUT语句,代码名必须与JES2的/*OUTPUT语句中的CODE参数相同。代码名仅仅被JES2系统支持,当作业或作业步中包含了一个缺省的JCL OUTPUT语句时不要使用代码名。 例:

//DD5 DD SYSOUT=(F, ,2PRT)

在本例的DD语句中指定JES将系统输出数据集写到处理F类输出的设备上,数据集将会按照名为2PRT的输出格式被打印。

7、SYSIN:通常,我们使用SYSIN DD语句作为一个内部流数据集的开始。内部流数据集以DD *或DD DATA语句开头,这样的DD语句可以有任何一个有效的名字,包括SYSIN。如果在内部流数据之前省略这样的DD语句,系统会自动提供一个名为SYSIN的DD *语句。 格式:

//SYSIN DD 参数[,参数]... [说明]

说明:第一个参数为*或DATA,用以指出后面紧跟的是内部流数据。这条语句必须且只能够位于内部流数据前。

8、DSNAME:指定一个数据集的名字,该数据集可以是已经存在,或者是新建的。 格式:{DSNAME}=名字 {DSN}

如果是新建的数据集的话,一般后面要跟相关的关键字参数:DISP,SPACE,UNIT,VOLUME,DCB。如果是已经存在的数据集,则后面一般跟DISP。 9、JOBCAT:

通过DD语句JOBCAT可以为作业定义一个私有的VSAM用户编目或完整的编目功能。系统可以在搜索主编目或搜索与数据集名的第一部分相关联的私有编目前先搜索本语句中定义的私有编目。

当作业中引用了一个SMS数据集时不要使用JOBCAT语句,因为SMS仅仅访问那些在系统编目中进行编目的SMS数据集。 格式:

//JOBCAT DD DISP={OLD},

// DSNAME=私有编目名[,参数]... [说明] {SHR} 说明:

不要指定任何UNIT和VOLUME参数,系统将会从主编目中获取私有编目的位置。 可以通过在JOBCAT语句后立即跟有省略了语句名的DD语句的方法为作业指定多个这样的私有编目。应当将JOBCAT语句放置在JOB语句之后,并且位于第一个EXEC语句之前。

如果作业中包含了JOBLIB语句,应当放置在JOBCAT语句之前。 //EXAMPLE JOB WILLIAMS,MSGLEVEL=1 //JOBLIB DD DSNAME=USER.LIB,DISP=SHR //JOBCAT DD DSNAME=LYLE,DISP=SHR //STEP1 EXEC PGM=SCAN

在这个例子中,JOBCAT语句指定了一个私有编目LYLE,并且JOBCAT语句位于JOBLIB语句之后。

10、JOBLIB:通过JOBLIB DD语句用户可以创建一个私有库或为作业指定一个私有库。系统将会首先搜索所指定的私有库去查找那些在EXEC语句的PGM参数中使用的程序,只有在私有库中没发现相匹配的程序时系统才会去搜索系统库。 一个私有库实际上是一个位于一个直接访问设备上的分区数据集(PDS)或分区数据集扩展(PDSE),其中的每一个成员都是一个用户的可执行程序。 格式://JOBLIB DD 参数[,参数]... [参数] 说明:

定义已编目的库:指定DSNAME参数;指定DISP参数,其中的状态子参数必须为OLD或SHR;不需要指定VOLUME或UNIT参数。

定义未编目的库:指定DSNAME参数;指定DISP参数,参数值必须为

DISP=(OLD,PASS)或DISP=(SHR,PASS);其中SHR表示这个数据集是已经存在的并允许其它作业使用这个库;指定UNIT参数;指定VOLUME参数。

创建一个库:指定DSNAME参数,作为库的名字;指定UNIT参数,注意一个库必须建立在一个直接访问设备上;指定VOLUME参数,非特定卷的情况例外;指定SPACE参数,为整个库分配足够的空间,并为PDS的目录分配空间;指定DISP参数,其中的状态子参数必须为NEW。

向库中添加成员:DSNAME参数包含相应的成员名,例如,

DSNAME=LIBRARY(PROGRAM);将DISP参数中的状态子参数指定为MOD,如果在创建库时已经编目则不需要其它子参数,否则指定为PASS或CATLG;不要指定SPACE参数。其它参数:如果在数据集标签中不包含数据控制块信息则需要指定相应的DCB参数,但不要指定FREE=CLOSE。 例1

//PAYROLL JOB JONES,CLASS=C

//JOBLIB DD DSNAME=PRIVATE.LIB4, // DISP=(OLD,PASS) //STEP1 EXEC PGM=SCAN //STEP2 EXEC PGM=UPDATE //DD1 DD DSNAME=*.JOBLIB, // DISP=(OLD,PASS)