その他のユーティリティ

本章では、その他のユーティリティについて説明します。

1. 概要

以下は、その他のユーティリティの一覧です。

ユーティリティ 説明

DSDIFF

データセットの各レコードの相違点を表示します。

ICETOOL

SORTユーティリティ・プログラムを使用して、1つのジョブ・ステップから複数のデータセットを出力します。

IEFBR14

JCLが正常に実行されているかどうかを確認するためのテスト・ユーティリティ・プログラムです。

KEQEFT01

TSOコマンドを実行し、バッチ・アプリケーションで使用するデータベースへの接続を担当します。

LIBE

直接アクセス・ボリュームのデータセットをコピーします。

FASP

端末に入力するコマンドの略語を指定します。

2. DSDIFF

DSDIFFは、データセットの各レコードの相違点を表示するユーティリティ・プログラムです。

OpenFrameのインストール後、またはユーティリティやライブラリなどの各種モジュールを更新した後に実行する検証テストです。データセットが正常に作成されたかどうかを確認するために使用できます。

2.1. FDの設定

以下は、FDの設定項目です。

項目 説明

SYSIN FD

比較するデータセットのfdnameリストを定義します。

リストの区切り子としてコンマ(,)を使用します。例) AA,BB,CC: AAとBB、CCを比較します。

TARGET FD

比較するデータセットを定義します。比較データセットは、SYSIN FDに定義されたfdnameリストに含まれる必要があります。

2.2. コマンドの設定

以下は、データセット・リストを定義するSYSIN FDの構文です。

fdname,fdname[fdname,....]

SYSIN DDにデータセット・リストを定義するほか、別途設定が必要なコマンドはありません。

2.3. 使用例

以下は、U01 FD、U02 FDの2つのレコードを比較して相違点を表示する例です。

\DSDIFF  EX DSDIFF
\        FD LIST=DA,VOL=VOL001,TRK=10,SOUT=A
\        FD COIN=*
U01,U02
\        FD U01=DA,VOL=VOL001,FILE=OFTEST.SORT.U01
\        FD U02=DA,VOL=VOL001,FILE=OFTEST.SORT.U02
\        JEND

2.4. 注意事項と戻りコード

レコード長が異なると、最短レコード長までのすべてのデータが一致しても異なるレコードと見なします。

以下は、DSDIFFユーティリティの戻りコードです。

  • 正常に実行された場合

    アプリケーションからの戻りコードを返します。

  • エラーが発生した場合

    LIST FDにエラーメッセージを出力し、該当するエラーコードを返します。

    コード 説明

    20

    レコードの1つ以上の違いがある場合です。

    40

    SYSINで指定されたfdnameが存在しないか、データセットの入出力エラーなどを含むOpenFrameまたはUNIXのエラーです。

3. ICETOOL

ICETOOLは、SORTユーティリティ・プログラムを使用して、1つのジョブ・ステップで複数のデータセットを出力するためのユーティリティ・プログラムです。TOOLIN FDで指定されたコマンドに従って、SORTユーティリティ・プログラムを使用してデータを処理します。

以下は、ICETOOLが提供する主要機能です。

  • ソートされた入力データセットのコピーを作成します。

  • 修正または修正されていない入力データセットのコピーを作成します。

  • 修正または修正されていない入力データセットのレコード数を出力します。

  • 文字と数字フィールドまたは一意の値が発生した総回数などの多様な基準で入力データセットを含む出力データセットを作成します。

  • 異なる形式のレコード・フィールドをマージして、1つまたは複数のレコードで出力します。

3.1. FDの設定

以下は、FDの設定項目です。

項目 説明

TOOLMSG

ICETOOLの出力メッセージを格納します。

DFSMSG

ICETOOLがSORTプログラムを内部的に使用中に出力されるメッセージを格納します。

TOOLIN

ICETOOLコマンドを指定します。

infd

ICETOOLの入力データセットを指定します。TOOLINでFROM(infd)を介してinfdを使用するように指定します。

outfd

ICETOOLのCOPY、SELECT、SORTの実行時に使用される出力データセットを指定します。TOOLINでTO(outfd)を介してoutfdを使用するように指定します。

savefd

ICETOOLのSELECTの実行時に使用される出力データセットを指定します。TOOLINでDISCARD(savefd)を介してsaveFDを使用するように指定します。

countfd

ICETOOLのCOUNTの実行時に使用される出力データセットを指定します。

xxxxCNTL

ICETOOLが内部的に使用するSORTのコマンドを指定します。TOOLINでUSING xxxxを介してxxxxCNTL FDを使用するように指定します。

3.2. コマンドの設定

