IBM大型机操作系统 学习笔记(3)

学习主机已有近一个礼拜,基本操作只能马马虎虎,说到写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
000300 //SYSPRINT DD SYSOUT=*
000400 //SYSUT1 DD *
000500JONES FRED 53AF 87 5701 NINE MILE ROAD
000600ANDERSON DON 78AF 34 320 WESTHEIMER #219
000710 //SYSUT2 DD DSN=ST018.TEST1.TEST1,DISP=(NEW,CATLG,DELETE),
000800 //SPACE=(TRK,(1,1)),VOL=SER=USER02,
000900 //RECFM=FB,LRECL=80,UNIT=SYSDA
001000 //SYSIN DD DUMMY

例2:复制PS顺序数据集

000100 //ST018 JOB NOTIFY=ST018,MSGLEVEL=(1,1)
000200 //STEP1 EXEC PGM=IEBGENER
000300 //SYSPRINT DD SYSOUT=*
000400 //SYSUT1 DD DSN=ST018.SDS.DATA,DISP=SHR
000500 //SYSUT2 DD DSN=ST018.TEST1.TEST1,DISP=OLD
000600 //SYSIN DD DUMMY

例3:将一个PS顺序数据集st018.sds.data分割成3部分,以成员形式存储在PO分区数据集 st018.test.po中

000100 //ST018A JOB NOTIFY=ST018,MSGLEVEL=(1,1)
000200 //STEP1 EXEC PGM=IEBGENER
000300 //SYSPRINT DD SYSOUT=*
000400 //SYSUT1 DD DSN=ST018.SDS.DATA,DISP=SHR
000500 //SYSUT2 DD DSN=ST018.TEST.PO,DISP=(NEW,CATLG,DELETE),
000600 // SPACE=(TRK,(1,1,1)),VOL=SER=USER02,
000700 // RECFM=FB,LRECL=80,UNIT=SYSDA
000800 //SYSIN DD *
000900GENERATE MAXNAME=3,MAXGPS=2
001000MEMBER NAME=MEM1
001100RECORD IDENT=(8,'FIRSTMEM',2)
001200MEMBER NAME=MEM2
001300RECORD IDENT=(8,'SECNDMEM',2)
001400MEMBER NAME=MEM3

例4:从源PS顺序数据集ST018.SDS.DATA中选中一些列存储在目标PS顺序数据集ST018.TEST1.TEST1中....

000100 //ST018A JOB NOTIFY=ST018,MSGLEVEL=(1,1)
000200 //SETP1 EXEC PGM=IEBGENER
000300 //SYSPRINT DD SYSOUT=*
000400 //SYSUT1 DD DSN=ST018.SDS.DATA,DISP=SHR
000500 //SYSUT2 DD DSN=ST018.TEST1.TEST1,DISP=OLD
000600 //SYSIN DD *
000700GENERATE MAXFLDS=3
000800RECORD FIELD=(10,1,,1),FIELD=(10,11,,20),FIELD=(10,21,,30)

例5:打印/显示顺序数据集ST018.SDS.DATA

000100 //ST018 JOB NOTIFY=ST018,MSGLEVEL=(1,1)
000200 //STP1 EXEC PGM=IEBGENER
000300 //SYSPRINT DD SYSOUT=*
000400 //SYSUT1 DD DSN=ST018.SDS.DATA,DISP=SHR
000500 //SYSUT2 DD SYSOUT=*
000600 //SYSIN DD DUMMY

以上例子说明:

–SYSIN DD * 语句标识输入数据流记录控制语句;

–GENERATE语句表示调用编辑功能,操作数MAXFLDS=3 表示后面的RECORD语句最多描述三个区域;

–RECORD语句通过FIELD参数描述输入输出区域,其格式为:

–FIELD=(LENGTH OF FIELD,POSITION IN INPUT,CONVERSION,POSITION IN OUTPUT)

^^^^^待续~~~~~~~~~~~~~~~~

续>>(7.18)

[IEBCOPY]

EBCOPY主要功能:

–拷贝完整的数据集或部分数据集;

–建立分区数据集或扩展分区数据集的备份,备份是存放在磁带或磁盘上的顺序数据集;

–变更分区数据集或扩展分区数据集的成员、为选择的成员更换新名;

–对加载模块进行拷贝和重新组块。

模板:

JOB

EXEC PGM=IEBCOPY

SYSPRINT DD SYSOUT=*

SYSUT1 DD 输入数据集

SYSUT2 DD 输出数据集

SYSUT3 DD 溢出数据集#可以省略

SYSUT4 DD 溢出数据集#可以省略

SYSIN DD * 控制语句#如不需要控制语句,可写成SYSIN DD DUMMY

