スプール
本章では、スプール・データセットとスプールのバックアップについて説明します。
1. 概要
スプールとは、ジョブの実行に必要な入力やジョブの実行によって作成された結果であるスプール・データセットが含まれているボリュームまたはスプール・データセットを使用するオペレーションを意味します。
JCLがサブミットされると、TJESではジョブに一意のJBOIDを割り当てて、JOBQに登録します。その際、割り当てられたJBOIDの名前でスプール・ボリュームにスプール・スペースが割り当てられます。その後、INPJCLというスプール・データセットが作成され、JCLをINPJCLにコピーします。また、INPJCLとマクロを結合してEXPJCLを作成します。以降のジョブの実行では、INPJCLが入力として使用されます。
tjclrunは、JBOIDで作成されたスプール・スペースにJESMSG、JESJCL、SYSMSGという名前のスプール・データセットと、JCLのSYSOUT(SOUT) FDに対するスプール・データセットを作成し、ジョブの実行に使用します。
作成されたスプール・データセットは、tjesmgrまたはOpenFrame Managerを使用して確認できます。
2. スプール・データセット
スプール・データセットは、ジョブが実行される際にデフォルトで作成されるデータセット(INPJCL、EXPJCL、JESMSG、JESJCL、SYSMSG)と、JCLにSOUTとして記述されて作成されるデータセットがあります。
以下は、SOUT.DATA.INデータセットのレコードをソートし、SOUT.DATA.OUTを作成するJCLの例です。
<SORT01 JCL>
¥ JOBG USERGRP ¥ JOB SORT01,LIST=(L,JD) ¥ EX SORT ¥ FD LIST=DA,SOUT=L ¥ FD SORTWK01=DA,TRK=21 ¥ FD SORTWK02=DA,TRK=21 ¥ FD SORTWK03=DA,TRK=21 ¥ FD SORTIN=DA,FILE=SORT.DATA.IN ¥ FD SORTOUT=DA,FILE=SORT.DATA.OUT ¥ FD COIN=* SORT FIELDS=(1,6,CH,A) ¥* ¥ JEND ¥ JGEND
JCL SORT01をサブミットして実行すると、以下のスプール・データセットが作成されます。
SPOOL LIST: --------------------------------------------------------------------------- NO STEP DDNAME SIZE DSNAME --------------------------------------------------------------------------- 0 -------- INPJCL 271 INPJCL 1 -------- SYSMSG 4K SYSMSG 2 -------- EXPJCL 271 EXPJCL 3 -------- JESMSG 1K JESMSG 4 -------- JESJCL 9K JESJCL 5 LIST 1K ROOT.SORT01.JOB00006.D000000
2.1. デフォルトで作成されるスプール・データセット
2.1.1. INPJCL
サブミットされたJCLがコピーされています。
<INPJCL>
¥ JOBG USERGRP ¥ JOB SORT01,LIST=(L,JD) ¥ EX SORT ¥ FD LIST=DA,SOUT=L ¥ FD SORTWK01=DA,TRK=21 ¥ FD SORTWK02=DA,TRK=21 ¥ FD SORTWK03=DA,TRK=21 ¥ FD SORTIN=DA,FILE=SORT.DATA.IN ¥ FD SORTOUT=DA,FILE=(SORT.DATA.OUT,AD) ¥ FD COIN=* SORT FIELDS=(1,6,CH,A) ¥* ¥ JEND ¥ JGEND
2.1.2. EXPJCL
サブミットされたJCLでマクロ処理を行ったJCLがコピーされています。以降のジョブ実行ではEXPJCLの内容を使用します。
<EXPJCL>
¥ JOBG USERGRP ¥ JOB SORT01,LIST=(L,JD) ¥ EX SORT ¥ FD LIST=DA,SOUT=L ¥ FD SORTWK01=DA,TRK=21 ¥ FD SORTWK02=DA,TRK=21 ¥ FD SORTWK03=DA,TRK=21 ¥ FD SORTIN=DA,FILE=SORT.DATA.IN ¥ FD SORTOUT=DA,FILE=(SORT.DATA.OUT,AD) ¥ FD COIN=* SORT FIELDS=(1,6,CH,A) ¥* ¥ JEND ¥ JGEND
2.1.3. JESMSG
ジョブに関連する情報と各ステップの情報が保存されます。
---< JOB INFO >------------------------------------------------------------ JOB ID : JOB00032 NODE NAME : NODE1 JOBG NAME : USERGRP JOB NAME : SORT01 JOB CLASS : A , JOB STATUS : D(R00010) , JOB PRTY : 0 , RUNNER INDEX : 0 JOB USER : ROOT JCL PATH : /home/obmxsp/oframe_new/volume_default/SYS1.JCLLIB/TEST TIME STAMP : SUBM 20120723110515, EXEC 20140723110516, TERM 20140723110518 RES USAGE : CPU - 0s (p:2s) , 0% ---<STEP INFO>------------------------------------------------------------- STEP : [ 1] CPU 0s(p: 5s). LIST JOB00006(ROOT.SORT01.JOB00006.D000000) R:0 W:38 SORTWK01 SYS08175.T234027.RA000.SORT01.R010001 R:0 W:0 SORTWK02 SYS08175.T234027.RA000.SORT01.R010002 R:0 W:0 SORTWK03 SYS08175.T234027.RA000.SORT01.R010003 R:0 W:0 SORTIN SORT.DATA.IN R:10 W:0 SORTOUT SORT.DATA.OUT R:0 W:10 COIN JOB00006(ROOT.SORT01.JOB00006.D000006) R:1 W:0
-
ジョブ情報
以下は、JESMSGに保存されるジョブ情報です。
フィールド 説明 JOB ID
割り当てられたジョブの一意の番号です。
JOBG NAME
ジョブ・グループ名です。
JOB NAME
ジョブ名です。
NODENAME
ジョブが実行されたTJESのノード名です。
JOB CLASS
ジョブ・クラスです。
JOB STATUS
現在のジョブの状態(戻り値)です。
JOB PRTY
実行したジョブのジョブ・スケジューリングの優先順位です。
RUNNER INDEX
ジョブを実行したランナー・スロット番号です。
JOB USER
ジョブを実行したユーザーです。
JCL PATH
ユーザーがサブミットしたJCLファイルの位置とファイル名です。
TIME STAMP
ジョブがサブミットされた時刻とジョブ実行の開始および終了時刻です。
RES USAGE
ジョブの実行に使用されたCPU時間です。
-
CPU
-
0s : tjclrunおよびフォークされたプロセスのCPUの総使用量(現在はプロセスが終了されたのでゼロ)
-
(p:2s) : tjclrunがフォークされた時点から終了されるまでの時間(ジョブの実行時間)
-
0% : ジョブの実行時間比のCPU使用率
-
-
ステップ情報
以下は、JESMSGに保存されるステップ情報です。
フィールド 説明 STEP
ジョブ・ステップ名です。名前が指定されていないステップの場合は、ステップ番号を出力します。
CPU
ジョブ・ステップ処理に使用されたCPU時間です。(CPU時間: 実際の処理時間)
LIST
ジョブ・ステップで発生したLISTの入出力カウントです。
SORTWK01
ジョブ・ステップで発生したSORTWK01の入出力カウントです。
SORTWK02
ジョブ・ステップで発生したSORTWK02の入出力カウントです。
SORTWK03
ジョブ・ステップで発生したSORTWK03の入出力カウントです。
SORTIN
ジョブ・ステップで発生したSORTINの入出力カウントです。
SORTOUT
ジョブ・ステップで発生したSORTOUTの入出力カウントです。
COIN
ジョブ・ステップで発生したCOINの入出力カウントです。
2.1.4. JESJCL
INPJCLに対してJCL文のパース・ツリー(parse tree)が保存されます。
<JESJCL>
======================================================================== ¥ JOBG[name=]={ |lineno=1 |param[position=1]={ | |type=VAL_STR | |value=[USERGRP] |} |---------- child statements ---------- |¥ JOB[name=]={ | |lineno=2 | |param[position=1]={ | | |type=VAL_STR | | |value=[SORT01] | |} | |param[keyword=LIST]={ | | |type=VAL_SUBPARAMS | | |value={ | | | |param[position=1]={ | | | | |type=VAL_STR | | | | |value=[L] | | | |} | | | |param[position=2]={ | | | | |type=VAL_STR | | | | |value=[JD] | | | |} | | |} | |} | |---------- child statements ---------- | |¥ EX[name=]={ | | |lineno=3 | | |param[position=1]={ | | | |type=VAL_STR | | | |value=[SORT] | | |} | |} | |¥ FD[name=]={ | | |lineno=4 | | |param[keyword=LIST]={ | | | |type=VAL_STR | | | |value=[DA] | | |} | | |param[keyword=SOUT]={ | | | |type=VAL_STR | | | |value=[L] | | |} ..
2.1.5. SYSMSG
ジョブの実行中にtjclrunが作成したメッセージを保存します。
<SYSMSG>
JOBID=JOB00032 JOBPOS=0 RUNPID=30176 SORT01 JOB ---------------------------------- EX step ---------------------------------- (JRN2258I) COIN FD SHUNT - FILENAME=JOB00032(ROOT.SORT01.JOB00032.D000006) (JRN2905I) Now allocate(JOB00032) step: fd:SYSPRINT (JRN2910I) LIST FD ALLOCATED - FILENAME=JOB00032(ROOT.SORT01.JOB00032.D000000) (JRN2905I) Now allocate(SYS12205.T110516.RA000.SORT01.R010001) step: fd:SORTWK01 (JRN2909I) SORTWK01 FD ALLOCATED - FILENAME=SYS12205.T110516.RA000.SORT01.R010001 (JRN2905I) Now allocate(SYS12205.T110516.RA000.SORT01.R010002) step: fd:SORTWK02 (JRN2909I) SORTWK02 FD ALLOCATED - FILENAME=SYS12205.T110516.RA000.SORT01.R010002 (JRN2905I) Now allocate(SYS12205.T110516.RA000.SORT01.R010003) step: fd:SORTWK03 (JRN2909I) SORTWK03 FD ALLOCATED - FILENAME=SYS12205.T110516.RA000.SORT01.R010003 (JRN2905I) Now allocate(SORT.DATA.IN) step: fd:SORTIN (JRN2909I) SORTIN FD ALLOCATED - FILENAME=SORT.DATA.IN (JRN2905I) Now allocate(SORT.DATA.OUT) step: fd:SORTOUT (JRN2909I) SORTOUT FD ALLOCATED - FILENAME=SORT.DATA.OUT (JRN2905I) Now allocate(JOB00032) step: fd:COIN (JRN2910I) COIN FD ALLOCATED - FILENAME=JOB00032(ROOT.SORT01.JOB00032.D000006) (JRN2012I) SYSOUT open LIST ok (JRN2011I) SYSIN open COIN ok (JRN2335I) SORTOUT FD in exported (JRN2335I) SORTIN FD in exported (JRN2335I) SORTWK03 FD in exported (JRN2335I) SORTWK02 FD in exported (JRN2335I) SORTWK01 FD in exported (JRN0056I) coprocess child: argv[0]=SORT (JRN0058I) pgm pid=30184 (JRN0060I) Entering exec_pipe_loop() ... (JRN2010I) SYSIN write ok (JRN2011I) child program is SORT ok (JRN0245I) PGM closed stdout pipe (JRN0061I) Leaving exec_pipe_loop() ... (JRN0063I) pipe work done with coprocess child (PGM) (JRN0080I) PGM pid[30184] EXITED (JRN0065I) EXEC PGM step done with RC=10 (JRN2012I) LIST FD disposed - NORMAL ok (JRN2012I) SORTWK01 FD disposed - NORMAL ok (JRN2012I) SORTWK02 FD disposed - NORMAL ok (JRN2012I) SORTWK03 FD disposed - NORMAL ok (JRN2012I) SORTIN FD disposed - NORMAL ok (JRN2012I) SORTOUT FD disposed - NORMAL ok (JRN2012I) COIN FD disposed - NORMAL ok ------------------------------ DATA SET DISPOSE ------------------------------ --------------------------- DATA SET UNALLOCATION ---------------------------- (JRN2012I) COIN FD unallocated - NORMAL ok (JRN2012I) SORTOUT FD unallocated - NORMAL ok (JRN2012I) SORTIN FD unallocated - NORMAL ok (JRN2012I) SORTWK03 FD unallocated - NORMAL ok (JRN2012I) SORTWK02 FD unallocated - NORMAL ok (JRN2012I) SORTWK01 FD unallocated - NORMAL ok (JRN2012I) LIST FD unallocated - NORMAL ok (JRN0333I) JOB is enqueued for output processing - JOBID=JOB00032, ABEND=0
2.2. JCLでSYSOUTに定義されているスプール・データセット
主にJCLに記述されているユーティリティやアプリケーションでアウトプットとして使用されます。この例では、SORTユーティリティが実行中に発生したメッセージを保存するLIST文に対してスプール・データセットが作成されています。
< SYSPRINT ROOT.SORT01.JOB00032.D000000>
dfsort version 7.3.0(0) tmaxsoft@openframe:ofsrc73/batch(#1) 2012-04-17 09:57:32 110517 M SRT0001M parsing starts. 110517 M SRT0002M parsing finishes. <<PROSORT SCRIPT>> DEFREC FIXED,SIZE=80 DATASIZE 1M MEMORY 512M WORKSPACE = ( /home/tmaxsoft/openframe/temp) SORT FIELDS=(1,6,CH,A) 110517 U MSGXXXXU 0 records are released 110517 U MSGXXXXU 0 records are returned 110517 M SRT3002M sorting finishes. 110517 M SRT9002M 0 records are written.
3. スプール・バックアップ
JOBQから不要になったジョブを削除すると、対応するスプールも削除されます。スプールを保存する必要がある場合は、スプールのバックアップ機能を使用します。
SPOOL BACKUPコマンドを実行すると、OpenFrame環境設定のtjesサブジェクトのSPOOLセクションのSPOOL_BACKUP_DIRキーのVALUE項目に設定されたバックアップ・ディレクトリに現在の日付でディレクトリが作成されます。
また、このディレクトリにバックアップされたジョブに対し、対応するスプールを圧縮してJOBID_JOBNAME_submitDATE_submitTIME.tar.gz形式のファイルを作成した後、JOBQとスプールからバックアップされたジョブを削除します。OpenFrame環境設定のtjesサブジェクトのSPOOLセクションのSPOOL_UNPACK_DIRキーのVALUE項目に設定されたディレクトリに圧縮されたJOBID_JOBNAME_submitDATE_submitTIME.tar.gzファイルを解凍し、バックアップされたスプールを確認することができます。
スプールのバックアップが可能なジョブの状態は、DONE、ERROR、STOP、FLUSHです。
|