ICETOOLで設定できるコマンドについて説明します。

  • COPY

    infdに指定されたデータを1つ以上のoutfdにコピーします。USING句を介してxxxxCNTLを使用してSORTを実行することもできます。

    以下は、COPYコマンドの構文です。

    COPY FROM(infd)
         TO(outfd,[outfd,...]) | USING(xxxx) | {TO(outfd,[outfd,....]) USING(xxxx)}
         [VSAMTYPE(x)]
         [SERIAL]
    パラメータ 説明

    FROM

    COPYコマンドを実行する入力データセットを指定します。

    TO

    COPYコマンドの実行結果が格納される出力データセットを指定します。

    outfdにはすべて同じ結果が格納されます。

    TOとUSINGは同時に指定することが可能であり、いずれか1つを必ず指定してください。

    USING

    COPYで使用されるSORTのコマンドを指定します。

    USINGが指定されている場合は、xxxxCNTL FDを必ず指定します。

    VSAMTYPE

    実際には機能せず、エラーの発生を防ぐためにサポートされます。

    SERIAL

    実際には機能せず、エラーの発生を防ぐためにサポートされます。

  • COUNT

    入力データセットのレコード数を出力します。USING句がある場合は、再フォーマットされた後のレコード数を出力します。

    以下は、COUNTコマンドの構文です。

    COUNT FROM(infd)
          [USING(xxxx)]
          [EMPTY]
          [WRITE(countfd)]
          [TEXT('string')]
          [DIGITS(d)]
    パラメータ 説明

    FROM

    COUNTコマンドを実行する入力データセットを指定します。

    USING

    COUNTコマンドで使用されるSORTユーティリティのコマンドを指定します。

    EMPTY

    入力データセットが空の場合は、RC=12(RC4が指定された場合はRC=4)を返し、そうでない場合は、RC=0を返します。

    EMPTY

    • 入力データセットが空の場合は、RC=20を返します。

    • 入力データセットが空でない場合は、RC=10を返します。

    EQUAL(v)

    COUNTコマンドの結果としてレコードの数がv個の場合、RC=12(RC4が指定された場合は、RC=4)を返します。

    WRITE(countfd)

    countfdを指定します。countfdは、レコード数を出力するデータセットのfdnameを意味します。countfd FDの形式は、FBのみ指定できます。

    TEXT('string')

    countfdデータセットに文字列を出力します。レコード数は、その文字列の後に出力されます。TEXTは、WRITEが指定された場合にのみ使用できます。

    DIGITS(d)

    レコード数が出力される桁数を指定します。DIGITSを指定しない場合のデフォルト値は15です。

  • SELECT

    infdで指定された入力データを与えられた条件に従ってフィルタリングしてtofdに格納するか、またはフィルターを通過できなかったデータをsavefdに格納することができます。

    以下は、SELECTコマンドの構文です。

    SELECT FROM(infd)
           TO(outfd) | DISCARD(savefd) | {TO(outfd) DISCARD(savefd)}
           ON(p,m,f)[,ON(p,m,f),...]
           ALLDUPS | NODUPS | HIGHER(x) | LOWER(x) | EQUAL(x) | FIRST | LAST |
           FIRSTDUP | LASTDUP
           [VSAMTYPE(x)]
           [UZERO]
           [USING(xxxx)]
    パラメータ 説明

    FROM

    入力データセット名を指定します。

    TO

    フィルタリングされたレコードを格納する出力データセット名を指定します。

    DISCARD

    フィルタリング後に廃棄されるレコードを格納するデータセット名を指定します。

    ON

    SELECTコマンドが適用されるフィールドを定義します。pバイトからmバイトまで、f形式で適用します。

    ALLDUPS

    ONフィールド値が入力データセット内で複数回現れるレコードのみを保存します。

    NODUPS

    ONフィールド値が入力データセット内で一度だけ現れるレコードのみを保存します。

    HIGHER

    ONフィールド値が入力データセット内でx回数より多く出現されたレコードのみを保存します。

    LOWER

    ONフィールド値が入力データセット内でx回数より少なく出現されたレコードのみを保存します。

    EQUAL

    ONフィールドの値が入力データセット内でx回数出現されたレコードのみを保存します。

    FIRST

    ONフィールド値が入力データセット内で一度だけ現れるレコードと複数回現れるレコードの最初のレコードのみを保存します。

    LAST

    ONフィールド値が入力データセット内で一度だけ現れるレコードと複数回現れるレコードの最後のレコードのみを保存します。

    FIRSTDUP

    ONフィールド値が入力データセット内で複数回現れるレコードの最初のレコードのみを保存します。

    LASTDUP

    ONフィールド値が入力データセット内で複数回現れるレコードの最後のレコードのみを保存します。

    VSAMTYPE

    実際には機能せず、エラーの発生を防ぐためにサポートされます。

    UZERO

    実際には機能せず、エラーの発生を防ぐためにサポートされます。

    USING

    SELECTコマンドで使用されるSORTのコマンドを指定します。

  • SORT

    入力データセットをソートし、1つ以上の出力データセットへ出力します。入力データセットをソートおよび再フォーマットするためにSORTユーティリティを呼び出します。

    以下は、SORTコマンドの構文です。

    SORT FROM(infd)
         USING(xxxx)
         [TO(outfd,[outfd,...])]
         [VSAMTYPE(x)]
         [SERIAL]
    パラメータ 説明

    FROM

    SORTコマンドを実行する入力データセットを指定します。

    USING

    SORTコマンドで使用されるSORTのコマンドを指定します。SORTではUSINGが指定される必要があり、xxxxCNTL FDには、SORTコマンドが含まれている必要があります。

    TO

    SORTの実行結果が保存される出力データセットを指定します。outfdにはすべて同じ結果が保存されます。

    VSAMTYPE

    実際には機能せず、エラーの発生を防ぐためにサポートされます。

    SERIAL

    実際には機能せず、エラーの発生を防ぐためにサポートされます。

  • SPLICE

    一致するオーバーレイ・レコード・フィールドがベース・レコードにオーバーレイされます。この機能を使用すると、異なる形式の複数の入力レコードを複数の情報を持つ1つの出力レコードとして結合することができます。

    ONに基づいてマッチング・レコードをチェックします。最初のマッチング・レコードがベース・レコード、それ以外のレコードはオーバーレイ・レコードとして扱われます(このオプションが指定されていない場合は、最後のレコードがオーバーレイ・レコードとなります)。オーバーレイ・レコードにWITHが指定されたフィールドがベース・レコードのフィールドにオーバーレイされます。WITHフィールドを除いたベース・レコードのフィールドはそのまま維持されます。したがって、出力レコードはベース・レコードとオーバーレイ・レコードを組み合わせたものとなります。

    SPLICE FROM(infd) TO(outfd)
           ON(p,m,f)[,ON(p,m,f),...]
           WITH(p,m)[,WITH(p,m),...]
           [WITHALL]
           [KEEPNODUPS]
           [USING(xxxx)]
    パラメータ 説明

    FROM

    入力データセット名を指定します。

    TO

    結合されたレコードを格納する出力データセット名を指定します。

    ON

    レコード・マッチングが適用されるフィールドを定義します。

    レコード・マッチングは、pバイトからmバイトまでf形式で適用されます。

    WITH

    オーバーレイ・レコードで指定されたフィールドの位置と長さに従ってベース・レコードをオーバーレイします。

    WITHを複数回使用して複数のフィールドをオーバーレイすることができます。

    WITHALL

    すべてのオーバーレイ・レコードに対して各ベース・レコードをオーバーレイします。

    WITHALLを指定しない場合、最後のオーバーレイ・レコードのみベース・レコードにオーバーレイされます。

    WITHEACH

    n番目のオーバーレイ・レコードを、n番目のWITHのベース・レコードに上書きします。

    オーバーレイ・レコードがWITHの数よりも多い場合は、レコードを上書きしません。

    KEEPNODUPS

    一致しないレコードを削除せずに出力します。

    KEEPNODUPSを指定しない場合、一致しないレコードは削除されます。

    USING

    SPLICEコマンドで使用されるSORTユーティリティ・コマンドを指定します。