COPY

SELECT

EXECLUDE

COPY:启动一个或多个拷贝、写或加载操作

1.格式:label COPY OUTDD=ddname,INDD=({ddname| (ddname,R)},…),LIST={YES|NO}

2.操作数说明:

•“OUTDD=”:指定输出的分区数据集名,这里的数据集必须是本作业步中的一个DD语句名;

•“INDD=({ddname| (ddname,R)},…)”:指定输入分区数据集,对于卸载操作只能指定一个ddname,这里的R表示从输入的数据集中选择所有的成员进行相应的操作,此时不需设置SELECT语句。

•“LIST={YES|NO}”:指出是否将拷贝的成员名列在SYSPRINT数据集中,取值为YES时将成员名列表。

注意:

–如果为拷贝操作,输入数据集和输出数据集必须是分区数据集、扩展分区数据集或卸载模块结果的顺序数据集;

–如果是加载操作,输入数据集必须是分区数据集或顺序数据集,而输出数据集则必须是分区数据集;

–如果是卸载操作,输入数据集必须是分区数据集、扩展分区数据集或顺序分区数据集,输出数据集可以驻留在直接存取卷上,也可以驻留在磁带卷上。当驻留在磁带卷上时,它的组织结构必须是顺序数据集,且要指定省略目录或缩影值得SPACE参数。

SELECT:确定输入数据集中要拷贝的成员名

1.格式:label SELECT MEMBER=({name1| (name1,newname1,R) | (name1,,R)},{name2| (name2,newname2,R) | (name2,,R)},…..)

2.操作数说明:•“MEMBER=…”:name确定拷贝的成员名;newname确定拷贝输出的成员名,如果这个名字在输出分区数据集中已存在,则这个成员不被拷贝,除非同时设置R参数,newname和ALTERMOD不能同时使用。

EXCLUDE:确定输入数据集中不被拷贝和不加载的成员

1.格式:label EXCLUDE MEMBER=(name1, name2, name3…..)

2.操作数说明:•“MEMBER=…”:name确定不被拷贝的成员名

例1,拷贝整个分区数据集,不拷贝名字相同的成员

000100 //ST018A JOB NOTIFY=ST018,MSGLEVEL=(1,1)
000200 //STP1 EXEC PGM=IEBCOPY
000300 //SYSPRINT DD SYSOUT=*
000400 //SYSUT1 DD DSN=ST018.PDS.DATA,DISP=SHR
000500 //SYSUT2 DD DSN=ST018.TEST.PO,DISP=(NEW,CATLG,DELETE),
000600 // SPACE=(TRK,(5,1,2)),VOL=SER=USER02,UNIT=SYSDA

注意:SYSIN DD * 语句可以省略

例2,拷贝整个分区数据集,拷贝且覆盖名字相同的成员

000100 //ST018A JOB NOTIFY=ST018,MSGLEVEL=(1,1)
000200 //STP1 EXEC PGM=IEBCOPY
000300 //SYSPRINT DD SYSOUT=*
000400 //DD1 DD DSN=ST018.PDS.DATA,DISP=SHR
000500 //DD2 DD DSN=ST018.TEST.PO,DISP=OLD
000600 //SYSIN DD *
000700COPY OUTDD=DD2,INDD=( (DD1,R)) #留意参数格式

例3,仅拷备和置换被选择的分区数据集成员

000100 //ST018A JOB NOTIFY=ST018,MSGLEVEL=(1,1)
000200 //STP1 EXEC PGM=IEBCOPY
000300 //SYSPRINT DD SYSOUT=*
000400 //DD1 DD DSN=ST018.PDS.DATA,DISP=SHR
000500 //DD2 DD DSN=ST018.TEST.PO,DISP=OLD
000600 //SYSIN DD *
000700COPY OUTDD=DD2,INDD=(DD1)
000800SELECT MEMBER=(IEBCOPY1,(IEBCOPY2,R))

例4, 拷备时排除一些分区数据集成员

//ST018A JOB NOTIFY=ST018,MSGLEVEL=(1,1)
//STP1 EXEC PGM=IEBCOPY
//SYSPRINT DD SYSOUT=*
//DD1 DD DSN=ST018.PDS.DATA,DISP=SHR
//DD2 DD DSN=ST018.TEST.PO,DISP=OLD
//SYSIN DD *
COPY OUTDD=DD2,INDD=(DD1)
SELECT MEMBER=(IEBCOPY1,(IEBCOPY2,R))

[IEPTPCH]

IEBPTPCH的功能:

–用来打印整个顺序数据集

–用来打印整个分区数据集或分区数据集的一个/多个成员

