LoginSignup
8
4

More than 1 year has passed since last update.

  JCL記載方法まとめ 【初心者編】1

Last updated at Posted at 2021-06-25
以下は、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ステートメントは、ジョブの定義を行う。
 ジョブの名前や以下の、アカウント情報CLASSMSGCLASSMSGLEVELLINESTYPRUNNOTIFY などを指定。

サンプル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. AZ,09の一桁の文字で指定(Z/OS V2R1以降の場合 2~8文字のクラス、ジョブ、グループ名で指定が可能)

  ※ジョブクラスは、ジョブの用途などで決められている。

サンプルJCL(MSGCLASS)

  //TESTJOB3 JOB CLASS=A,MSGCLASS=H

MSGCLASS=class
  1. ジョブログの出力クラスを指定できます。
  2. AZ,09の一桁の文字で指定

  ※ジョブログ(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=(02,01)
  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ステートメントは、ジョブステップの定義を行う。
 ステップ名や以下の、PGMPROC・・・・・・・などを指定。

  ※プロシージャは、処理の単位(ある特定の処理を行うための一連の命令)
  ※ストリーム内プロシージャ(同じジョブ内で繰り返し実行されるステップを定義したもの)
  ※カタログ式プロシージャ(複数のジョブで共有されるプロシージャが独立したメンバー)

サンプル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関連情報サイト様
   http://arteceed.info/
   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
(一部改変)

8
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
4