3.3. 使用例

以下は、OFTEST.ICETOOL.IN00をCPY1CNTL FDに指定されたSORTスクリプトを使用してOFTEST. ICETOOL.OUT00.COPYにコピーする例です。

\ICECOPY  EX ICETOOL
\         FD ICEIN=DA,VOL=VOL001,FILE=OFTEST.ICETOOL.IN00
\         FD ICEOUT=DA,VOL=VOL001,FILE=OFTEST.ICETOOL.OUT00.COPY
\         FD TOOLMSG=DA,VOL=VOL001,TRK=10,SOUT=A
\         FD DFSMSG=DA,VOL=VOL001,TRK=10,SOUT=A
\         FD LIST=DA,VOL=VOL001,TRK=10,SOUT=A
\         FD TOOLIN=*
 COPY FROM(ICEIN) TO(ICEOUT) USING(CPY1)
\         FD CPY1CLTL=*
 SORT FIELDS=COPY
\         JEND

以下は、OFTEST.ICETOOL.IN00をCPY1CNTL FDに指定されたSORTスクリプトを使用して再フォーマットした後、レコード数をOFTEST. ICETOOL.OUT01.COUNTに出力する例です。レコード数は、「OUTPUT RECORD COUNT =」の後ろに9桁の数値で出力されます。

\ICECOUNT EX ICETOOL
\         FD ICEIN=DA,VOL=VOL001,FILE=OFTEST.ICETOOL.IN00
\         FD CNT00=DA,VOL=VOL001,FILEOFTEST.ICETOOL.OUT01.COUNT
\         FD TOOLMSG=DA,VOL=VOL001,TRK=10,SOUT=A
\         FD DFSMSG=DA,VOL=VOL001,TRK=10,SOUT=A
\         FD LIST=DA,VOL=VOL001,TRK=10,SOUT=A
\         FD TOOLIN=*
 COUNT FROM(ICEIN) USING(CPY1) WRITE(CNT00) -
 TEXT('OUTPUT RECORD COUNT = ') DIGITS(9)
\         FD CPY1CNTL=*
 SORT FIELDS=COPY
 INCLUDE COND=(16,2,CH,EQ,C'08')
\         JEND

以下は、OFTEST.ICETOOL.IN01をCPY1CNTL FDに指定されたSORTスクリプトを使用してOFTEST. ICETOOL.OUT01.ICECPY1とOFTEST.ICETOOL.OUT01.ICECPY2にコピーする例です。

OFTEST.ICETOOL.OUT01.ICECPY2で、レコードの16バイト目から2バイト(16から17バイト)を文字キーにして、データセット全体で重複する場合はOFTEST.ICETOOL.OUT01.ICESAVEに格納し、重複しない場合はOFTEST.ICETOOL.OUT01.ICETOに格納します。

\ICECOPY  EX ICETOOL
\         FD ICEIN=DA,VOL=VOL001,FILE=OFTEST.ICETOOL.IN01
\         FD ICECPY1=DA,VOL=VOL001,FILE=OFTEST.ICETOOL.OUT01.ICECPY1
\         FD ICECPY2=DA,VOL=VOL001,FILE=OFTEST.ICETOOL.OUT01.ICECPY2
\         FD ICETO=DA,VOL=VOL001,FILE=OFTEST.ICETOOL.OUT01.ICETO
\         FD ICESAVE=DA,VOL=VOL001,FILE=OFTEST.ICETOOL.OUT01.ICESAVE
\         FD TOOLMSG=DA,VOL=VOL001,TRK=10,SOUT=A
\         FD DFSMSG=DA,VOL=VOL001,TRK=10,SOUT=A
\         FD LIST=DA,VOL=VOL001,TRK=10,SOUT=A
\         FD TOOLIN=*
 COPY FROM(ICEIN) TO(ICECPY1,ICECPY2) USING(CPY1)
 SELECT FROM(ICECPY2) TO(ICETO) DISCARD(ICESAVE) ON(16,2,CH) NODUPS
