IEBCOPY :
IEBCOPY 系统实用程序的功能是拷贝,压缩和合并分区数据集以及扩展分区数据集,变更分区数据集或者扩展分区数据集的成员,为选择的成员更换新名,对加载模块进行拷贝和重新组块。
下面是 IEBCOPY 的作业控制语句列表:
语 句 |
说 明 |
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 语句。
例 4.
//UNLOAD JOB …
// EXEC PGM=IEBCOPY
//SYSPRINT DD SYSOUT=A
//SYSUT1 DD DSN=inpds,DISP=SHR
//SYSUT2 DD DSN=tape.dataset.name,UNIT=TAPE,
// VOL=SER=tape#,LABEL=#,DISP=(NEW,PASS)
//SYSIN DD DUMMY
/*
上面是将一个分区数据集转存为磁带上的顺序数据文件的例子。
例 5.
//UPLOAD JOB …
// EXEC PGM=IEBCOPY
//SYSPRINT DD SYSOUT=A
//SYSUT1 DD DSN=tape.dataset.name,DISP=(OLD,PASS),
// UNIT=TAPE,VOL=SER=tape#,LABEL=#
//SYSUT2 DD DSN=outpds,DISP=SHR
//SYSIN DD DUMMY
/*
上例是将一个转存为磁带上顺序文件的分区数据集按原有的 DCB 属性恢复到 DASD 上 (假定该分区数据集已经存在)。