再上一篇:3.4.3 STEPCAT
上一篇:3.4.4 STEPLIB
主页
下一篇:第四章 作业控制子系统(Job Entry Subsystem)
再下一篇:4.1.1 JES2 的配置
文章列表

3.4.5 SYSIN

IBM S390 系统管理基础(zSeries,IBMSystemz, z/VM,zOS等操作系统使用,命令的参数与用法等)

通常,我们使用 SYSIN DD 语句作为一个内部流数据集的开始。内部流数据集以 DD * 或 DD DATA 语句开头,这样的 DD 语句可以有任何一个有效的名字,包括 SYSIN。如果在 内部流数据之前省略这样的 DD 语句,系统会自动提供一个名为 SYSIN 的 DD *语句。
1.格式
//SYSIN DD 参数[,参数]... [说明]
2.说明
第一个参数为*或 DATA,用以指出后面紧跟的时内部流数据。这条语句必须且只能够 位于内部流数据前。
3.实例

//STEP1

EXEC

PGM=READ

//SYSIN

DD

*

.

.

数据

.

//OUT1

DD

SYSOUT=A

//STEP2

EXEC

PGM=WRITE

//SYSIN

DD

DATA,DLM=17

.

.

.

17

3.5 过程 和其它高级语言一样,作业控制语言中也允许定义过程。过程是一段预先编写好的 JCL

语句的集合,它可以被反复调用。作业控制语言中定义了两种过程,分别是编目过程
(cataloged procedure)和流内过程(in-stream procedure)。

3.5.1 编目过程与流内过程 在指定的过程库中编目的过程称为编目过程。该过程库可以是分区数据集或扩展分区数

据集,通常系统过程被编目在系统过程库中,用户过程被编目在用户库中。由于调用编目过 程时,系统提供的是该过程的拷贝,因此一个编目过程可以同时被几个作业调用。
流内过程时放置在作业输入流中的过程。在一个作业中最多可以有 15 个流内过程,但 不能嵌套使用,也不能被其他作业调用。流内过程与编目过程的区别是流内过程随着一个作 业放在输入流中,它紧跟在 JOB 语句后面而不是作为分区数据集的成员。在实际应用时, 流内过程只用于测试阶段,一旦流内过程调试成功,即可对其进行编目,时期策划能够为编 目过程。
3.5.2 过程的编写 一个过程可由几个作业步组成。在过程中可以包含除下列语句外的所有 JCL 语句:

·调用过程的 EXEC 语句(一个过程不能调用另一个过程)