\         FD CPY1CNTL=*
 SORT FIELDS=COPY
\         JEND

3.4. 注意事項と戻りコード

以下は、ICETOOLユーティリティの戻りコードです。

  • 正常に実行された場合

    ユーティリティの正常終了コードの10を返します。

  • エラーが発生した場合

    LIST FDにエラーメッセージを出力し、エラーコード50を返します。

4. IEFBR14

IEFBR14は、JCLに記述された内容が正常に実行されるかを確認するために使用するテスト用ユーティリティ・プログラムです。

実際には、ユーティリティが何らかの処理を行うことはありません。つまり、何の処理も行わない空のプログラムをジョブ・ステップで実行することで、JCLが正しく作成されているか、ジョブ環境で処理されるべきFD文の処理やデータセットの割り当てなどが正常に動作しているかを確認する目的で使用されます。また、データセットを新規作成または削除する処理のみを行うジョブ・ステップの場合にも使用できます。

4.1. FDの設定

設定するFDはありません。

4.2. コマンドの設定

設定するコマンドはありません。

4.3. 使用例

以下は、JCLの実行後にデータセットが削除される例です。

\ JOB
\ EX IEFBR14
\ FD DELETE=DA,FILE=DATASET,DISP=DLT
\ JEND

4.4. 注意事項と戻りコード

IEFBR14ユーティリティは、終了コード0を返す以外の処理は行いません。ただし、JCLのランタイム・パース・エラーやFD文のデータセット割り当てエラーなどにより、ジョブがFLUSH状態で返される可能性があります。

5. KEQEFT01

KEQEFT01ユーティリティは、データベースを使用するバッチ・アプリケーションをJCLで実行する際、アプリケーションの実行前にデータベース・システムに接続するためのOpenFrameデータベース接続ユーティリティです。

データベースを使用する業務用のCOBOLアプリケーションのソースにデータベース・システムの接続に必要なシステムの名前、ユーザー名、パスワードなどの情報をコーディングせずに、これらの情報をKEQEFT01ユーティリティの入力スクリプトに指定します。

KEQEFT01ユーティリティで使用するTSSスクリプトのPROGRAMオプションに定義されたプログラムは、共有オブジェクトの形でコンパイルする必要があります。KEQEFT01ユーティリティはOpenFrameのデータベース接続ユーティリティとして、TSSコマンドを使用してバッチ作業を処理できるようにします。

OpenFrameで提供するKEQEFT01ユーティリティは、バッチ・アプリケーション(TSSスクリプトのPROGRAMオプションに定義されたプログラム)を実行するためのデータベース接続機能だけを提供し、DB2システム・コマンドは無視されます。

バッチ・アプリケーションをコンパイルする方法については、OpenFrame『マイグレーションガイド』を参照してください。

5.1. DDの設定

以下は、DDの設定項目です。

項目 説明

SYSTSPRT DD

KEQEFT01ユーティリティの処理結果またはエラーメッセージが出力されます。ただし、SYSTSPRT DDが準備される前に発生するエラーメッセージはSYSOUT DDに出力されます。

SYSTSIN DD

KEQEFT01ユーティリティの入力スクリプトを指定します。

5.2. コマンドの設定

本節では、KEQEFT01コマンドについて説明します。

  • DSN

    TSSコマンドのDSNは、新しいDSN(DB2 Command Processor)セッションを開始します。以下のようなサブコマンドがあります。

    コマンド 説明

    RUN

    ユーザー・アプリケーションを実行します。

    END

    データベースの接続を終了し、TSSに復帰します。

    現在、KEQEFT01ユーティリティのDSNコマンドでは、以下のサブコマンドについてエラーを防ぐために構文のみサポートしています。

    コマンド 説明

    ABEND

    DSNセッションを終了してABENDコードを返します。

    BIND

    アプリケーションのパッケージまたはプランを作成します。

    DCLGEN

    SQL文と定義テーブルを作成します。

    FREE

    アプリケーションのパッケージまたはプランを削除します。

    REBIND

    既存のパッケージまたはプランを再作成します。

    SPUFI

    SQLファイルの入力でSQLプロセッサを実行します。

    DSNセッションが接続している間は、データベース・コマンドとコメントを入力できます。データベース・コマンドはハイフン(-)で始まり、コメントはアスタリスク(*)で始まります。

    DSNセッションが接続されている間、OpenFrameで使用できるデータベース・コマンドは以下のとおりです。

    コマンド 説明

    DISPLAY

    データベースの状態情報を出力します。

    START

    指定されたデータベースを使用します。

    STOP

    指定されたデータベースを使用しません。

    メインフレームが提供するデータベース・コマンドの中で頻繁に使用されるいくつかのデータベース・コマンドは、OpenFrameでは実際に機能しませんが、エラーが発生しないようにサポートしています。

    以下は、DSNコマンドの構文です。

    DSN [SYSTEM(DSN|subsystem-name)]
        [RETRY(0|integer)]
    項目 説明

    SYSTEM

    データベースのサブシステム名を指定します。

    指定しない場合は、デフォルト値のSYSTEM(DSN)が使用されます。データベースのサブシステムは、OpenFrame環境設定のikjeft01サブジェクトのSYSTEM:{subsystem-name}セクションのDBTYPEDBAUTHDATABASEINSTANCEUSERNAMEPASSWORDまたはENPASSWDのキー値が設定されている必要があります。

    RETRY

    データベース・サブシステムの接続のリトライ回数を指定します。

    接続の試みは30秒ごとに起こります。指定しない場合は、デフォルト値のRETRY(0)が設定され、最大120回の接続を試みます。

  • RUN

    DSNのサブコマンドであるRUNはSQL文を含んだアプリケーションを実行します。

    RUNコマンドの構文は以下のとおりです。

    RUN PROGRAM(program-name)
        [PLAN(plan-name)]
        [LIBRARY(library-name)]
        [PARMS(parameter-string)]
    
    RUN [LIBRARY(library-name)]
        [PARMS(parameter-string)]
    項目 説明

    PROGRAM

    実行するプログラム名を指定します。

    PLAN

    KEQEFT01ユーティリティでは、同パラメータについてエラーが発生しないようにサポートしています。

    LIBRARY

    アプリケーションが含まれている区分データセットの名前を指定します。(省略形: LIB)

    PARMS

    アプリケーションに渡されるパラメータの一覧を指定します。(省略形: PARM)

  • END

    DSNのサブコマンドであるENDは、DSNセッションを終了してTSSに復帰します。

    ENDコマンドの構文は以下のとおりです。

    END

