Jcl-defining-datasets
JCL-データセットの定義
データセット名はファイルの名前を指定し、JCLのDSNで示されます。 DSNパラメーターは、新規作成または既存のデータセットの物理データセット名を参照します。 DSN値は、ピリオドで区切られた1〜8文字の長さのサブ名と、44文字(英数字)の合計長で構成できます。 構文は次のとおりです。
DSN=&name | *.stepname.ddname
一時データセット*は、ジョブの期間だけストレージを必要とし、ジョブの完了時に削除されます。 そのようなデータセットは、 *DSN =&name として、または単にDSNを指定せずに表されます。
ジョブステップによって作成された一時データセットが次のジョブステップで使用される場合、 DSN = 。stepname.ddname *として参照されます。 これは*後方参照*と呼ばれます。
データセットの連結
同じ形式のデータセットが複数ある場合、それらを連結して、単一のDD名でプログラムへの入力として渡すことができます。
//CONCATEX JOB CLASS=6,NOTIFY=&SYSUID
//*
//STEP10 EXEC PGM=SORT
//SORTIN DD DSN=SAMPLE.INPUT1,DISP=SHR
// DD DSN=SAMPLE.INPUT2,DISP=SHR
// DD DSN=SAMPLE.INPUT3,DISP=SHR
//SORTOUT DD DSN=SAMPLE.OUTPUT,DISP=(,CATLG,DELETE),
// LRECL=50,RECFM=FB
上記の例では、3つのデータセットが連結され、SORTIN DD名でSORTプログラムへの入力として渡されます。 ファイルはマージされ、指定されたキーフィールドでソートされ、SORTOUT DD名の単一の出力ファイルSAMPLE.OUTPUTに書き込まれます。
データセットのオーバーライド
標準化されたJCLでは、実行されるプログラムとその関連データセットは、JCLで呼び出されるカタログ式プロシージャ内に配置されます。 通常、テスト目的またはインシデント修正のために、カタログ式手順で指定されたデータセット以外の異なるデータセットを使用する必要がある場合があります。 その場合、プロシージャ内のデータセットはJCLでオーバーライドできます。
//SAMPINST JOB 1,CLASS=6,MSGCLASS=Y,NOTIFY=&SYSUID
//*
//JSTEP1 EXEC CATLPROC,PROG=CATPRC1,DSNME=MYDATA.URMI.INPUT
// DATAC=MYDATA.BASE.LIB1(DATA1)
//STEP1.IN1 DD DSN=MYDATA.OVER.INPUT,DISP=SHR
//*
//* The cataloged procedure is as below:
//*
//CATLPROC PROC PROG=,BASELB=MYCOBOL.BASE.LIB1
//*
//STEP1 EXEC PGM=&PROG
//STEPLIB DD DSN=&BASELB,DISP=SHR
//IN1 DD DSN=MYDATA.URMI.INPUT,DISP=SHR
//OUT1 DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//SYSIN DD MYDATA.BASE.LIB1(DATA1),DISP=SHR
//*
//STEP2 EXEC PGM=SORT
上記の例では、データセットIN1は、PROCのファイルMYDATA.URMI.INPUTを使用します。これは、JCLでオーバーライドされます。 したがって、実行で使用される入力ファイルはMYDATA.OVER.INPUTです。 データセットはSTEP1.IN1として参照されることに注意してください。 JCL/PROCに1つのステップしかない場合は、DD名だけでデータセットを参照できます。 同様に、JCLに複数のステップがある場合、データセットはJSTEP1.STEP1.IN1としてオーバーライドされます。
//SAMPINST JOB 1,CLASS=6,MSGCLASS=Y,NOTIFY=&SYSUID
//*
//STEP EXEC CATLPROC,PROG=CATPRC1,DSNME=MYDATA.URMI.INPUT
// DATAC=MYDATA.BASE.LIB1(DATA1)
//STEP1.IN1 DD DSN=MYDATA.OVER.INPUT,DISP=SHR
// DD DUMMY
// DD DUMMY
//*
上記の例では、IN1で連結された3つのデータセットのうち、最初のデータセットはJCLでオーバーライドされ、残りはPROCに存在するものとして保持されます。
JCLでのGDGの定義
生成データグループ(GDG)は、共通の名前で相互に関連付けられたデータセットのグループです。 共通名はGDGベースと呼ばれ、ベースに関連付けられた各データセットはGDGバージョンと呼ばれます。
たとえば、MYDATA.URMI.SAMPLE.GDGはGDGベース名です。 データセットには、MYDATA.URMI.SAMPLE.GDG.G0001V00、MYDATA.URMI.SAMPLE.GDG.G0002V00などの名前が付けられます。 GDGの最新バージョンはMYDATA.URMI.SAMPLE.GDG(0)と呼ばれ、以前のバージョンは(-1)、(-2)などと呼ばれます。 プログラムで作成される次のバージョンは、JCLでMYDATA.URMI.SAMPLE.GDG(+1)として参照されます。
JCLでGDGを作成/変更する
GDGバージョンは、同じまたは異なるDCBパラメーターを持つことができます。 初期モデルDCBは、すべてのバージョンで使用されるように定義できますが、新しいバージョンを作成するときにオーバーライドできます。
//GDGSTEP1 EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
DEFINE GDG(NAME(MYDATA.URMI.SAMPLE.GDG) -
LIMIT(7) -
NOEMPTY -
SCRATCH)
/*
//GDGSTEP2 EXEC PGM=IEFBR14
//GDGMODLD DD DSN=MYDATA.URMI.SAMPLE.GDG,
// DISP=(NEW,CATLG,DELETE),
// UNIT=SYSDA,
// SPACE=(CYL,10,20),
// DCB=(LRECL=50,RECFM=FB)
//
上記の例では、IDCAMSユーティリティは、SYSIN DDステートメントで渡される以下のパラメーターを使用してGDGSTEP1のGDGベースを定義します。
- NAME は、GDGベースの物理データセット名を指定します。
- LIMIT は、GDGベースが保持できるバージョンの最大数を指定します。
- EMPTY は、LIMITに達するとすべての世代をカタログ解除します。
- NOEMPTY は、最も新しい世代をカタログ解除します。
- SCRATCH は、カタログ化されていない世代を物理的に削除します。
- NOSCRATCH はデータセットを削除しません。つまり、UNITおよびVOLパラメーターを使用して参照できます。
GDGSTEP2では、IEFBR14ユーティリティーは、すべてのバージョンで使用されるモデルDDパラメーターを指定します。
IDCAMSを使用して、LIMITの増加、EMPTYのNOEMPTYへの変更など、GDGの定義パラメーターを変更できます。SYSINコマンドを使用する関連バージョンは ALTER MYDATA.URMI.SAMPLE.GDG LIMIT(15)EMPTY です。
JCLでGDGを削除する
IEFBR14ユーティリティを使用して、GDGの単一バージョンを削除できます。
//GDGSTEP3 EXEC PGM=IEFBR14
//GDGDEL DD DSN=MYDATA.URMI.SAMPLE.GDG(0),
// DISP=(OLD,DELETE,DELETE)
上記の例では、MYDATA.URMI.SAMPLE.GDGの最新バージョンが削除されます。 通常のジョブ完了のDISPパラメーターはDELETEとしてコーディングされていることに注意してください。 したがって、ジョブの実行が完了すると、データセットは削除されます。
IDCAMSは、SYSINコマンド DELETE(MYDATA.URMI.SAMPLE.GDG)GDG FORCE/PURGE を使用して、GDGおよびその関連バージョンを削除するために使用できます。
- FORCE は、GDGバージョンとGDGベースを削除します。 GDGバージョンのいずれかに有効期限が設定されており、まだ有効期限が切れていない場合、それらは削除されないため、GDGベースが保持されます。
- PURGE は、有効期限に関係なく、GDGバージョンとGDGベースを削除します。
JCLでGDGを使用する
次の例では、MYDATA.URMI.SAMPLE.GDGの最新バージョンがプログラムへの入力として使用され、MYDATA.URMI.SAMPLE.GDGの新しいバージョンが出力として作成されます。
//CNDSAMP JOB CLASS=6,NOTIFY=&SYSUID
//*
//STP01 EXEC PGM=MYCOBB
//IN1 DD DSN=MYDATA.URMI.SAMPLE.GDG(0),DISP=SHR
//OUT1 DD DSN=MYDATA.URMI.SAMPLE.GDG(+1),DISP=(,CALTG,DELETE)
// LRECL=100,RECFM=FB
ここで、GDGがMYDATA.URMI.SAMPLE.GDG.G0001V00などの実際の名前で参照されていた場合、実行前に毎回JCLを変更することになります。 (0)と(+1)を使用すると、実行のためにGDGバージョンが動的に置き換えられます。