–用来打印顺序数据集或分区数据集成员的一部分内容(指所有记录的某些字段或一些记录的某些字段)

模板:

JOB

EXEC PGM= IEBPTPCH

SYSPRINT DD SYSOUT=*

SYSUT1 DD 输入数据集

SYSUT2 DD 输出数据集

SYSIN DD * 控制语句#可以是//SYSIN DD DUMMY

PRINT

TITLE

RECORD

MEMBER

IEBPTPCH的控制语句说明:

–PRINT控制语句指定输入流记录以物理顺序组织

–TITLE控制语句指定输出的标题•格式TITLE ITEM=(title, col. to start it in),ITEM=(…), …

–RECORD语句通过FIELD参数描述输入输出区域

(1) 格式RECORD FIELD=(length of field,positionin input,conversion,positionin output)

(2) FIELD=(80)

–RECORD语句通过IDENT参数描述选中的记录

(1) 格式RECORD IDENT=(length<=8,’literal’,input-location)

(2) 用于决定最后一条记录

–RECORD IDENT 和FIELD一起使用

(1) 使用IDENT确定FIELD起作用的记录范围

(2) 使用FIELD确定选取的字段

–MEMBER NAME=…

•Supply PDS member name to be printed.

•If omitted when printing a pds, it prints all members.

•Must specify TYPORG=PO if printing pdsmembers because default is PS.

–MEMBER 和RECORD一起使用

•All RECORD statements that follow a MEMBER statement pertain to the member indicated in the member statement.

•If no RECORD statements follow, the member is printed with the default conditions.

[IEHLIST]

JOB

EXEC PGM= IEHLIST

SYSPRINT DD SYSOUT=*

SYSIN DD * 控制语句

LISTVTOC

LISTCTLG

LISTPDS

IEHLIST的功能

用于列出DASD VTOC的内容

用于列出CATALOG的内容

用于列出PDS的目录

IEHLIST的JCL语句

SYSIN DD语句定义控制数据集

IEHLIST的控制语句

–LISTVTOC

– LISTCTLG
– LISTPDS DSNAME=( LISTPDS DSNAME=(pdsname,pdsname pdsname,pdsname)
– 显示格式显示格式

• DUMP DUMP or or FORMAT FORMAT

–控制语句中的DSNAME不能简写成DSN

–控制语句中的VOL参数格式为VOL=XXXXX=YYYYYY, 其中XXXXX是DD语句中的UNIT参数定的值而YYYYYY是SER参数指定的值

•例子OL=SYSDA=USER01 or VOL=3390=USER01x

[IEBCOMPR]

JOB

EXEC PGM= IEBCOMPR

SYSPRINT DD SYSOUT=*

SYSUT1 DD 参与比较的数据集

SYSUT2 DD 参与比较的数据集S

YSIN DD * 控制语句

COMPARE

EXTS

LABELS

IEBCOMPR的功能

可以用于比较SDS和PDS

以记录为单位进行比较

常用于检测备份

IEBCOMPR的JCL语句

SYSUT1 DD语句定义参与比较的数据集

SYSUT2 DD语句定义参与比较的数据集

SYSIN DD语句定义控制数据集

IEBCOMPR的控制语句

COMPARE TYPORG=PS|PO

EXTS identifies user exit routines to be used

LABELS whether user labels are to be treated as data

[SORT]

JOB

EXEC PGM= SORT

SYSOUT DD SYSOUT=*

SORTIN DD 输入数据集

SORTOUT DD 输出数据集

SYSIN DD * 控制语句

SORT

SORT的功能

对数据集内容进行排序

SORT的JCL语句

SORTIN DD语句定义输入的待排序数据集,可以有多个

SORTOUT DD语句定义输出的已排序后的数据集

SYSIN DD语句定义控制数据集

SORT的控制语句

SORT FIELDS=(start column, length, sort method, a/d )

OUTFIL FNAMES=指定输出数据集

小结:

第一次写JCL调用实用程序,难免会有些磕磕碰碰,所以不可避免犯了些低级错误.

错误归结:

1、MSGLEVEL(1,1)#忘记写等号

2、noplaceto directory#创建PDS时directory block设置太小,所以不能再创建成员.

3、MEMBER 执行错误#参数名超过8个字符。。老师说如果某个名字超过8个字符,就得警惕

4、使用COPY参数时,OUTDD的值不能加括号! INDD的值必须加括号! INDD=(DD2,R)是错的

5、SELECT和EXCLUDE参数不可同时出现,否则出错。

重要点 :创建数据集时,SPACE(TRK,(1,,A)).其中,A=0时,代表创建的是SDS,A>0时,代表创建的是PDS,切记切记!!

猜你喜欢

转载自leowzy.iteye.com/blog/888926