5.3. 使用例

以下はDSNセッションの例です。MYDBシステムへの接続に失敗した場合、30秒ごとに最大5回まで接続を試みます。

DSN SYSTEM (MYDB) RETRY (5)

以下は、DSNシステムにアクセスしてTEST.RUNLIB.LOADライブラリに存在するCOBTEST1プログラムを実行する例です。

DSN SYSTEM (DSN)
RUN PROGRAM (COBTEST1) LIB ('TEST.RUNLIB.LOAD')

以下は、DSNシステムに接続してTEST.RUNLIB.LOADライブラリに存在するCOBTEST2プログラムを実行し、COBTEST2プログラムのパラメータとして’1234567890’を渡す例です。

DSN SYSTEM (DSN)
RUN PROGRAM (COBTEST2) PLAN (COBTEST2) -
     LIB ('TEST.RUNLIB.LOAD') PARMS ('1234567890')

5.4. 関連環境設定

データベースのシステム名とデータベースの接続に必要な情報は、OpenFrame環境設定のikjeft01サブジェクトにを設定します。詳細については、OpenFrame Batch『環境設定ガイド』を参照してください。

5.5. 注意事項と戻りコード

KEQEFT01ユーティリティは、SYSTSIN DDにTSSスクリプトを指定する必要があります。このとき、TSSスクリプトのPROGRAMオプションに定義されたプログラムは共有オブジェクト形式である必要があります。現在、KEQEFT01ユーティリティはシェル・スクリプトや実行可能なオブジェクトはサポートしていません。

DSNコマンドとDSNのサブコマンドを使用する際には、以下のような解析ルールが適用されます。

  • 1つのコマンドを次の行に続けて記述する場合は、現在のラインの最後にハイフン(-)を記述します。

    以下は、複数の行にわたって作成したDSNのサブコマンドの例です。

    RUN PROGRAM(TECA251) -
    PLAN(TECA251) -
    LIB('MI.PROG.CLINK') -
    PARM('2')

以下は、KEQEFT01ユーティリティによるバッチ・アプリケーション(TSSスクリプトのPROGRAMオプションに定義されたプログラム)の実行結果についての説明です。

  • 正常に実行した場合

    アプリケーションから受信したコードを返します。

  • エラーが発生した場合

    エラーメッセージをSYSTSPRT DDに出力し、該当するエラーコードを返します。ただし、SYSTSPRT DDが準備される前に発生したエラーメッセージはSYSOUT DDに出力します。

    以下は、KEQEFT01ユーティリティで発生する可能性のあるエラーコードです。

    コード 説明

    12

    回復不能エラーであり、以下のような場合に該当します。

    • データセット認証の準備プロセスで失敗した場合

    • SYSTSIN DDが提供されていない場合

    • SYSTSPRT DDが提供されていない場合

    • SYSTSIN DDのファイルが見つからなかった場合

    • サポートしていないSYSTSIN DDのバイナリ形式である場合

    • SYSTSIN DDスクリプトの解析エラーが発生した場合

    • 不適切なTSSコマンドが使用された場合

    • RUNコマンドにプログラムが記述されていない場合

    • RUNコマンドに記述されたプログラムが見つからなかった場合

    • 実行させるアプリケーションが見つからなかった場合

    • サポートしないアプリケーションのバイナリ形式である場合

    • データベースの接続に失敗した場合

    • 動的メモリのロード(dlopen)に失敗した場合

    • エントリー・ポイントの検索(dlsym)に失敗した場合

    16

    システム関連のエラー(System Fault)であり、以下のような場合に該当します。

    • OpenFrameシステム・ライブラリの初期化に失敗した場合

    • SYSTSPRT DDを開くことができなかった場合

    • SYSTSIN DDのバイナリ形式のチェックでエラーが発生した場合

    • SYSTSIN DDを開くことができなかった場合

    • 一時ファイルを作成できなかった場合

    • SYSTSIN DDで読み込みエラーが発生した場合

    • アプリケーションのバイナリ形式のチェックでエラーが発生した場合

    • データベース・システム設定の読み込みエラー

    • プロセス分岐(fork)に失敗した場合

    • 入出力リダイレクトに失敗した場合

6. LIBE

LIBEは、直接アクセス・ボリュームのデータセットをコピーするユーティリティ・プログラムです。PS(Physical Sequential)、PO(Partitioned)で構成されたデータセットのみを入力データセットとして使用できます。出力データセットはPSとPOの構成のみ許可します。現在磁気テープはサポートしていません。

