以下は、JCLもQiitaも初心者が記載する自分のメモ
はじめに
【JCL(Job Control Language) = ジョブ制御言語】とは
メインフレームという大型の汎用機にて使用される
OSにCOBOL(コボル) やPL/I(ピーエルワン)などの
プログラムの実行、そのプログラムが必要とする
入出力の設定等指示する言語です。
このメモは、JCLの基本的な記載方法のまとめです。
①基本的な文法
サンプルJCL(基本的な文法)
1・・・ //TESTJOB JOB MSGCLASS=H
2・・・ //STEP01 EXEC PGM=TESTPGM
3・・・ //INPUT DD DSN=TESTDATA,DISP=SHR
4・・・ //SYSOUT DD SYSOUT=*
(1) IDフィールド(1桁目~2桁目に記載)
基本的にはIDフィールドは「//」。
(2) 名前フィールド(3桁目~11桁目に記載)
以下で紹介するJCLのステートメントの名前等を記載する。
サンプルでいうと
1・・・「TESTJOB(ジョブの名前)」と
2・・・「STEP01(ステップ名)」の部分
(3) 命令フィールド(名前フィールドの後に記載)
ステートメントを記載する。
サンプルでいうと
1・・・「JOB」と
2・・・「EXEC」の部分
(4) パラメータフィールド(命令フィールドの後に記載)
ステートメントのパラメータを記載する。
サンプルでいうと
1・・・「MSGCLASS=H」と
2・・・「PGM=TESTPGM」の部分
②ジョブの定義(JOBステートメント)
JOBステートメントは、ジョブの定義を行う。
ジョブの名前や以下の、アカウント情報・CLASS・MSGCLASS・MSGLEVEL・LINES・TYPRUN・NOTIFY などを指定。
サンプルJCL(ジョブ名)
//TESTJOB JOB,MSGCLASS=H
・__TESTJOB__はジョブの名前
1. 1~8文字の英数字または各国用文字 (#@¥)など
サンプルJCL(アカウント情報)
//TESTJOB1 JOB(ACCTINFO,SUBAINFO),PROGRAMMER,MSGCLASS=H
・アカウント情報
1. (ACCTINFO,SUBAINFO) 省略可能な業務識別情報(所属など)
2. PROGRAMMER 省略可能なプログラマ名(作成者など)
サンプルJCL(CLASS)
//TESTJOB2 JOB CLASS=A,MSGCLASS=H
・CLASS=class
1. ジョブに実行ジョブクラスを割り当てる指定できます。
2. A~Z,0~9の一桁の文字で指定(Z/OS V2R1以降の場合 2~8文字のクラス、ジョブ、グループ名で指定が可能)
※ジョブクラスは、ジョブの用途などで決められている。
サンプルJCL(MSGCLASS)
//TESTJOB3 JOB CLASS=A,MSGCLASS=H
・MSGCLASS=class
1. ジョブログの出力クラスを指定できます。
2. A~Z,0~9の一桁の文字で指定
※ジョブログ(JCLステートメント、割り振りメッセージ、終了メッセージ)
※終了メッセージ ジョブの終了時に行われるデータセットの後始末処理について知らせるために出力
例「
IEF237IALLOC.FOR JCL001 ASM STEP01
・
・
IEF237I JCL001 ASM STEP01 -STEP WAS EXECTED - COND CODE 0000
」
※割り振りメッセージ OSがジョブの制御のために確保したデータセット資源をユーザに知らせるために出力
例「
IEF237I SYS1.MACLIB KEEP
IEF237I VOL SER = MVSRES
・
・
IEF285I JES2.JOB00721.S00102 SYSOUT
」
サンプルJCL(MSGLEVEL)
//TESTJOB4 JOB CLASS=A,MSGCLASS=H,MSGLEVEL=(1,1)
・MSGLEVEL=(0~2,0~1)
1. ジョブログに出力される内容を指定する。
2. 一つ目は0~2の一桁の文字で、入力JCLの印刷範囲を指定
0:JCL中のJOBステートメントのみ出力
1:すべてのJOBステートメントを出力
2:入力JCL中に記述されたステートメントのみ出力
3. 二つ目は0~1の一桁の文字で、割り振り状況の出力有無
0:異常終了時のみメッセージを出力
1:正常終了時もメッセージを出力
サンプルJCL(LINES)
//TESTJOB5 JOB CLASS=A,MSGCLASS=H,LINES=(10,CANCEL)
・LINES=(nnnnnn,CANCEL)
1. SYSOUTデータセットの最大値を、千行単位で指定します。
2. CANCELオプションを指定すると、ジョブの実行を打ち切る。
3. 上記の場合は、一万行を超えると、ジョブは異常終了する
サンプルJCL(TYPRUN)
//TESTJOB6 JOB CLASS=A,MSGCLASS=H,TYPRUN=HOLD
・TYPRUN=HOLD or SCAN or COPY or JCLHOLD
ジョブの特殊処理を指定する。
1. HOLD(保留) オペレータがジョブを解放するまで、そのジョブは実行されないで待ち行列に保留されるように指示。
2. SCAN 構文の誤りを見つけるためにJCLステートメントを操作するだけで実行はしないことを指示。
3. COPY(JES2のみ) 入力ジョブストリームを SYSOUT データセットにコピーする。
4. JCLHOLD(JES2のみ) 構文の誤りを見つけるためにJCLステートメントを操作するだけで実行はしないことを指示。保留が解かれたら構文チェックするため、サブミット時点のプロシージャの内容で実行されるとは限らない。
※ジョブストリーム 実行される一連のジョブと、処理順序を決める時刻、優先順位、その他の依存関係のことです。
※SYSOUTデータセット(プログラムの実行結果などを格納する特別なスプール内のデータ)
詳細は参考文献:サイト様の「SYSOUTデータセットとは」を参照。
サンプルJCL(PRTY)
//PRESRPT OUTPUT PRTY=200,FORMS=TOPSEC
・PRTY=nnn (nnn 優先順位)
1. ジョブクラス内での選択優先順位を指定する
2. 初期の優先順位を指定します。nnn は、0 から 255 までの 10 進数です。
0 が最も低い優先順位で、255 が最高です。
この例では、JES は、社長の報告書 (PRESRPT) のコピーを 1 つ、TOPSEC という
名前の用紙に印刷します。優先順位を 200 と指定したので、報告書はおそらく出力
キューに入ると即座に印刷されます。
サンプルJCL(NOTIFY)
//TESTJOB7 JOB CLASS=A,MSGCLASS=H,NOTIFY=USERNAME
・NOTIFY=user (userはログオンID)
ジョブの完了時に、完了メッセージをユーザのTSO端末に送るように指示します。
userの部分に&SYSUIDを指定し、SUBMITするとそのJOBの実行ユーザにメッセージが送られる
※サブミット(JCLをリーダINTRDR:Internal reader = 内部読み取りプログラムへ投入することでジョブがスケジュールされる)
詳細は参考文献:サイト様の「INTRDR」を参照。
※TSO端末(Time Sharing Option)IBMによるMVS(OS)対応の主要開発環境マネージャ。
詳細は参考文献:サイト様の「11.TSOとISPF」を参照。
③ステップの定義(EXECステートメント)
ジョブステップの始まりを示します。(またはプロシージャー内の各ステップ)
一つのJOBに対して複数のEXECステートメントを記述することができます。
EXECステートメントは、ジョブステップの定義を行う。
ステップ名や以下の、PGM・PROC・・・・・・・などを指定。
※プロシージャは、処理の単位(ある特定の処理を行うための一連の命令)
※ストリーム内プロシージャ(同じジョブ内で繰り返し実行されるステップを定義したもの)
※カタログ式プロシージャ(複数のジョブで共有されるプロシージャが独立したメンバー)
サンプルJCL(ステップ名)
//STEP02 EXEC PGM=PGMNAME
・STEP02 は ステップ名
1. 1~8文字の英数字または各国用文字 (#@¥)など
サンプルJCL(PGM)
//STEP03 EXEC PGM=PGMNAME
・PGM=PGMNAME は プログラム名
1. ステップで実行するプログラムのロードモジュール名を指定する。
サンプルJCL(PROC)
//STEP04 EXEC PROC=IBMZC
・PROC=IBMZC は プロシージャ名
1. ステップで実行するプロシージャー名を指定する。
サンプルJCL(JOBLIB)
//TESTJOB8 JOB CLASS=A,MSGCLASS=H
//JOBLIB DD DISP=SHR,DSN=TESTDATA.ALOAD
//STEP05 EXEC PGM=TESTPGM1
・JOBLIB は ジョブ全体で使用するライブラリーを指定するDD
1. 定義する場所は、JOBステートメントの後 かつ EXECステートメントの前に定義する。
サンプルJCL(STEPLIB)
//TESTJOB8 JOB CLASS=A,MSGCLASS=H
//JOBLIB DD DISP=SHR,DSN=TESTDATA.ALOAD
//STEP06 EXEC PGM=TESTPGM2
//STEP07 EXEC PGM=TESTPGM3
//STEPLIB DD DISP=SHR,DSN=TESTDATA.SLOAD
・STEPLIB は このステップだけで使用するライブラリーを指定するDD
1. 定義する場所は、EXECステートメントの後に定義する。
2. JOBLIBとSTEPLIBが両方指定された場合は、STEPLIBだけが使用される。
(上記の場合は
STEP06のPGM0002は、STEPLIBがないので、JOBLIBのTESTDATA.ALOAD
STEP07のPGM0003は、STEPLIBのTESTDATA.ALOAD が参照される
)
サンプルJCL(JCLLIB)
//TESTJOB9 JOB CLASS=A,MSGCLASS=H
// JCLLIB ORDER=(TESTDATA.1LIB,
TESTDATA.2LIB,TESTDATA.3LIB)
//JOBLIB DD DISP=SHR,DSN=TESTDATA.ALOAD
//*
//STEP08 EXEC PROC1
・JCLLIB ORDER=(TESTDATA.1LIB,TESTDATA.2LIB,TESTDATA.3LIB)
1. PROCパラメータで指定した、プロシージャがカタログ式プロシージャの場合、プロシージャメンバーが格納されているデータセットを定義
2. 定義する場所は、JOBステートメントの後 かつ EXECステートメントの前に定義する。
※//* 注釈ステートメント(出力リストにコメントを記述するために使用します)
サンプルJCL(PARM)
//STEP09 EXEC PGM=TESTPGM,PARM=ABCDEFG
・PARM=ABCDEFG
1. PGMで指定したプログラムに渡す可変情報を指定(引数)
サンプルJCL(PARMMD)
//STEP10 EXEC PGM=TESTPGM,PARMMD=PROGPARM
//PROGPARM DD *
AAA ~ BBB
CCC ~ DDD
ZZZ(100文字以上)
/*
・PARMMD=PROGPARM
1. パラメータ文字列が100文字を超える場合は、任意のDD名の順次データセットを組み合わせる(Z/OS V2R1以降の場合)
※/* 区切りステートメント(入力ストリーム内のデータの末尾または転送レコードの終わりを示すために使用します)
サンプルJCL(COND=(コード,演算子))
//STEP11 EXEC PGM=TESTPGM,COND=(0,NE)
1. ステップの実行をスキップする条件を指定
・COND=(コード,演算子)
2. 復帰コード(ジョブステップが終了したあとにOSによって戻される、実行結果)
3. 演算子
EQ :コードが、復帰コードに等しい(コード=復帰コード)
NE :コードが、復帰コードに等しくない(コード!
=復帰コード)
GT :コードが、復帰コードにより大きい(コード>復帰コード)
GE :コードが、復帰コードにより大きい または 等しい(コード>=復帰コード)
LT :コードが、復帰コードにより小さい(コード<復帰コード)
LE :コードが、復帰コードにより小さい または 等しい(コード<=復帰コード)
上記の場合は、先行ステップの復帰コードがゼロでない場合は、STEP11は実行されない。
サンプルJCL(COND=(コード,演算子,ステップ名))
//STEP12 EXEC PGM=TESTPGM,COND=(4,LT,STEP22)
・COND=(コード,演算子,ステップ名)
上記の場合は、コード(4)がSTEP22の復帰コード より
小さい場合は、STEP12は実行されない。
( STEP22の復帰コード が 4なら
STEP12は実行される
STEP22の復帰コード が 5,6なら
STEP12は実行されない )
// IF STEP22.RC <= 4 THEN
//STEP12 EXEC PGM=TESTPGM
// ENDIF
・IF/THEN/ELSE/ENDIF ステートメント構文
上記の場合は、STEP22の復帰コード が4以下の場合は、
THEN~ENDIF間のステップ(STEP12)を実行する。
サンプルJCL(COND 特殊なパラメータ)
//STEP12 EXEC PGM=TESTPGM,COND=EVEN,PARM=0
※特殊なパラメータ
・COND=EVEN・・・先行するステップが異常終了した場合でも、ジョブステップを実行する。
・COND=ONLY・・・先行するステップが異常終了した場合のみ、ジョブステップを実行する。
サンプルJCL(REGION)
//STEP13 EXEC PGM=TESTPGM,REGION=120K
・REGION=値
1. プログラムを実行するのに使用するメモリーを指定
上記の場合は、120K バイトの領域を割り当てます。
サンプルJCL(MEMLIMIT)
//STEP14 EXEC PGM=TESTPGM,MEMLIMIT=10000M
・MEMLIMIT=値
1. このジョブステップは、2 GB を超える
64ビット仮想ストレージの利用限度を指定する。
上記の場合は10000M バイトと指定しています。(Z/OS V2R1以降の場合)
サンプルJCL(TIME)
//STEP15 EXEC PGM=TESTPGM,TIME=(12,10)
・TIME=値
1. ジョブがCPUを使用できる最大の時間を指定する。
2. 上記の場合は 12分 10 秒であると指定しています。
次回:JCL記載方法まとめ 【初心者編】2
https://qiita.com/nano357/items/39ae7edaf31bbe1b3619
参考文献
JCL関連情報サイト様
https://arteceed.squares.net/
http://yfuku.sakura.ne.jp/mvs/mvsindex.html
http://superbassist.fc2web.com/hp2/study/jcl/jclb.html
MVS JCL 解説書 - IBM Documentation:正式な構文等は以下を参照
https://www.ibm.com/docs/ja/zos/2.3.0?topic=SSLTBW_2.3.0/com.ibm.zos.v2r3.ieab600/toc.htm
原典:日本アイ・ビー・エム株式会社
GC28-1757-00
OS/390 MVS JCL Reference
(一部改変)
OS/VS2 MVS JCL
(一部改変)