ISPF同様、SDSFもバッチで利用することができます。
DAパネルで表示されるジョブ一覧は、簡易版としてRMFモニターⅡの代わりにすることもできますし、特定のジョブのSYSOUT内容をバックグラウンドでコピーしたりできます。XWTRではSYSOUTはスプールからパージされてしまうので、MOVEではなくCOPYで処理したい時などは役に立ちます。
バッチSDSFの基本的なJCL
1 2 3 4 5 6 7 8 9 10 11 12 |
//ISFBATCH JOB (acct),name,CLASS=A,MSGCLASS=B,REGION=4M //********************************************************************* //* SDSF BACTH SESSION //* =========================================== //********************************************************************* //TSOBATCH EXEC PGM=SDSF,PARM='++0060,0120' //ISFOUT DD SYSOUT=* //ISFIN DD * PRE * DA // // |
PARMで指定しているのは、ISFOUTに出力されるバッチ出力用画面の幅と長さです。例では60行120桁の画面サイズになります。ISFINに使いたいSDSFのコマンドを入力順に定義します。例ではPRE *を入力してから、DAパネルを表示します。実行中のすべてのジョブの一覧を作ることになります。
ジョブのSYSOUTを順次編成データセットにコピーする
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
//ISFBATCH JOB (acct),name,CLASS=A,MSGCLASS=B,REGION=4M //********************************************************************* //* SDSF BACTH SESSION //* =========================================== //********************************************************************* //TSOBATCH EXEC PGM=SDSF //WORKPS DD DISP=(,CATLG),DSN=TMP1.WORKPS, // UNIT=SYSALLDA,VOL=SER=WORK03,SPACE=(CYL,(1,1)), // DCB=(DSORG=PS,RECFM=FB,BLKSIZE=0,LRECL=133) //ISFOUT DD SYSOUT=* //ISFIN DD * ST jobname SELECT jobname JOBnnnnn FIND jobname ++? FILTER STEPNAME stepname FIND ddname ++S PT FILE WORKPS PT PT CLOSE // // |
ジョブのSYSOUTデータセットを順次編成データセットにコピーする例です。
アクション文字は++を使って入力できます。STコマンドとSELECTでターゲットのジョブを絞り込み、アクション文字「?」でSYSOUTリストを表示させたら、FILTERコマンドで目的のSYSOUTデータセットを絞り込んでいます。FINDコマンドは++コマンドでアクション文字を入力するために使用しています。
SYSOUTの内容が表示されたら、PTコマンドで順次データセットにコピーします。出力先データセットはDD名で指定しています。出力先データセットは可変長形式でもかまいません。DCB=(DSORG=PS,RECFM=VB,BLKSIZE=0,LRECL=258)一般的にSYSOUTは印刷データなので、行末空白が多く、同じ内容のデータなら固定長より可変長の方がスペース量を減らせます。
しかし、同じことがあなたのユーザーIDだとTSO/ISPFではできても、バッチでは上手く行かないかも知れません。もしPRE *コマンドがNOT AUTHORIZEDになったり、自ユーザーIDで始まるジョブしか選択できないなら、ISFPARMSをバッチ用にカスタマイズしてトライしてみます。
バッチSDSF用ISFPARMSを作る
①ISFPARMSパラメータ・ソースをSDSFライブラリからコピーする。
SDSFによって標準提供されているパラメータ・ソースであるISFPARMSをSDSFライブラリから、適当なデータセットにコピーします。ISFPARMSは以下のデータセットに入っています。名称はIBMの標準名ですが、導入先によっては名称が変更されている場合があります。
DSN=ISF.SISFSRC(メンバー名=ISFPARMS)
②コピーしたISFPARMSパラメータ・ソースを修正する。
ソース内の「SYSTEM PROGRAMMERS」用ISFGRP定義を探します。
1 2 |
ISFSPROG ISFGRP TSOAUTH=(JCL,OPER,ACCT), - AUTH=(LOG,I,O,H,DA,DEST,PREF,SYSID,ABEND,ACTION, - |
ラベル名はISFSPROG、TSOAUTH=パラメータにACCTが含まれたISFGRP定義です(※ラベル名はSDSFのリリースレベルによっては変更されているかも知れません)。見つかった「SYSTEM PROGRAMMERS」用ISFGRP定義のISFGRPマクロで指定されているTSOAUTH=パラメータを以下のように修正します。
1 2 |
ISFSPROG ISFGRP TSOAUTH=(JCL), - AUTH=(LOG,I,O,H,DA,DEST,PREF,SYSID,ABEND,ACTION, - |
TSOAUTH=パラメータをTSOAUTH=(JCL)に変更します。変更したらSAVEします。
※修正するメンバーはコピーしたものです。修正前の定義をコメントで残す必要はありません。また修正後の定義はあなたのバッチSDSFでのみ使用される専用パラメータになるため、既存のTSOユーザーおよび他のバッチJOBによるSDSF呼び出しには影響を与えません。
ISFPARMSの詳細に関しては、IBM社のマニュアル「システム表示/検索機能(SDSF) オペレーションおよびカスタマイズ」を参照します。
③コピーしたISFPARMSパラメータ・ソースをアセンブルしてISFPARMSモジュールを生成する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
//ASM EXEC PGM=ASMA90,PARM=('OBJ,NODECK,XREF(SHORT),TERM,RLD,ASA') //SYSPRINT DD SYSOUT=* //SYSTERM DD SYSOUT=* //SYSLIB DD DISP=SHR,DSN=ISF.SISFSRC // DD DISP=SHR,DSN=SYS1.SHASMAC // DD DISP=SHR,DSN=SYS1.MACLIB // DD DISP=SHR,DSN=SYS1.MODGEN //SYSUT1 DD UNIT=SYSALLDA,SPACE=(TRK,(80,20)) //SYSLIN DD DISP=(,PASS), // UNIT=SYSALLDA,SPACE=(TRK,(30,15),RLSE), // DCB=(RECFM=FB,BLKSIZE=3120,LRECL=80) //SYSIN DD DISP=SHR,DSN=...your source module library...(ISFPARMS) //LKD EXEC PGM=IEWL,PARM=('LIST,LET,XREF,NCAL,RENT') //SYSPRINT DD SYSOUT=* //SYSUT1 DD UNIT=SYSALLDA,SPACE=(TRK,(80,20)) //SYSLIN DD DSN=*.ASM.SYSLIN,DISP=(OLD,DELETE) // DD DDNAME=SYSIN //SYSLMOD DD DISP=SHR,DSN=...your load module library...(ISFPARMS) |
LKDステップのバインダーオプション「RENT」を忘れずに指定します。忘れるとバッチSDSFはS0C4でABENDします。またロードモジュールはSDSFの標準ロードモジュールライブラリー(ISF.SISFLOAD)など、センターで共通に使用するデータセットに絶対出力されないようにします。以前にカスタマイズしたJCLなどを再利用する際は十分に注意しなければなりません。ここで作成するISFPARMSモジュールはあなたがバッチでSDSFを使用する際にのみ使う専用のモジュールとなります。そのため出力先もあなたの専用モジュールライブラリーを用意して、そこへカスタマイズしたISFPARMSモジュールを出力するようにします。
④出力先ロードモジュールライブラリーをAPF登録する。
カスタマイズしたISFPARMSモジュールを格納したロードモジュールライブラリーはAPF許可されている必要があります。SYS1.PARMLIBのPROGパラメーター等で登録しますが、テストするならSETPROGコマンドで動的に追加すればいいでしょう。
SETPROG APF,ADD,DSN=your load module library,VOL=??????
カスタマイズしたISFPARMSモジュールを使ったバッチSDSFのJCL
1 2 3 4 5 6 7 8 9 10 11 12 13 |
//ISFBATCH JOB (acct),name,CLASS=A,MSGCLASS=B,REGION=4M //********************************************************************* //* SDSF BACTH SESSION //* =========================================== //********************************************************************* //TSOBATCH EXEC PGM=SDSF,PARM='++0060,0120' //STEPLIB DD DISP=SHR,DSN=...your load module library... //ISFOUT DD SYSOUT=* //ISFIN DD * PRE * DA // // |
今度はPREコマンドも有効になり、DAコマンドで全ジョブのアクティブリストが出力されます。