6.1. FDの設定

以下は、FDの設定項目です。

項目 説明

COIN

制御文の入力データセットです。

LIST

出力リスト・データセットです。コピーしたブロック・サイズを出力します。

U01

入力データセットのアクセス名です。必須ではなく、他の名前も使用できます。

U02

出力データセットのアクセス名です。必須ではなく、他の名前も使用できます。

6.2. コマンドの設定

LIBEユーティリティが提供する機能を実行するコマンドをCOINに指定します。

  • COINでのLIBE COPY

    データセットのコピーを実行して一度だけ使用することができます。

    以下は、COINでのLIBE COPY文です。

    /    COPY  ,IN=[{U01|input_access}],[OUT={U02|output_access}]
                                        [,REP]
                                        [,NEWNAME=output_dataset_newname]
    項目 説明

    IN

    入力データセットのアクセス名を指定します。

    OUT

    出力データセットのアクセス名を指定します。

    REP

    出力データセットがすでに存在する場合、上書きするために指定します。

    NEWNAME

    データセットをコピーするとき、新しいモジュール名を指定します。

    出力ファイルが順次データセットである場合は指定できません。入力データセットが順次データセット(SDS)であり、出力ファイルが区分データセット(PDS)である場合には必ず指定します。

  • MODE, ENDMODE

    MODEとENDMODEは一緒に指定する必要があり、MODEでは出力データセットを指定できます。

    以下は、MODEコマンドとENDMODEコマンドの構文です。

    /    MODE OUT=U02
    /    COPY  ,IN=U01,NEWNAME=EX01,REP
    /    ENDMODE
  • COMPARE

    2つのデータセットのレコードを比較するコマンドです。

    /    COPY  ,IN=[{U01|input_access}],[COMP={U02|output_access}]
                                        [,LIMIT={10|number}]
    項目 説明

    IN

    入力データセットのアクセス名を指定します。

    COMP

    比較対象データセットのアクセス名を指定します。

    LIMIT

    差異が発生したレコード数の制限を指定します。差異が発生したレコード数が指定した数以上になると、エラーとして処理されます。

  • FIN

    LIBEユーティリティ制御文の最後を示す構文であり、省略可能です。

    以下は、FINコマンドの構文です。

    /    FIN

6.3. 使用例

以下は、カタログされた順次データセット(SDS)を、直接アクセス・ボリュームに新規の順次データセットとしてコピーする例です。

  \   JOB LIBE01
  \   EX  LIBE
  \   FD  LIST=DA,VOL=WORK,TRK=(10,10),SOUT=T
  \   FD  U01=DA,VOL=VOL001,FILE=LIBE.TEST.EX1
  \   FD  U02=DA,VOL=VOL001,FILE=LIBE.TEST.EX2,CYL=(1800,100,RLSE)
  \   FD  COIN=*
  /  COPY ,IN=U01,OUT=U02
  /  FIN
  \  JEND

以下は、カタログされた順次データセットを、直接アクセス・ボリュームのに存在する順次データセットにコピーする例です。

  \   JOB LIBE02
  \   EX  LIBE
  \   FD  LIST=DA,VOL=WORK,TRK=(10,10),SOUT=T
  \   FD  U01=DA,VOL=VOL001,FILE=LIBE.TEST.EX1
  \   FD  U02=DA,VOL=VOL001,FILE=LIBE.TEST.EX2
  \   FD  COIN=*
  /  COPY ,IN=U01,OUT=U02,REP
  /  FIN
  \  JEND

以下は、カタログされた順次データセットを、直接アクセス・ボリュームに区分データセットのメンバーとしてコピーする例です。

  \   JOB LIBE03
  \   EX  LIBE
  \   FD  LIST=DA,VOL=WORK,TRK=(10,10),SOUT=T
  \   FD  U01=DA,VOL=VOL001,FILE=LIBE.TEST.PS1
  \   FD  U02=DA,VOL=VOL001,FILE=LIBE.TEST.PS2
  \   FD  U03=DA,VOL=VOL001,FILE=LIBE.TEST.PS3
  \   FD  U04=DA,VOL=VOL001,FILE=LIBE.TEST.PO4,FCB=(DSORG=PO)
  \   FD  COIN=*
  /  MODE OUT=U04
  /  COPY ,IN=U01,NEWNAME=SDTPD1,REP
  /  COPY ,IN=U02,NEWNAME=SDTPD2,REP
  /  COPY ,IN=U03,NEWNAME=SDTPD3,REP
  /  ENDMODE
  /  FIN
  \  JEND

以下は、カタログされた区分データセットのすべてのメンバーを、直接アクセス・ボリュームに順次データセットとしてコピーする例です。

  \   JOB LIBE04
  \   EX  LIBE
  \   FD  LIST=DA,VOL=WORK,TRK=(10,10),SOUT=T
  \   FD  U01=DA,VOL=VOL001,FILE=LIBE.TEST.PO1,FCB=(DSORG=PO)
  \   FD  U02=DA,VOL=VOL001,FILE=LIBE.TEST.PS2
  \   FD  COIN=*
  /  COPY ,IN=U01,OUT=U02 または COPY +,IN=U01,OUT=U02
  /  FIN
  \  JEND

