- 「メインフレーム・コンピューター」で遊ぼう - http://www.arteceed.net -

バッチでSDSFを実行する

ISPF同様、SDSFもバッチで利用することができます。
DAパネルで表示されるジョブ一覧は、簡易版としてRMFモニターⅡの代わりにすることもできますし、特定のジョブのSYSOUT内容をバックグラウンドでコピーしたりできます。XWTRではSYSOUTはスプールからパージされてしまうので、MOVEではなくCOPYで処理したい時などは役に立ちます。


バッチSDSFの基本的なJCL

    //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を順次編成データセットにコピーする

    //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定義を探します。
    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=パラメータを以下のように修正します。
    ISFSPROG ISFGRP TSOAUTH=(JCL),                                       -
                   AUTH=(LOG,I,O,H,DA,DEST,PREF,SYSID,ABEND,ACTION,        -
    
    TSOAUTH=パラメータをTSOAUTH=(JCL)に変更します。変更したらSAVEします。

    ISFPARMSの詳細に関しては、IBM社のマニュアル「システム表示/検索機能(SDSF) オペレーションおよびカスタマイズ」を参照します。

    ※修正するメンバーはコピーしたものです。修正前の定義をコメントで残す必要はありません。また修正後の定義はあなたのバッチSDSFでのみ使用される専用パラメータになるため、既存のTSOユーザーおよび他のバッチJOBによるSDSF呼び出しには影響を与えません。

    ③コピーしたISFPARMSパラメータ・ソースをアセンブルしてISFPARMSモジュールを生成する。

    //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

    //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コマンドで全ジョブのアクティブリストが出力されます。