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

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

在本例中JOBLIB DD语句中所指定的私有库已经被编目,所以无需指定UNIT和VOLUME参数。系统首先搜索私有库PRIVATE.LIB4去查找程序SCAN和UPDATE,其次才查找系统库SYS1.LINKLIB。在DD1语句中引用了JOBLIB DD语句中指定的私有库。 例2

//PAYROLL JOB FOWLER,CLASS=L //JOBLIB DD DSNAME=PRIV.DEPT58, // DISP=(OLD,PASS),

// UNIT=3350,VOLUME=SER=D58PVL //STEP1 EXEC PGM=DAY

//STEP2 EXEC PGM=BENEFITS //DD1 DD DSNAME=*.JOBLIB,

// VOLUME=REF=*.JOBLIB,DISP=(OLD,PASS) 因为在本例中JOBLIB DD语句中所指定的私有库没有被编目,所以必须指定UNIT和VOLUME参数。系统首先搜索私有库PRIV.DEPT58去查找程序DAY和BENEFITS,其次才查找系统库SYS1.LINKLIB。在DD1语句中引用了JOBLIB DD语句中指定的私有库。 例4

//PAYROLL JOB BIRDSALL,TIME=1440 //JOBLIB DD DSNAME=KRG.LIB12, // DISP=(OLD,PASS)

// DD DSNAME=GROUP31.TEST, // DISP=(OLD,PASS)

// DD DSNAME=PGMSLIB,UNIT=3350, // DISP=(OLD,PASS),VOLUME=SER=34568

通过三个DD语句为作业定义了三个相连接的私有库,系统将按照下面的顺序查找每一个程序:KRG.LIB12;GROUP31.TEST;PGMSLIB;SYS1.LINKLIB。

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

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

//STEPCAT DD DISP={OLD},

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

不要指定任何UNIT和VOLUME参数,系统将会从主编目中获取私有编目的位置。可以通过在STEPCAT语句后立即跟有省略了语句名的DD语句的方法为作业指定多个这样的私有编目。

通过下面的语句可以在一个特定的作业步中用主编目覆盖JOBCAT中定义的私有编目://STEPCAT DD DISP=OLD,DSNAME=主编目名。在一个作业步中可以将STEPCAT语句放在DD语句中的任何一个位置。

//STEP2 EXEC PROC=SNZ12 //STEPCAT DD

//DSNAME=BETTGER,DISP=SHR

STEPCAT语句为这个作业步定义了一个私有编目BETTGER。

12、STEPLIB:STEPLIB语句的作用与JOBLIB相似,主要区别在于作用的范围分别是作业步和作业。同一个作业中后续作业步可以引用在STEPLIB DD语句中定义的私有库,同样,可以将一个STEPLIB DD语句放在内部流或编目过程中,但不能将JOBLIB DD语句放在内部流或编目过程中。 格式:

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

13、IF-THEN-ELSE-ENDIF:条件语句

//IXSAMP23 JOB ‘AC’,’GZ’,CLASS=A,MSGCLASS=A,MSGLEVEL=(1,1), //?

//STEP01 EXEC PGM=PROGRAM1, PARM=(10,’2008-01-29’) //?

//TESTSTEP IF (STEP01.RC = 8) THEN //STEP0X EXEC PGM=PROGRAMX //?

// ELSE

//STEP0Y EXEC PGM=PROGRAMY //?

// ENDIF

如果作业步STEP01的执行返回码为8,那么条件为真,执行作业步STEP0X,否则执行作业步STEP0Y

小结:

TNND,这个JCL真恶心。本来做这篇笔记的初衷是记录些重点,怎奈JCL貌似都是重点,细节的东东太多了。做到后来的DD语句时,都有点想放弃,郁闷,后来没办法,只好把老师的PDF拷过来。TNND,这哪是笔记啊,都成帮助文档了。 学习主机已有近一个礼拜,基本操作只能马马虎虎,说到写JCL控制语句,真是惭愧.我花了很多时间来整理JCL语法、参数等信息,并做了一篇很长很长的类似帮助文档的笔记。不过,那只是开始,还是在理论阶段。对动手能力的提高帮助不大。这篇笔记就是专门为提高实际动手能力而写的,也是上课的内容。

