Jcl-defining-datasets

提供:Dev Guides
移動先:案内検索

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バージョンが動的に置き換えられます。