以下は、カタログされた区分データセットのメンバーのうち名前がTEST1であるメンバーを、直接アクセス・ボリュームに順次データセットとしてコピーする例です。

  \   JOB LIBE05
  \   EX  LIBE
  \   FD  LIST=DA,VOL=WORK,TRK=(10,10),SOUT=T
  \   FD  U01=DA,VOL=VOL001,FILE=LIBE.TEST.PO1,FCB=(DSORG=PO)
  \   FD  U03=DA,VOL=VOL001,FILE=LIBE.TEST.PS3
  \   FD  COIN=*
  /  COPY TEST1+,IN=U01,OUT=U03 (ただし、TEST1の後に文字列がない場合に限る) または  COPY (TEST1),IN=U01, OUT=U03
  /  FIN
  \  JEND

以下は、カタログされた区分データセットのメンバーのうち名前がTEST1とTEST2であるメンバーを、直接アクセス・ボリュームに順次データセットとしてコピーする例です。

  \   JOB LIBE06
  \   EX  LIBE
  \   FD  LIST=DA,VOL=WORK,TRK=(10,10),SOUT=T
  \   FD  U01=DA,VOL=VOL001,FILE=LIBE.TEST.PO1,FCB=(DSORG=PO)
  \   FD  U04=DA,VOL=VOL001,FILE=LIBE.TEST.PS4
  \   FD  COIN=*
  /  COPY (TEST1,TEST2),IN=U01,OUT=U04
  /  FIN
  \  JEND

以下は、カタログされた区分データセットのメンバーのうち名前にTESTが含まれたメンバーを、直接アクセス・ボリュームに順次データセットとしてコピーする例です。

  \   JOB LIBE07
  \   EX  LIBE
  \   FD  LIST=DA,VOL=WORK,TRK=(10,10),SOUT=T
  \   FD  U01=DA,VOL=VOL001,FILE=LIBE.TEST.PO1,FCB=(DSORG=PO)
  \   FD  U05=DA,VOL=VOL001,FILE=LIBE.TEST.PS5
  \   FD  COIN=*
  /  COPY TEST+,IN=U01,OUT=U05
  /  FIN
  \  JEND

以下は、カタログされた区分データセットのメンバーのうち名前にABC、DEFが含まれていないメンバーを、直接アクセス・ボリュームに順次データセットとしてコピーする例です。

  \   JOB LIBE08
  \   EX  LIBE
  \   FD  LIST=DA,VOL=WORK,TRK=(10,10),SOUT=T
  \   FD  U01=DA,VOL=VOL001,FILE=LIBE.TEST.PO1,FCB=(DSORG=PO)
  \   FD  U06=DA,VOL=VOL001,FILE=LIBE.TEST.PS6
  \   FD  COIN=*
  /  COPY ^(ABC,DEF),IN=U01, OUT=U06
  /  FIN
  \  JEND

以下は、カタログされた区分データセットのすべてのメンバーを、直接アクセス・ボリュームに区分データセットのメンバーとしてコピーする例です。

  \   JOB LIBE09
  \   EX  LIBE
  \   FD  LIST=DA,VOL=WORK,TRK=(10,10),SOUT=T
  \   FD  U01=DA,VOL=VOL001,FILE=LIBE.TEST.PO1,FCB=(DSORG=PO)
  \   FD  U02=DA,VOL=VOL001,FILE=LIBE.TEST.PO2,FCB=(DSORG=PO)
  \   FD  COIN=*
  /  COPY ,IN=U01, OUT=U02 または COPY +,IN=U01, OUT=U02
  /  FIN
  \  JEND

以下は、カタログされた区分データセットのメンバーのうち名前がTEST1であるメンバーを、直接アクセス・ボリュームに区分データセットのメンバーとしてコピーする例です。

  \   JOB LIBE10
  \   EX  LIBE
  \   FD  LIST=DA,VOL=WORK,TRK=(10,10),SOUT=T
  \   FD  U01=DA,VOL=VOL001,FILE=LIBE.TEST.PO1,FCB=(DSORG=PO)
  \   FD  U03=DA,VOL=VOL001,FILE=LIBE.TEST.PO3,FCB=(DSORG=PO)
  \   FD  COIN=*
  /  COPY TEST1+,IN=U01,OUT=U03 (ただし、TEST1の後に文字列がない場合に限る)または COPY (TEST1),IN=U01,OUT=U03
  /  FIN
  \  JEND

以下は、カタログされた区分データセットのメンバーのうち名前がTEST1とTEST2であるメンバーを、直接アクセス・ボリュームに区分データセットのメンバーとしてコピーする例です。

  \   JOB LIBE11
  \   EX  LIBE
  \   FD  LIST=DA,VOL=WORK,TRK=(10,10),SOUT=T
  \   FD  U01=DA,VOL=VOL001,FILE=LIBE.TEST.PO1,FCB=(DSORG=PO)
  \   FD  U04=DA,VOL=VOL001,FILE=LIBE.TEST.PO4,FCB=(DSORG=PO)
  \   FD  COIN=*
  /  COPY (TEST1,TEST2),IN=U01,OUT=U04
  /  FIN
  \  JEND

以下は、カタログされた区分データセットのメンバーのうち名前にTESTが含まれたメンバーを、直接アクセス・ボリュームに区分データセットのメンバーとしてコピーする例です。

  \   JOB LIBE12
  \   EX  LIBE
  \   FD  LIST=DA,VOL=WORK,TRK=(10,10),SOUT=T
  \   FD  U01=DA,VOL=VOL001,FILE=LIBE.TEST.PO1,FCB=(DSORG=PO)
  \   FD  U05=DA,VOL=VOL001,FILE=LIBE.TEST.PO5,FCB=(DSORG=PO)
  \   FD  COIN=*
  /  COPY TEST+,IN=U01,OUT=U05
  /  FIN
  \  JEND

