JCLとは
JCL (Job Control Language) は、メインフレーム上でジョブ(バッチ処理)を実行するために使用されるスクリプト言語。JCLを使用して、システムにジョブの内容や処理方法を指示し、データセットの処理やプログラムの実行を管理します。例えば、ファイル操作やプログラムの起動、データの入出力など、バッチ処理に必要な設定を記述する。
ステートメントとパラメータで構成される。
・ステートメント:
ジョブ内で行われる操作やリソースの指定を指示する命令のこと。1つのステートメントは、命令とそれに関連するパラメーターから成り立つ。JCLには3種類の主要なステートメントが(JOB, EXEC, DD)がある。
・パラメータ:
ステートメントの詳細な実行方法を指定するオプション。パラメーターにはPositional ParameterとKeyword Parameterの2種類がある。たとえば、ジョブの優先順位やデータセットの割り当てに関する情報などが含まれる。
ステートメント
各ステートメントの役割と例
ステートメント | 役割 | 例 |
---|---|---|
JOB | ジョブの開始を指示し、ジョブ名やジョブのリソース(メモリ、時間、優先度など)を定義。ジョブ全体の属性を設定 | //MYJOB JOB (ACCT),'My Job',CLASS=A,MSGCLASS=X |
EXEC | プログラムやプロシージャを実行するためのステートメント。どのプログラムを使用・実行するかを定義 | //STEP1 EXEC PGM=SORT |
DD | Data Definitionの略で、ジョブで使用するデータセットやリソースを指定。データセットの入力、出力先、処理内容を指示 | //SORTIN DD DSN=MY.DATASET.INPUT,DISP=SHR |
パラメータ
PositionalとKeywordパラメータの役割
パラメータ | 役割 |
---|---|
Positional Parameters | パラメーターの順序が決まっており、指定する位置が意味を持つ。JCLでは、CLASS, MSGCLASSといったジョブの属性を順序どおりに指定 |
Keyword Parameters | パラメーター名と値をペアで指定する形式。順序に関係なく指定可能。 |
Syntax
開始行、終了行、コメント行のルールについて
タイプ | 説明 | 例 |
---|---|---|
開始行 | JCLの各ステートメントの識別子で、//で始まる。//の後には、8文字以内のステップ・ジョブ名を記述。その後に命令とパラメーターが続く | //SORT0001 EXEC PGM=SORT |
コメント | //*を使う。JCLの実行には影響を与えず、メモや説明を記述することが可能 | //* This is a comment line |
終了行 | /*を使う。ジョブの定義やデータ入力の終了を示す | //SYSIN DD * INPUT DATA /* |
各ステートメントとパラメータについて
JOBステートメント - 各Keywordパラメーターについて
パラメータ | 説明 | 詳細 |
---|---|---|
CLASS | ジョブの優先度やリソースの割り当てを決定 | AやPなどの文字で指定。Aは通常、対話的ジョブ、Pはバッチジョブ。 |
PRTY | ジョブの優先順位を0〜15で指定。数値が大きいほど優先順位高 | |
NOTIFY | ジョブが終了した際に通知するユーザーIDを指定 | &SYSUIDを使用すると、ジョブをサブミットしたユーザーに通知 |
MSGCLASS | ジョブのメッセージ出力をどこに送るか指定 | Aは印刷用の標準出力。XはユーザーIDに関連付けられた出力 |
MSGLEVEL | 出力されるメッセージのレベルを制御 | 後述 |
TYPRUN | ジョブの実行タイミングを制御 | HOLDはジョブを保留し、SCANはジョブを解析するが実行はしない。 |
TIME | ジョブまたはステップの実行時間制限を指定 | TIME=1440で1日(1440分)まで許可。TIME=0で制限なし。 |
REGION | ジョブまたはステップで使用できるメモリ量を指定 | REGION=4Mなら4メガバイト、REGION=4096Kは同義。 |
MSGLEVELについて
ジョブが実行される際に出力されるメッセージの量を制御するためのパラメーター。
MSGLEVEL=(ステートメントメッセージ, ステップメッセージ)の形式で指定される。
パターン | 説明 |
---|---|
MSGLEVEL=(0,0) | JCLステートメントもステップのメッセージも出力されない。 |
MSGLEVEL=(0,1) | ステップのメッセージのみ出力され、JCLステートメントは出力されない。 |
MSGLEVEL=(1,0) | JCLステートメントは出力されるが、ステップのメッセージは出力されない。 |
MSGLEVEL=(1,1) | JCLステートメントとステップメッセージの両方が出力される。 |
MSGLEVEL=(2,0) | ジョブのすべてのJCLステートメントと入力の詳細が出力され、ステップのメッセージは出力されない。 |
MSGLEVEL=(2,1) | すべてのJCLステートメントとステップメッセージが出力される。 |
EXEXステートメント - 各パラメーターについて
パラメータ | 説明 | 種類 |
---|---|---|
PGM | 実行するプログラム名を指定 | Positional |
PROC | ジョブ内で呼び出すプロシージャを指定 | Positional |
PARM | プログラムに渡す引数を指定 | Keyword |
ACCT | プログラムの実行時に必要なアカウント情報を指定 | Keyword |
TIME | プログラムまたはステップの最大実行時間を指定 | Keyword |
REGION | プログラム実行時に使用可能なメモリ量を指定 | Keyword |
DDステートメント - 各パラメーターについて
パラメータ | 説明 | 種類 |
---|---|---|
* | システムから動的にデータセットを割り当て | Positional |
DUMMY | 実際のデータセットがないか、処理をスキップ | Positional |
DATA | データを直接DDステートメント内に記述 | Positional |
DSN | 使用するデータセット名を指定 | Keyword |
DISP | データセットのステータスと処理方法を指定 | Keyword |
DCB | データセットの属性(レコード形式、レコード長など)を指定 | Keyword |
SPACE | データセットに割り当てるディスクスペースを指定 | Keyword |
UNIT | データセットを格納する装置を指定 | Keyword |
VOL | データセットが格納されるボリュームを指定 | Keyword |
SYSOUT | 出力をシステムまたは指定の場所へ | Keyword |
DISPについて
データセットの状態とアクセス権を指定し、さらに処理が終了したときのデータセットの処理方法を制御。
(データセットの処理開始時の状態, 正常終了時の処理, 異常終了時の処理)
DISの形式 | 説明 |
---|---|
DISP=(NEW,DELETE,DELETE) | 新規データセットを作成し、ジョブが終了後(正常/異常に関わらず)データセットを削除。 |
DISP=(NEW,KEEP,KEEP) | 新規データセットを作成し、ジョブ終了後もデータセットを保持。 |
DISP=(OLD,DELETE,DELETE) | 既存のデータセットに排他アクセスし、ジョブ終了後に削除。 |
DISP=(OLD,KEEP,KEEP) | 既存のデータセットに排他アクセスし、ジョブ終了後も保持。 |
DISP=(SHR,DELETE,DELETE) | 既存のデータセットに共有アクセスし、ジョブ終了後に削除。 |
DISP=(SHR,KEEP,KEEP) | 既存のデータセットに共有アクセスし、終了後も保持。 |
DISP=(MOD,DELETE,DELETE) | データセットを追加モードで開き、ジョブ終了後に削除。 |
DISP=(MOD,KEEP,KEEP) | 既存データセットにデータを追加し、終了後も保持。 |
DISP=PASS | 次のステップにデータセットを引き継ぐ(中間的なジョブやステップで使用)。 |
最後に
一旦、JCLの概要について整理してみました。(不十分だとは思いますが、、、)次はJCLの実行関連についてまとめたいと思います。