全メンバーをそのままコピーする
1 2 3 4 5 6 7 8 9 10 11 |
// JOB Statement //********************************************************************* //* Sample JCL - IEBCOPY //* ==================== //********************************************************************* //IEBCOPY EXEC PGM=IEBCOPY //SYSPRINT DD SYSOUT=* //SYSUT1 DD DISP=SHR,DSN=input dsname //SYSUT2 DD DISP=SHR,DSN=output dsname //SYSIN DD DUMMY // |
まずは基本形、SYSUT1 DDステートメントで定義した区分データセットからSYSUT2 DDステートメントで定義した区分データセットへ、全メンバーをそのままコピーします。同名のメンバーはコピーされません。
1 2 3 |
//SYSIN DD * COPY I=SYSUT1,O=SYSUT2 // |
VOS3ではSYSINカードは省略できず、必ずCOPY制御ステートメントが必要です。
同名のメンバーの上書きコピー
1 2 3 4 5 6 7 8 9 10 11 12 |
// JOB Statement //********************************************************************* //* Sample JCL - IEBCOPY //* ==================== //********************************************************************* //IEBCOPY EXEC PGM=IEBCOPY //SYSPRINT DD SYSOUT=* //SYSUT1 DD DISP=SHR,DSN=input dsname //SYSUT2 DD DISP=SHR,DSN=output dsname //SYSIN DD * COPY I=((SYSUT1,R)),O=SYSUT2 // |
これも基本形ですが、同名のメンバーは上書きコピーされます。
メンバーの選択コピー(以降はSYSIN DDステートメントのみ示します)
1 2 3 4 |
//SYSIN DD * C I=SYSUT1,O=SYSUT2 S M=(mem1,mem2,mem3) // |
メンバーを選択してコピーするなら、このように指定できます。CはCopy、SはSelectです。
特定のメンバーのみを上書きコピーする
1 2 3 4 |
//SYSIN DD * C I=SYSUT1,O=SYSUT2 S M=((membername,,R)) // |
異なるブロック・サイズのデータセット間での、ロード・モジュールのコピー
1 2 3 |
//SYSIN DD * COPYMOD I=SYSUT1,O=SYSUT2 // |
大きなブロック・サイズから小さなブロック・サイズのデータセットへコピーする場合は、このCOPYMODを使用して、出力側データセットのブロック・サイズに合わせて再構成しないと、不完全な形でロード・モジュールがコピーされてしまうことがあります。ロード・モジュールのように不定長レコードを持つ場合、読み出したブロックが4KBあっても、書き出し先データセットのブロック長が2KBしかなければ、先頭の2KB分しかコピーされません。そのため、モジュールの実行時に何が起きるか予測不能になります。(詳細は、MVSメッセージ「IEB175I」の解説を参照)
複数のライブラリーからメンバーを選択してコピーする
1 2 3 4 5 6 7 8 9 |
//IN1 DD DISP=SHR,DSN=dsname1 //IN2 DD DISP=SHR,DSN=dsname2 //OUT DD DISP=(,CATLG),output dsname, // UNIT=SYSDA,VOL=SER=??????,SPACE=(CYL,(??,??,??)) //SYSIN DD * COPY I=(IN1,IN2),O=OUT S M=(mem1,mem2,mem3) S M=(mem4,(mem5,newname5)) // |
複数の入力データセットからメンバーを選択することもできます。STEPを分けて、それぞれ入力データセットを変えてもかまいませんが、こちらの方がスマートです。入力元データセットそれぞれに同名メンバーがある場合、INDDパラメーターで指定された順番でメンバーが見つけられ選択されます。コピーされたメンバーが、どのデータセットから選択されたなど、コピー処理の実行情報がSYSPRINTに出力されます。意図した通りにコピーが行われたかを、このリストで確認できます。
複数のライブラリーに散在しているメンバーを、1つのライブラリーに(メンバーのマージ)まとめたいような時に利用できます。逆に1つの入力ライブラリーから、複数の出力ライブラリーに分散コピーすることもできます。
1 2 3 4 5 6 7 8 9 10 11 |
//IN DD DISP=SHR,DSN=dsname //OUT1 DD DISP=(,CATLG),output dsname1, // UNIT=SYSDA,VOL=SER=??????,SPACE=(CYL,(??,??,??)) //OUT2 DD DISP=(,CATLG),output dsname2, // UNIT=SYSDA,VOL=SER=??????,SPACE=(CYL,(??,??,??)) //SYSIN DD * COPY I=IN,O=OUT1 S M=(mem1,mem2,mem3) COPY I=IN,O=OUT2 S M=(mem4,mem5) // |