实用程序UTILITY介绍:

一、系统实用程序

? IEH打头,主要功能是维护和管理系统、用户数据集和整个盘卷; ? 系统实用程序及其功能如下:

1、IEHNITT:为磁带卷写标号;

2、IEHLIST:系统控制数据信息列表;

3、IEHMOVE:移动或拷贝若干组数据、移动或拷贝整个卷、移动或拷贝编目目录等;

4、IEHPROGM:建立及维护系统控制数据、建立时代数据组索引、重命名磁带卷、删除数据集等;

5、IEHDASDR:初始化一个直接存取卷。 二、数据集实用程序

? IEB打头,它的主要功能是对数据集或数据集记录进行组织、修改或比较。 ? 可以作为单个作业来执行,也可以作为某个程序的子程序被调用。 ? Notes:这些数据维护实用程序不能用于VSAM数据集。

数据集实用程序:

0、IEBGENER:拷贝顺序数据集记录或将顺序数据集转换为分区数据集; 1、IEBCOPY:拷贝、压缩或合并分区数据集及扩展分区数据集; 2、IEBPTPCH:打印或穿卡输出一个数据集

3、IEBCOMPR:比较顺序数据集、分区数据集或扩展分区数据集; 4、IEBISAM:卸载、装载、拷贝或打印ISAM数据集;

5、IEBUPDATE:对顺序、分区数据集或扩展分区数据机进行合并修改。 三、独立实用程序

? IBC开头,是一种特殊的实用程序,可独立于操作系统运行,通常被存放在磁带上。当系统出现重大故障而又无法恢复时,利用系统转储磁带,恢复系统盘卷。如:

1、IBCDASDI:用于初始化和分配一个直接存取卷上的可用的实用程序; 2、IBCDUMPRS:是转储或再存储直接存取卷数据应用程序。

实用程序的调用:

? 实用程序的调用方法有两种, 一种是在ISPF下用TSO的CALL命令调用, 另一种是通过JCL语句调用。 JCL语句调用方式:

//UTLFM JOB ?

//STEP EXEC PGM=utility 调用公用程序 //SYSPRINT DD 系统输出数据集(SYSOUT) //SYSUT1 DD ? 输入数据集 //SYSUT2 DD ? 输出数据集

//SYSIN DD ? 定义实用程序使用的控制流/控制语句 COPY ? SELECT ? EXECLUDE ?

UTILITY控制语句格式:

不以‘//’开头,分为4个区: - 标签区(可选) - 操作区(必须) - 操作数区(必须) - 注释区(可选)

[IEBGENER]

功能:

–IEBGENER是用于建立,拷贝,打印SEQUENTIAL数据集的实用程序 模板:

//ST018 JOB NOTIFY=ST018,MSGLEVEL=(1,1) //STEP EXEC PGM=IEBGENER //SYSPRINT DD SYSOUT=* //SYSUT1 DD ? //SYSUT2 DD ? //SYSIN DD ? ...... ..... 说明:

IEBGENER的JCL语句:

– EXEC语句指定要执行的程序

– SYSPRINT DD语句定义输出信息数据集 – SYSUT1 DD语句定义输入数据集 – SYSUT2 DD语句定义输出数据集 – SYSIN DD语句定义控制数据集,如果不需要控制语句,可以如下表示//SYSIN DD DUMMY

IEBGENER的控制语句: – GENERATE

– MEMBER & RECORD ? 将顺序数据集划分为多个成员 – RECORD ? 只选中或打印顺序数据集的部

例1:分配一个PS顺序数据集st018.test1.test1,并且拷贝输入流数据到这个数据集中

000100 //ST018A JOB NOTIFY=ST018,MSGLEVEL=(1,1) 000200 //STEP1 EXEC PGM=IEBGENER