以下は、カタログされた区分データセットのメンバーのうち名前にABC、DEFが含まれていないメンバーを、直接アクセス・ボリュームに区分データセットのメンバーとしてコピーする例です。

  \   JOB LIBE13
  \   EX  LIBE
  \   FD  LIST=DA,VOL=WORK,TRK=(10,10),SOUT=T
  \   FD  U01=DA,VOL=VOL001,FILE=LIBE.TEST.PO1,FCB=(DSORG=PO)
  \   FD  U06=DA,VOL=VOL001,FILE=LIBE.TEST.PO6,FCB=(DSORG=PO)
  \   FD  COIN=*
  /  COPY ^(ABC,DEF),IN=U01, OUT=U06
  /  FIN
  \  JEND

以下は、COMPAREコマンドで2つのデータセットのレコードを比較する例です。

  \   JOB LIBE13
  \   EX  LIBE
  \   FD  LIST=DA,VOL=WORK,TRK=(10,10),SOUT=T
  \   FD  U01=DA,VOL=VOL001,FILE=LIBE.COMP.TEST01
  \   FD  U06=DA,VOL=VOL001,FILE=LIBE.COMP.TEST06
  \   FD  COIN=*
  /  COMPARE IN=U01,COMP=U06,LIMIT=999
  /  FIN
  \  JEND

6.4. 注意事項と戻りコード

LIBEユーティリティのCOPY機能は、事前に順次データセットなのか区分データセットなのかを確認してから使用します。

以下は、LIBEユーティリティの戻りコードです。

  • 正常に実行した場合

    ユーティリティの正常終了コード10を返します。

  • 警告およびエラーが発生した場合

    エラー・メッセージをLIST FDに出力し、各エラーに該当するコードを返します。

    以下は、LIBEユーティリティ・プログラムで発生する可能性のあるエラー・コードです。

    コード 説明

    20

    COPYコマンドの実行中、入力データセットにレコードが存在しない場合、警告メッセージとともに返されます。

    30

    データセット関連の関数でエラーが発生した場合やCOMPAREコマンドの実行中に差異が発生したレコード数がLIMITと等しいか、それ以上の場合、ユーティリティ内のロジックでエラーが発生したことを意味します。

    50

    COINとして与えられたJCLが文法に合わない場合です。(パーシング・エラー)

7. FASP

FASPは、WebTerminalを含む端末からOFGWに接続する際、すべてのコマンドを略語として登録し、略語を入力するだけで同じ結果を得ることができるユーティリティです。

  1. FASPユーティリティによって解析された文は、OFM_BASE_VTAM_REGION_MAPテーブルで管理します。

  2. vtamrgadmツールで略語をコマンドを管理できます。

7.1. FDの設定

以下は、FDの設定項目です。

項目 説明

SLIB

制御文の入力データセットです。

7.2. コマンドの設定

FASPユーティリティが提供する機能を実行するためには、SLIBにコマンドを記述します。

コマンド 説明

CCFTAB

このコマンドはサポートされておらず、無視されます。

CCFCMD

コマンドのラベル名をコマンドの略語として処理します。それ以外のパラメータは無視されます。

CCFPARM

PARMパラメータがデータであり、デフォルトのパラメータとして定義された値をコマンドとして処理します。それ以外のパラメータは無視されます。

CCFEND

文の最後を示します。VTAMに登録するためには、この文を必ず記述する必要があります。

その他

それ以外のコマンドはサポートされておらず、無視されます。

7.3. 使用例

以下は、「LOGON AIM,,OIVPPROC」コマンドを略称の「OIVP」に指定する例です。FASPを実行した結果は、vtamrgadmの「-l」オプションを使用して確認でき、端末に接続して「OIVP」を入力すると「LOGON AIM,,OIVP」を入力したのと同様に処理されます。

  • JCLの例

    \ JOB FASPTEST
    \     EX FASP,RSIZE=3000
    \     PARA OBJ,NODECK
    \ FD  LIST=DA,VOL=DEFVOL,SOUT=A,CYL=(3,2)
    \ FD  SLIB=*
    OIVP  CCFCMD CMD=OIVP,REP=LOGON,FORMAT=PL1
          CCFPARM PARM=APPLID,DEFAULT=OIVP
          CCFPARM PARM=DATA,DEFAULT='LOGON AIM,,OIVPPROC'
          CCFEND
    \/
  • JCL実行後のvtamrgadmの例

    [root@oframe test]# vtamrgadm -l
    
     VTAM REGION ALIAS infomation
    
    =====================================================================================================================
     NO.  NAME        TYPE       FORMAT       APPLID          RGMAP				LAST_UPDT_TIME
    ---------------------------------------------------------------------------------------------------------------------
      1   OIVP        LOGON       PL1         OIVP        LOGON AIM,,OIVPPROC           2025/02/17 11:28:22.628375
    =====================================================================================================================

    vtamrgadmツールについては、OpenFrame Base『ツールリファレンスガイド』を参照してください。

  • WebTerminalの例

    FASPを使用して登録した略語をWebTerminalに入力する画面です。

    figure fasp 1

7.4. 注意事項と戻りコード

FASPを実行する際、以前保存されたVTAMの略語に関するすべてのデータが削除されます。

  • 正常に実行された場合

    ユーティリティの正常終了コード10を返します。

  • 警告およびエラーが発生した場合

    LIST FDにエラーメッセージを出力し、該当するエラーコードを返します。

    以下は、FASPユーティリティ・プログラムで発生する可能性のあるエラー・コードです。

    コード 説明

    50

    SLIBで指定された文が無効であるか、VTAMに登録中にエラーが発生した場合です。