·JOB 语句、/*语句或//语句

·JOBLIB DD 语句或 JOBCAT DD 语句

·任何的 JES 控制语句

·DD *语句或 DD DATA 语句

流内过程的开始和结束分别用 PROC 语句和 PEND 语句表示,对于编目过程,不能有

PEND 语句,而如果没有分配给符号参数默认值,PROC 语句是可选的。过程的结构如下:

//过程名 PROC [符号参数]

//过程步 1 EXEC

//dd 名1 DD

·

·

·

//过程步 2 EXEC

//dd 名2 DD

·

·

·

// PEND (仅在流内过程中使用)

过程结构中的过程名、过程步名及 dd 名的书写规则与 JCL 中其它语句名的书写规则一 样。 符号参数的功能类似于其它编程语言子程序中的形式参数。
例:流内过程

//MYJOB JOB (2216,82),’TEST RUN’,CLASS=A

//RUN PROC

//GO EXEC PGM=ONE

//SYSOUT DD SYSOUT=A 流内过程

// PEND

//STEP1 EXEC RUN

本例中,RUN 是一个流内过程,作业中名为 STEP1 的执行语句调用这个流内过程。该
流内过程在去掉 PEND 语句后也可以作为标准的过程放在用户库中,作为编目过程。

3.5.3 过程的调用 过程的调用有如下两种方式:

//作业步名 EXEC PROC=过程名 [符号参数] 或 //作业步名 EXEC 过程名 [符号参数] 当调用一个过程时,系统会以输入流、用户库、系统库的顺序来检索所要调用的过程。

如果所调用的过程是流内过程,则必须把流内过程放在调用它的 EXEC 语句之前。 如果调用的编目过程被编目在用户库中,系统从JCLLIB 语句确定的用户库中进行检索。
因此,若调用的过程是用户库中的过程时,要用 JCLLIB 语句来指明过程所在的用户库。如 果调用的编目过程被编目在系统库中,系统从 JES2 中的 PROCLIB 参数指定的系统库进行 检索。

3.5.4 过程的修改 由于不同用户的要求不同,所以当某一个作业调用标准过程时,系统应允许用户对过程

进行修改,以满足自己的需要。过程修改的方式有如下三种:
(1)置换过程中的符号参数;
(2)对过程中的 EXEC 及 DD 语句参数进行覆盖和增加;
(3)增加新的 DD 语句。
1. 符号参数 符号参数由符号“&”和参数名组成,参数名可以是以字母或通配符开头的 1~8 位字母
数字或通配符,关键字参数和关键字子参数不能作为符号参数的参数名。符号参数为修改过 程提供了可选用的方法。
当过程中含有符号参数时,每一个符号参数必须指定一个值或赋空值,该值被称为符号 参数的初值。
下面是一个使用符号参数的例子:
例 1://RUN PROC PROGRAM=ONE,UNIT=SYSDA

//GO EXEC PGM=&PROGRAM

//A DD UNIT=&UNIT,SPACE=(TRK,20)

在本例中符号参数 PROGRAM、UNIT 都被赋了初值。当一个作业调用该过程时,这些 符号参数的初值可以被调用该过程的 EXEC 语句中的符号参数值所取代,从而达到修改过 程的目的。
下面是调用例 1 过程的例子: 例 2://JOB1 JOB …

//GO EXEC RUN,UNIT=TEMP

// PROGRAM=TWO

2. EXEC 语句参数的覆盖和增加

用 EXEC 语句调用过程时,该语句的所有关键字参数都会影响过程的执行,它将覆盖 过程中定义的参数,对于过程中没有定义的参数,系统会把它加到过程中去。用 EXEC 语 句修改过程的方式如下:

//stepname EXEC 过程名,参数.过程步=值 其中“参数.过程步=值”表示准备对过程中所希望的过程步的关键字参数进行修改。 例如有下述过程:

//RUN PROC

//STEP1 EXEC PGM=P1

·

·

//STEP2 EXEC PGM=P2

·

·

//STEP3 EXEC PGM=P3,TIME=(2,30)

若要求对 STEP2 增加 COND 参数并指定条件测试为(8,GT),对 STEP3 改变其时间限 制为 4 秒。那么调用该过程时,EXEC 语句为:

//GO EXEC RUN,

// COND.STEP2=(8,GT),

// TIME.STEP3=4

3.DD 语句参数的覆盖

对于过程中 DD 语句参数的修改可以通过下列方式:

//过程步名.DD 名 DD …

“过程步名.DD 名”用来确定要修改的 DD 语句,其中“DD 名”指需要修改的 DD 语 句,“过程步名”指过程重要修改的 DD 语句所在的过程步的名字。下面是对过程中 DD 语 句进行修改的例子:
例://RUN PROC

···

//S1 EXEC …

···

//SYSUT2 DD SYSOUT=*

···

// PEND

···

//TEST2 EXEC RUN,…

···

//S1.SYSUT2 DD SYSOUT=S

4. 增加新的 DD 语句

对于调用的过程,可能不包含用户需要的 DD 语句,这是可通过下列方法来增加新的

DD 语句:

//过程步名.需增加的DD 语句 其中过程步名是确定新加的 DD 语句在过程中的位置。

3.6 实用程序

3.6.1 实用程序的分类

在 MVS 系统中,IBM 提供了种类繁多且十分有用的实用程序,来辅助用户对数据进行 组织与维护。
实用程序分为三类:系统实用程序、数据集实用程序和独立实用程序。 系统实用程序通常以 IEH 打头,它的主要功能是维护和管理系统、用户数据集合整个
盘卷。系统实用程序及其功能如下: IEHNITT:为磁带卷写标号。 IEHLIST:系统控制数据信息列表。

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

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

IEHDASDR:初始化一个直接存取卷。

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

IEBCOMPR:比较顺序数据集、分区数据集或扩展分区数据集。 IEBCOPY:拷贝、压缩或合并分区数据集及扩展分区数据集。 IEBDG:创建含有模型数据的测试数据集。 IEBEDIT:有选择的拷贝作业步及其相关的作业语句。 IEBGENER:拷贝顺序数据集记录或将顺序数据集转换为分区数据集。 IEBIMAGE:修改、打印或连接模块。 IEBISAM:卸载、装载、拷贝或打印 ISAM 数据集。 IEBPTPCH:打印或穿卡输出一个数据集。 IEBUPDATE:对顺序、分区数据集或扩展分区数据机进行合并修改。

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

IBCDASDI:用于初始化和分配一个直接存取卷上的可用道的实用程序。

IBCDUMPRS:是转储或再存储直接存取卷数据的实用程序。

3.6.2 实用程序的调用

实用程序的调用方法有两种,一种实在 ISPF 下用 TSO 的 CALL 命令调用,另一种是 通过 JCL 语句调用,在本章中我们只讨论后一种调用方式。其格式为:
(1)//UTLFM JOB …

//STEP EXEC PGM=utility 调用公用程序

//SYSPRINT DD … 系统输出数据集(SYSOUT)

//SYSUT1 DD … 输入数据集

//SYSUT2 DD … 输出数据集

//SYSIN DD … 定义实用程序使用的控制数据

(2)//UTLFM JOB …

//STEP EXEC PGM=utility 调用实用程序

//SYSPRINT DD … 系统输出数据集(SYSOUT)

//ddname

DD UNIT=…,VOL=…,DISP=OLD

存取所需数据集的有关信息

//ddname

//SYSIN

DD UNIT=…,VOL=…,DISP=OLD 所存储数据集的有关信息

DD … 定义实用程序实用的控制数据

3.6.3 控制语句的标准格式

标号 操作符 操作数 注释
标号用于表示控制语句,除实用程序 IEHNITT 外,其它实用程序都可以省略标号。
标号必须放在控制语句开始的位置,后面留有一个以上的空格。标号石油 1~8 个字母或数字 字符组成。
操作符用于标示控制语句的类型,其后至少跟有一个空格。操作数是由一个或多个关 键字参数组成,参数之间以逗号相隔。操作数后至少跟一个空格。控制语句内可加注释,但 它与操作数之间至少要有一个空格。
当控制语句有续行时,可在本行有逗号的地方断开,或在本行第 72 列处设置一个字符, 或在下一行的 16 列开始。

3.6.4 常用实用程序简介

1. IEBCOMPR

IEBCOMPR 程序用于在两个数据集的逻辑记录间进行比较,这两个数据集可以是顺序 数据集、分区数据集或扩展分区数据集。它能对数据集或数据集成员的定长、变长、组块、 非组块或未定义记录进行比较。但它不能对加载模块进行比较。

两个顺序数据集比较相同,是指它们含有相同数量的记录且相关记录和关键字完全相 同。而两个分区数据集或两个扩展分区数据集比较相同,则是指:
(1)相关成员含有相同的记录;
(2)注释列表在相关成员的位置相同;
(3)相关记录和关键字完全相同;
(4)相关目录和用户数据区完全相同。 对于相同的数据集必须同时满足这些条件,否则不能视其为相同数据集。 下面是关于 IEBCOMPR 程序语句的列表:

语 句

功 能

JOB

作业开始

EXEC

定义程序名PGM=IEBCOMPR

SYSPRINT DD

指定系统输出数据集

SYSUT1 DD

定义需要比较的数据集

SYSUT2 DD

定义需要比较的数据集

SYSIN DD

定义控制数据集或DUMMY,控制语句可以是COMPARE、EXITS、LABELS

控制语句说明:
COMPARE:定义数据集的组织结构,在 SYSIN DD 中设置控制语句时,投资必须 是第一个控制语句,当输入数据集是分区数据集或扩展分区数据集时,必须设置这个语句。 语句格式如下:

label COMPARE TYPROG={PS/PO}

其中 TYPROG={PS/PO}用于指定输入数据集的组织结构,PS 表示输入数据集为顺序数 据集,为缺省值;PO 表示输入数据集是分区数据集或扩展分区数据集。
EXITS:定义用户所用的出口例程。当用户调用出口例程时,需要用该语句。当设置多 个 EXITS 时,IEBCOMPR 将只用最后一个。EXITS 的语句格式为:

label EXITS INHDR=例程名

,INTLR=例程名

,ERROR=例程名

,PRECOMP=例程名 其中“INHDR=例程名”指定处理用户输入头标的例程名;“INTLR=例程名”指定处理
用户输入尾标的例程名;“ERROR= 例程名”指定出错处理接收控制的例程名; “PRECOMP=例程名”指定一个例程名,该例程在 IEBCOMPR 比较输入数据集之前对逻辑 记录进行处理。
LABELS:指定是否将用户标号作为数据来处理,当设置多个 LABELS 语句时,

IEBCOMPR 程序只用最后一个,LABELS 语句的格式为:

label LABELS DATA={YES | NO | ALL| ONLY}

其中 DATA= {YES | NO | ALL| ONLY}指明是否将用户标号作为数据处理。DATA 的取 值如下:

YES:所有用户标号都作为数据处理,并依照返回码,将标号作为数据终止来处理,该 值为缺省值。

NO:仅将用户标号作为数据处理。

ALL:所有用户标号作为数据处理,16 中返回码将使 IEBCOMPR 程序完成剩余用户标 号组的处理并终止作业步。

ONLY:只用用户头标作为数据处理,处理时不管是否有返回码。 应用实例:

例1. 比较两个分区数据集

//DISKDISK JOB …

//STEP1 EXEC PGM=IEBCOMPR

//SYSPRINT DD SYSOUT=A

//SYSUT1 DD DSN=PDSSET1,UNIT=disk,DISP=SHR,

// DCB=(RECFM=FB,LRECL=80,BLKSIZE=2000),

// VOLUME=SER=111112

//SYSUT2 DD DSN=PDSSET2,UNIT=disk,DISP=SHR

// DCB=(RECFM=FB,LRECL=80,BLKSIZE=2000)

//SYSIN DD * COMPARE TYPROG=PO

/*

在上例中,SYSUT1 DD 语句定义输入数据集(PDSSET1),这是个组块数据集,它驻 留在磁盘卷上。SYSUT2 DD 语句定义另一个输入数据集(PDSSET2),它也是个驻留在磁 盘卷上的块组数据集。SYSIN DD 语句定义流内控制数据集,其中的控制语句表示两个输入 数据集是分区数据集。

2. IEBCOPY

IEBCOPY 程序用于拷贝或合并多个分区数据集或扩展分区数据集,其作用有:

(1)拷贝完整的数据集或部分数据集;
(2)建立分区数据集或扩展分区数据集的备份,备份是存放在磁带或磁盘上的顺序数 据集;
(3)变更分区数据集或扩展分区数据集的成员、为选择的成员更换新名;
(4)对加载模块进行拷贝和重新组块。 下面是 IEBCOPYDE 的作业控制语句列表:

语 句

说 明

JOB

作业初始

EXEC

定义程序名PGM=IEBCOPY

SYSPRINT DD

定义由IEBCOPY 产生的系统输出信息

SYSUT1 DD

定义输入的分区数据集或扩展分区数据集

SYSUT2 DD

定义输出的分区数据集或扩展分区数据集

SYSUT3 DD

定义一个一处数据集,该语句在没有足够的虚拟空间存放输入的分区数据集或扩展

分区数据集目录入口时使用

SYSUT4 DD

定义一个一处数据集,该语句在没有足够的虚拟空间存放输出的分区数据集或扩展

分区数据集目录入口时使用

SYSIN DD

定义控制语句,可在这里定义的语句有:COPY、ALTERMOD、COPYMOD、

SELECT、EXECLUDE

下面对控制语句进行说明:

COPY:启动一个或多个拷贝、写在或加载操作。其格式为;

label COPY OUTDD=ddname

,INDD=({ddname | (ddname,R)},…)

,LIST={YES|NO}

操作数说明:
“OUTDD=ddname”:指定输出的分区数据集名,这里的 ddname 必须是本作业步中的 一个 DD 语句名。
“INDD=({ddname | (ddname,R)},…)”:指定输入分区数据集或扩展分区数据集,对于 卸载操作只能指定一个 ddname,这里的 R 表示从输入的数据集中选择所有的成员进行相应 的操作,此时不需设置 SELECT 语句。
“LIST={YES|NO}”:指出是否将拷贝的成员名列在 SYSPRINT 数据集中,取值为 YES
时将成员名列表。 需要注意的是:
(1)如果为拷贝操作,输入数据集和输出数据集必须是分区数据集、扩展分区数据集 或卸载模块结果的顺序数据集;
(2)如果是加载操作,输入数据集必须是分区数据集或顺序数据集,而输出数据集则 必须是分区数据集;
(3)如果是卸载操作,输入数据集必须是分区数据集、扩展分区数据集或顺序分区数 据集,输出数据集可以驻留在直接存取卷上,也可以驻留在磁带卷上。当驻留在 磁带卷上时,它的组织结构必须是顺序数据集,且要指定省略目录或缩影值得 SPACE 参数。
ALTERMOD:指明加载模块变更的开始,其格式为: label ALTERMOD OUTDD=ddname,LIST={YES|NO} 操作数说明: “OUTDD=ddname”:指定要变更的数据集;
“LIST={YES|NO}”:指明是否将变更成员名列在 SYSPRINT 数据集中,取值为 YES
时,被变更的所有成员名列在 SYSPRINT 数据集中。

COPYMOD:指明对拷贝和加载模块从新组块的操作,其格式为:

label COPYMOD OUTDD=ddname

,INDD=({ddname | (ddname,R)},…)

,MAXBLK={nnnn|nnK}

,MINBLK={nnnn|nnk}

,LIST={YES|NO}

操作数说明: “OUTDD=ddname”:指定加载模块要拷贝到的分区数据集;
“INDD=({ddname | (ddname,R)},…)”:指定输入数据集名,该数据集是一个加载模块
库,并在本作业的一个名为 ddname 的 DD 语句中定义,这里的 R 表示从输入的数据集中选 择所有的成员进行拷贝,并变更输出加载模块库中任何指定的成员名,此时不需设置 SELECT 语句;
“MAXBLK={nnnn|nnK}”:指定输出分区数据集记录的最大块值,通常设置的值要小 于缺省值,以便数据记录能和其它系统或程序兼容,nnnn 是一个十进制数,nnK 则表示 nn 千字节,其缺省值是输出数据集的块大小;
“MINBLK={nnnn|nnk}”: 指定输出分区数据集记录的最小块值,缺省值为 1K; “LIST={YES|NO}”:指明是否将变更成员名列在 SYSPRINT 数据集中,取值为 YES
时,被变更的所有成员名列在 SYSPRINT 数据集中。

SELECT:确定输入数据集中要拷贝的成员名,其格式为:

label SELECT MEMBER=({name1|(name1,newname1,R)|(name1, ,R)}|

操作数说明:
,(name2,newname2,R)(|

name2,,R)},。。。)

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

EXCLUDE:确定输入数据集中不被拷贝和不加载的成员,其格式为: label EXCLUDE MEMBER=(name1,name2,…) 下面是几个实例:

例 1.//COPY JOB…

//JOBSTEP EXEC PGM=IEBCOPY

//SYSPRINT SYSOUT=A

//SYSUT1 DD DSN=DATASET5,UNIT=disk,VOL=SER=111113,

// DISP=SHR

//SYSUT2 DD DSN=DATASET4,UNIT=disk,VOL=SER=111112,

// DISP=(NEW,KEEP),SPACE=(TRK,(5,1,2))

上面是一个拷贝整个数据集的例子。在该例中,SYSOUT1 DD 定义一个含有两个成员 的分区数据集 DATASET5,SYSUT2 DD 定义一个新的分区数据集 DATASET4,并为它分配

5 个磁道,其中两个磁道分配给目录区。在这个例子中不需要 SYSIN DD 语句,它把数据集

DATASET5 的所有成员都拷贝到数据集 DATASET4 中。 例 2.//COPY JOB …

//JOBSTEP EXEC PGM=IEBCOPY

//SYSPRINT DD SYSOUT=*

//OUT1 DD DSN=DATESET1,UNIT=disk,VOL=SER=111112,

// DISP=(OLD,KEEP)

//IN6 DD DSN=DATASET6,UNIT=disk,VOL=SER=111115,

// DISP=OLD

//IN5 DD DSN=DATASET5,UNIT=disk,VOL=SER=111116,

// DISP=(OLD,KEEP)

//SYSUT3 DD UNIT=SYSDA,SPACE=(TRK,(1))

//SYSUT4 DD UNIT=SYSDA,SPACE=(TRK,(1))

//SYSIN DD *

COPYOPER COPY OUTDD=OUT1

INDD=IN5,IN6

SELECT MEMBER=(B,,R),A)

/*

上面是一个拷贝、置换被选择的数据集成员的例子。在该例中:

OUT1 DD 语句定义含有三个成员(A、B 和 F)的分区数据集 DATASET1; IN6 DD 语句定义含有三个成员(B、C 和 F)的分区数据集 DATASET6; IN5 DD 语句定义含有两个成员(A、C)的分区数据集 DATASET5;

SYSUT3 和 SYSUT4 DD 语句定义临时溢出数据集,并为它们分配一个磁道;

SYSIN DD 语句定义流内控制数据集,它包含一个 COPY 语句、一个 INDD 语句和一个 SELECT 语句。OUTDD 参数指定 DATASET1 作为输出数据集,INDD 指定 DATASET5 作 为第一个处理的输入数据集,而 DATASET6 作为第二个处理的输入数据集,它的处理顺序 为:

(1)在 DATASET5 中查询所选择成员。
(2)首先查到成员 A,但不拷贝到 DATASET1 中,因为 DATASET1 中已经含有成员 A
且没有设置 R 参数、。
(3)在 DATASET5 中未查到所需要的成员,继续在 DATASET6 中查找。
(4)找到成员 B 并拷贝到 DATASET1 中,虽然 DATASET1 中已经含有成员 B,但在 这里设置了 R 参数。

SELECT 指定从输入数据集拷贝选择的成员到输入数据集。 例 3.//CONVERT JOB …

//STEP1 EXEC PGM=IEBCOPY

//SYSPRINT DD SYSOUT=*

//SYSUT1 DD DSN=PDSSET,DISP=SHR,DSNTYPE=PDS

//SYSUT2 DD DSN=PDSSET,LINK=PDSSET,DSNTYPE=LIBRARY,

// DISP=(NEW,CATLG)

上面是一个分区数据集转换为扩展分区数据集的例子。在该例中,SYSUT1 DD 语句定义一个输入的分区数据集 PDSSET,SYSUT2 DD 语句定义输出的扩展分区数据 集 PDSE,所有的扩展分区数据集都是由存储管理子系统(SMS)进行管理,其中 LINK 子参数为扩展分区数据集设置 DCB 和 SPACE 特性,DSNTYPE 子参数指出新建数据集 是扩展分区数据集而不是分区数据集。这里不需要 SYSIN DD 语句。

3. IEBGENER

IEBGENER 程序主要用于:

(1)建立顺序数据集、分区数据集或扩展分区数据集成员的备份。这个拷贝可以是磁 带到磁带、磁盘到磁盘或磁盘到磁带。注意:如果需要将备份数据集放在原数据 集所在的卷,它们两者不能同名。
(2)从顺序数据集产生分区数据集或扩展分区数据集。通过实用程序控制语句,将顺 序数据集逻辑化分为若干个记录组并为其分配成员名,之后 IEBGENER 程序把 这些新建的成员放到指定的分区数据集或扩展分区数据集中。注意:对于含有跨 区记录的数据集不能产生分区数据集或扩展分区数据集。
(3)为分区数据集添加新成员。IEBGENER 程序将输入的顺序数据作为一个成员加到 指定的分区数据集或扩展分区数据集中。
(4)产生一个编辑的顺序数据集、分区数据集或扩展分区数据集。通过使用实用程序 控制语句,指定一个或一组记录或整个数据集的编辑信息。
(5)处理含有双字节字符数据集。用 IEBGENER 可以拷贝、编辑、重新组块或打印 含有双字节字符(DBCS)的数据,也可以将含有 DBCS 数据的顺序数据集转换
成为分区数据集。
(6)打印顺序数据集、分区数据集或扩展分区数据集的成员。
(7)对数据集的逻辑记录进行重新组块或改变其长度。
(8)为顺序输出数据集拷贝用户标号。
(9)为用户例程提供编辑设施及出口,该例程用于处理标号、受控输入数据及永久性 输入输出错误。
下面是 IEBGENER 的作业控制语句列表:

语 句

说 明

JOB

作业初始

EXEC

指定程序名PGM=IEBGENER

SYSPRINT DD

指定系统输出数据集

SYSUT1 DD

定义输入数据集

SYSUT2 DD

定义输出数据集

SYSIN DD

定义控制数据集,控制语句可以是GENERATE、EXITS、LABELS、MEMBER、RECORD

控制语句说明:

GENERATE:指明成员名和别名数、记录标识符、文字及控制数据集中的编辑信息。

EXITS:指明用户出口历程。 LABELS:特指用户标号处理。 MEMBER:指定新建分区数据集或扩展分区数据集的成员名或成员别名。 RECORD:定义将处理的记录组并提供编辑信息。

应用实例:
例 1.//PRINT JOB …

//STEP1 EXEC PGM=IEBGENER

//SYSPRINT DD SYSOUT=A

//SYSIN DD DUMMY

//SYSUT1 DD DSN=INPUT,UNIT=3380,DISP=SHR,

// DCB=(RECFM=F,LRECL=80,BLKSIZE=80),VOL=SER=111112

//SYSUT2 DD SYSOUT=A,DCB= DCB=(RECFM=F,LRECL=80,BLKSIZE=80)

上面是一个打印顺序数据集的例子。由于该作业不需要公用程序的控制语句,因此 SYSIN DD 语句定义了空数据集DUMMY,SYSUT1 定义了输入顺序数据集INPUT,SYSUT2 定义了输出数据集的输出设备,其中 DCB 参数用于改变数据输出格式。

4.IEHLIST

IEHLIST 程序用于系统信息列表,其中包括分区数据集目录列表、VTOC 列表以及编目 列表等。下面是它的应用实例:

LISTCTLG VOL=SYSDA=PACK12

LISTVTOC VOL=SYSDA=PACK11,DSN=(USER.F1) LISTPDS VOL=SYSDA=PACK17,DSN=U1.LIB

/*

注意:DD 语句中的 VOL 和 UNIT 参数的设置要与 SYSIN DD 中控制语句的相关参数 一致。

5.DFSORT

DFSORT 程序用于数据排序,下面是它的应用实例:

//STEP1 EXEC PGM=DFSORT

//SYSIN DD *

SORT FIELDS=(1,10,CH,A)

//SORTIN DD DSN=TEST.LOG,DISP=OLD

//SORTOUT DD DSN=SORT.LOG,DISP=(NEW,PASS),

// UNIT=SYSDA,SPACE=(CYL,1)

//SORTWK1 DD UNIT=SYSDA, SPACE=(CYL,1)

STEP1 语句用于调用 DFSORT 程序;SYSIN DD 语句定义控制数据集,其中控制语句 SORT FIELDS=(1,10,CH,A)指出要排序的内容始于输入数据的第一个位置,以递增顺序对 前 10 字符进行排序;SORTIN DD 语句给出用于排序的输入数据集名和状态;SYSOUT DD 语句为排序的输出结果指定数据集;SORTWK1 DD 语句为排序操作分配工作空间。

MVS 中的实用程序有很多,在本节中不能一一介绍,读者只要通过本节中介绍的几个 常用的实用程序及其实例就可以掌握实用程序的一般使用方法,具体参数的说明及格式等, 读者可以参考 IBM 有关的手册。