OpenFrame HiDBの定義ユーティリティ

本章では、OpenFrame HiDBのデータベース定義ユーティリティについて説明します。

1. 概要

OpenFrame HiDBユーティリティ・プログラムは、OpenFrame HiDBエンジンと共に提供されるプログラムであり、JCLを通じてバッチジョブとして実行されるプログラムを指します。これらのユーティリティ・プログラムは、メインフレームで使用されるデータベース・ユーティリティ・プログラムとの互換性を維持するために提供されており、データベースの定義、再編成、初期化機能などを提供します。

以下は、OpenFrame HiDBデータベースを定義するユーティリティ・プログラムの一覧です。各ユーティリティの詳細については、該当の節で詳しく説明します。

プログラム名 説明

DBDGEN

OpenFrame HiDBのデータベース・スキーマをシステムに定義する際に使用します。

PSBGEN

データベースに対する論理構造およびDCインターフェース・ブロックを定義します。

2. DBDGEN

DBDGENユーティリティは、OpenFrame HiDBデータベース・スキーマをシステムに定義する際に使用します。データベース・スキーマ情報は、データベース定義ブロック(DBDブロック)として作成され、システム・ライブラリに格納されます。

DBDGENユーティリティを使用すると、以下の種類のデータベースを定義できます。

  • HSAMデータベース(SHSAMを含む)

  • HISAMデータベース(SHISAMを含む)

  • HDAMデータベース

  • HIDAMデータベース

  • DEDBデータベース

  • INDEXデータベース

  • LOGICALデータベース

以下は、DBDGENC0プログラムとDFSILNK0プログラムを実行するDBDGENプロシージャの内容を示す例であり、次のように2つのステップで構成されています。

//       PROC  MBR=TEMPNAME,SOUT=A,RGN=4M,SYS2=
//C      EXEC  PGM=DBDGENC0,REGION=&RGN,PARM='OBJECT,NODECK'
//SYSLIB   DD  DSN=IMS.&SYS2MACLIB,DISP=SHR
//SYSLIN   DD  UNIT=SYSDA,DISP=(,PASS),
//             SPACE=(80,(100,100),RLSE),
//             DCB=(BLKSIZE=80,RECFM=F,LRECL=80)
//SYSPRINT DD  SYSOUT=&SOUT,DCB=BLKSIZE=1089,
//             SPACE=(121,(300,300),RLSE,,ROUND)
//SYSUT1   DD  UNIT=SYSDA,DISP=(,DELETE),
//             SPACE=(CYL,(10,5))
//L      EXEC  PGM=DFSILNK0,PARM='XREF,LIST',COND=(0,LT,C)
//SYSLIN   DD  DSN=*.C.SYSLIN,DISP=(OLD,DELETE)
//SYSPRINT DD  SYSOUT=&SOUT,DCB=BLKSIZE=1089,
//             SPACE=(121,(90,90),RLSE)
//SYSLMOD  DD  DSN=IMS.&SYS2DBDLIB(&MBR),DISP=SHR
//SYSUT1   DD  UNIT=SYSDA,DISP=(,DELETE),
//             SPACE=(1024,(100,10),RLSE)

上記のDBDGENプロシージャの最初のステップであるCステップは、コンパイル・ステップであり、OpenFrame HiDBデータベース定義スクリプトをコンパイルするためにDBDGENC0ユーティリティを実行し、オブジェクト・モジュールを生成します。次のLステップは、DFSILNK0ユーティリティを実行するリンクエディット・ステップであり、前のコンパイル・ステップで生成されたオブジェクト・モジュールをシステム・ライブラリにコピーする処理を行います。

2.1. DDの設定

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

項目 説明

SYSIN DD

OpenFrame HiDBデータベース定義スクリプトを含む入力データセットを指定します。

SYSLMOD DD

IMS.DBDLIBなどのDBDブロックを格納するためのPDSデータセットを指定します。

2.2. JCLパラメータ

以下は、JCLパラメータの項目です。

項目 説明

MBR

DBD名を指定します。この名前は、DBD文のNAMEパラメータに指定した名前と同じである必要があります。

SOUT

SYSOUT DD文に割り当てられるクラスを指定します。(デフォルト値: 'A')

SYS2

IMSシステム・データセットの2番目の修飾子(qualifier)を指定します。(例:SYS2='IMSA.')

2.3. コマンドの設定

DBDGENでは、DBD制御文を使用してデータベース・スキーマを定義します。

以下は、DBD制御文についての説明です。

制御文 説明

DBD文

データベース全体に関する情報を指定します。

DATASET文

データベースを構成するデータセットの情報を指定します。

AREA文

DEDBデータベースはAREA文を使用してデータセットの情報を指定します。

SEGM文

直前のDATASET文で定義されたデータセットに含まれるセグメント情報を指定します。

LCHILD文

直前のSEGM文で定義されたセグメントの論理的な子セグメント情報を指定します。

FIELD文

直前のSEGM文で定義されたセグメントのフィールド情報を指定します。

XDFLD文

二次索引関係でのセグメント検索フィールド情報を指定します。

DBDGEN文

データベース定義の終了を示します。

END文

制御文の終了を示します。

FINISH文

任意指定であり、互換性のために存在します。

DBD制御文の記述順序は以下の規則に従います。

  • DBD文はDBD制御文の先頭に記述します。

  • DBD文の後には必ずDATASET文を記述します。(DEDBの場合は、DATASET文の代わりにAREA文を使用します)

  • DBD文に続いて1つ以上のDATASET文、SEGM文、FIELD文が存在する必要があります。ただし、論理データベース定義ではFIELD文、LCHILD文が存在してはなりません。

  • HDAM、HIDAM、HISAM(SHISAM)以外のデータベース定義では、XDFLD文を使用してはいけません。

  • FIELD文は、二次索引関係を指定するLCHILD文の後に記述してはいけません。

  • デフォルト索引を指定するLCHILD文、または論理関係を指定するLCHILD文は、二次索引関係を指定するLCHILD文の後に指定してはなりません。

以下は、DBD制御文の入力順序です。

DBD ...................... データベース定義の開始
  DATASET ................ データセット情報
    SEGM ................. セグメント情報
      FIELD .............. フィールド情報
      LCHILD ............. 論理子情報
      XDFLD .............. セグメント検索フィールド
    SEGM
      FIELD
    SEGM
      FIELD
DBDGEN ................... データベース定義の終了
END ...................... 制御文の終了

2.3.1. DBD文

記述しているデータベース名を指定し、データベース構造のDL/I情報を提供します。1つのデータベース定義スクリプトには1つのDBD文を使用できます。

  • HSAM(SHSAM)データベース

    以下は、HSAM(SHSAM)データベースのDBD文です。

    DBD NAME=dbname1,ACCESS={HSAM|SHSAM}
  • HISAM(SHISAM)データベース

    以下は、HISAM(SHISAM)データベースのDBD文です。

    DBD NAME=dbname1,ACCESS=({HISAM|SHISAM}[,VSAM])
      [,PASSWD={NO|YES}]
      [,VERSION='n']
  • HDAMデータベース

    以下は、HDAMデータベースのDBD文です。

    DBD NAME=dbname1,ACCESS=(HDAM,{VSAM|OSAM})
       ,RMNAME=(mod[,anch,rbn,bytes])
      [,PASSWD={NO|YES}]
      [,VERSION='n']
  • HIDAMデータベース

    以下は、HIDAMデータベースのDBD文です。

    DBD NAME=dbname1,ACCESS=(HIDAM,{VSAM|OSAM})
      [,PASSWD={NO|YES}]
      [,VERSION='n']
  • DEDBデータベース

    以下は、DEDBデータベースのDBD文です。

    DBD NAME=dbname1,ACCESS=DEDB
       ,RMNAME=(mod,...XCI)
      [,VERSION='n']
  • INDEXデータベース

    以下は、INDEXデータベースのDBD文です。

    DBD NAME=(dbname1[,dbname2]),ACCESS=(INDEX,VSAM)
      [,PASSWD={NO|YES}]
  • LOGICALデータベース

    以下は、LOGICALデータベースのDBD文です。

    DBD NAME=dbname1,ACCESS=LOGICAL

以下は、DBD文のパラメータについての説明です。

項目 説明

NAME

記述しているデータベースのDBD名を指定します。ただし、PSB名と異なる名前を使用する必要があります。

ACCESS

データベースで使用されるDL/Iとデータセットのアクセス方式を指定します。

以下の方式を使用できます。

  • HSAM:HSAMアクセス方式を使用します。

  • SHSAM:SHSAMアクセス方式を使用します。SHSAMは1つのセグメント・タイプのみを持つことができ、データを保存する際、セグメント接頭部情報域は不要です。

  • HISAM:HISAMアクセス方式を使用します。

  • SHISAM:SHISAMアクセス方式を使用します。SHISAMは1つのセグメント・タイプのみを持つことができ、データを保存する際、セグメント接頭部情報域は不要です。

  • HDAM:HDAMアクセス方式を使用します。

  • HIDAM:HIDAMアクセス方式を使用します。

  • DEDB:DEDBアクセス方式を使用します。

  • INDEX:HIDAMデータベースの1次索引を定義するか、HDAMまたはHIDAMデータベースの二次索引を定義するときに使用します。

  • LOGICAL:現在記述しているデータベースがLOGICALデータベースであることを意味します。

PASSWD

VSAMパスワードとしてDBD名を使用するかどうかを指定します。(デフォルト値: NO)

VERSION

DBDを識別できる文字列を最大255文字まで指定できます。

RMNAME

ACCESSパラメータ値としてHDAMまたはDEDBが指定された場合、データベースに格納されるデータを管理する情報を指定します。

この情報によってランダマイザー・モジュールの動作方式が決まります。

OpenFrame HiDBではVSAMパスワードを使用しません。

2.3.2. DATASET文

DATASET文はデータベース内のデータセット・グループを定義します。

  • HSAM(SHSAM)データベース

    以下は、HSAM(SHSAM)データベースのためのDATASET文です。

    DATASET DD1=ddname1,DD2=ddname2
          [,BLOCK=(blkfact1,blkfact2)]
          [,RECORD=(reclen1,reclen2)]
  • HISAM(SHISAM)データベース

    以下は、HISAM(SHISAM)データベースのためのDATASET文です。

    DATASET DD1=ddname1,OVFLW=ddname3
          [,BLOCK=(blkfact1,blkfact2)]
          [,SIZE=(size1,size2)]
          [,RECORD=(reclen1,reclen2)]

    SHISAMデータベースはOVFLWを記述しません。

  • HDAM / HIDAMデータベース

    以下は、HDAMまたはHIDAMデータベースのためのDATASET文です。

    DATASET DD1=ddname1
          [,BLOCK=size0]
          [,SIZE=(,size1)]
          [,SCAN=cyls]
          [,FRSPC=(fbff,fspf)]
          [,SEARCHA=0|1|2]
  • INDEXデータベース

    以下は、INDEXデータベースのためのDATASET文です。

    DATASET DD1=ddname1,OVFLW=ddname3
          [,BLOCK=(blkfact1,blkfact2)]
          [,SIZE=(size1,size2)]
          [,RECORD=(reclen1,reclen2)]
  • LOGICALデータベース

    以下は、LOGICALデータベースのDATASET文です。

    DATASET LOGICAL

以下は、DATASET文のパラメータについての説明です。

項目 説明

DD1

データセット・グループの最初のデータセットのDD名を指定します。

データベース・タイプによって次のような意味を持ちます。

  • HSAM:入力データセットのDD名を指定します。

  • SHSAM:入力データセットのDD名を指定します。

  • HISAM:デフォルト・データセットのDD名を指定します。

  • SHISAM:デフォルト・データセットのDD名を指定します。

  • HDAM:データセットのDD名を指定します。

  • HIDAM:データセットのDD名を指定します。

  • INDEX:デフォルト・データセットのDD名を指定します。

  • LOGICAL:無効なパラメータです。

DD2

HSAM(SHSAM)データベース・タイプの出力データセットのDD名を指定します。

OVFLW

HISAMデータベースまたはINDEXデータベース・タイプのオーバーフロー・データセットのDD名を指定します。

BLOCK

ブロック化因数(blocking factors)を指定します。詳細については下の表を参照してください。

RECORD

オプション・パラメータであり、論理レコードのサイズを指定します。詳細については下の表を参照してください。

SIZE

DBDGENプロシージャーでVSAM制御間隔のサイズを再定義するときに使用します。

SCAN

セグメントを挿入する際、空きスペースを検索するためにスキャンされるデバイスのシリンダー数を指定します。OpenFrame HiDBでは構文のみチェックし、機能はサポートされません。

FRSPC

HDAMまたはHIDAMデータベース・タイプで使用可能な空きスペースの量を指定します。

SEARCHA

セグメントを挿入するとき、空きスペースを検索するアルゴリズム・タイプを指定します。OpenFrame/HiDBでは構文のみチェックし、機能はサポートされません。

LOGICAL

LOGICALデータベースが定義されていることを示します。

以下は、前述のBLOCKとRECORDパラメータについての説明です。

  • HSAM(SHSAM)データベース

    HSAM(SHSAM)は非ブロッキングI/Oを使用します。したがって、LRECLとBLKSIZEの値を同一に指定します。

    パラメータ 説明

    BLOCK

    • blkfact1:入力データセットのブロック化因数を指定します。(常に1に指定)

    • blkfact2:出力データセットのブロック化因数を指定します。(常に1に指定)

    RECORD

    • reclen1:入力データセットのレコード・サイズを指定します。

    • reclen2:出力データセットのレコード・サイズを指定します。

  • HISAM(SHISAM)、INDEXデータベース

    パラメータ 説明

    BLOCK

    • blkfact1:デフォルト・データセットのブロック化因数を指定します。

    • blkfact2:オーバーフロー・データセットのブロック化因数を指定します。

    RECORD

    • reclen1:デフォルト・データセットのレコード・サイズを指定します。

    • reclen2:オーバーフロー・データセットのレコード・サイズを指定します。

  • HDAM / HIDAMデータベース

    パラメータ 説明

    BLOCK

    オーバーヘッドを除いたVSAM制御間隔サイズをsize0に指定します。VSAMデータセットのデフォルト・オーバーヘッドの値は5です。

    RECORD

    指定しても無視されます。

2.3.3. AREA文

DEDBデータベースは、AREA文を使用してデータを格納するデータセット領域を定義します。DEDBを定義するDBDGENスクリプトを作成する際、すべてのAREA文はDBD文と最初のSEGM文の間に位置させる必要があります。

以下は、DEDBデータベースのAREA文です。

AREA DD1=ddname1
   [,DEVICE=nnnn]
    ,SIZE=size1
    ,UOW=(number1,overflow1)
    ,ROOT=(number2,overflow2)
項目 説明

DD1

定義されるエリアのDD名を指定します。

DEVICE

物理的な記憶装置のデバイス・タイプを指定します。

指定しない場合のデフォルト値は3380です。

SIZE

制御間隔のサイズを指定します。

512B、1KB、2KB、4KB、8KB、28KBを指定できます。

VSAMデータセットの制御間隔のサイズと同一に指定します。

UOW

1つのUOW(Unit of Work)に使用される制御間隔の数を指定します。

  • number1:1つのUOWに使用される制御間隔の数です。(2~32767の数字)

  • overflow1:同じUOW内にあるオーバーフロー制御間隔の数です。number1に指定された数値より小さい値を指定します。

ROOT

DEDBエリアの属性を定義します。

  • number2:DEDBエリアで使用されるUOWの数です。

  • overflow2:独立オーバーフロー部に使用されるUOWの数です。

2.3.4. SEGM文

SEGM文はデータベースのセグメントを定義します。特定のデータベース内でセグメントの階層と物理的な属性、および他のセグメントとの関係などを定義します。

  • HSAM(SHSAM)データベース

    以下は、HSAM(SHSAM)データベースのSEGM文です。

    SEGM NAME=segname1
        ,PARENT=segname2
        ,BYTES=max_bytes
       [,FREQ=frequency]
  • HISAM(SHISAM)データベース

    以下は、HISAM(SHISAM)データベースのSEGM文です。

    SEGM NAME=segname1
        ,PARENT=(segname2[(lpsegname,[{VIRTUAL|PHYSICAL}],dbname1)])
        ,BYTES=max_bytes[,min_bytes]
       [,FREQ=frequency]
       [,POINTER|PTR={LPARNT|CTR|PAIRED}]
       [,RULES=([{L|P|V}{L|P|V|B}{L|P|V}],[{LAST|FIRST|HERE}])]
  • HDAMまたはHIDAMデータベース

    以下は、HDAMまたはHIDAMデータベースのSEGM文です。

    SEGM NAME=segname1
        ,PARENT=(segname2[,{SNGL|DBLE}][,(lpsegname,[{VIRTUAL|PHYSICAL}],dbname1)])
        ,BYTES=max_bytes[,min_bytes]
       [,POINTER|PTR={HIER|HIERBWD|TWIN|TWINBWD|NOTWIN}
                    ,{LTWIN|LTWINBWD},{LPARNT|CTR|PAIRED}]
       [,RULES=([{L|P|V}{L|P|V|B}{L|P|V}],[{LAST|FIRST|HERE}])]
  • DEDBデータベース

    以下は、DEDBデータベースのSEGM文です。

    SEGM NAME=segname1
        ,PARENT=(segname2[,{SNGL|DBLE}])
        ,BYTES=max_bytes,min_bytes,TYPE={DIR|SEQ}
       [,RULES={HERE|LAST|FIRST}]
  • INDEXデータベース

    以下は、INDEXデータベースのSEGM文です。

    SEGM NAME=segname1
       [,PARENT=0]
        ,BYTES=max_bytes

以下は、SEGM文のパラメータについての説明です。

項目 説明

NAME

現在定義しているセグメント名を指定します。

PARENT

現在定義しているセグメントの親セグメントを指定します。物理親セグメントと論理親セグメントを指定することができます。

BYTE[S]

セグメントのデータ部のサイズを指定します。最大32760まで指定できます。

  • max_bytes:セグメントの最大データ・サイズを指定します。固定長と可変長セグメントの両方とも指定する必要があります。

  • min_bytes:セグメントの最小データ・サイズを指定します。可変長セグメントの場合のみ指定します。max_bytesに指定した値と同じ値を指定すると、可変長セグメントとして処理されません。

FREQ

親セグメントの各インスタンスに存在する子セグメント・インスタンスの平均推定値を指定します。

POINTER

現在定義しているセグメントのデータの先頭に格納されるポインターを指定します。このポインターは現在のセグメントを親セグメントまたは兄弟セグメントと関連付けます。

以下のポインター・タイプのいずれかの値を持つことができます。

  • HIER [H]:4バイトの階層順方向ポインターを持ちます。

  • HIERBWD [HB]:4バイトの階層順方向ポインターと4バイトの階層逆方向インターを持ちます。階層逆方向ポインターは削除時のパフォーマンスを向上させます。

  • TWIN [T]:4バイトの物理兄弟順方向ポインターを持ちます。

  • TWINBWD [TB]:4バイトの物理兄弟順方向ポインターと4バイトの物理兄弟逆方向ポインターを持ちます。兄弟逆方向ポインターは削除時のパフォーマンスを向上させます。

  • NOTWIN [NT]:物理兄弟順方向ポインターを使用しないように設定します。物理親セグメントが2つ以上の子セグメントを持たない場合は、NOTWINを使用することができます。

  • LTWIN [LT]:実論理子(Real Logical Child)セグメントを定義するときに使用されます。4バイトの論理兄弟順方向ポインターと4バイトの論理兄弟逆方向ポインターを持ちます。論理子の削除時に高いパフォーマンスを発揮します。

  • LPARNT [LP]:4バイトの論理親ポインターを持ちます。

  • CTR [C]:4バイトのカウンター・フィールドを持ちます。カウンターは、ポインターで接続されていないHISAMデータベースの論理親セグメントに必要です。

  • PAIRED:このセグメントが双方向論理関係(Bidirectional Logical Relationship)に含まれていることを示します。

RULES

セグメントの追加(Insert)、削除(Delete)、変更(Replace)コマンドを実行する際の規則を指定します。

  • FIRST:新しいセグメント・インスタンスが物理兄弟セグメントの前に挿入されます。

  • LAST:新しいセグメント・インスタンスが物理兄弟セグメントの後ろに挿入されます。

  • HERE:新規セグメント・インスタンスが現在の物理兄弟セグメントの前に挿入されます。

TYPE

DEDBデータベースの従属セグメントのタイプを指定します。

以下の2つタイプのいずれかを指定できます。

  • SEQ:現在のセグメントを順次独立セグメント(Sequential Dependent Segment)としてに指定します。

  • DIR:現在のセグメントを直接独立セグメント(Direct Dependent Segment)として指定します。

SOURCE

以下の2つの目的で使用されます。

  • 仮想論理子セグメントを定義する際、実論理子セグメントと関連付けるために使用します。

  • 論理データベースのセグメントを定義する際、物理データベースのセグメントと関連付けるために使用します

2.3.5. LCHILD文

LCHILD文は、2つのセグメント間の論理関係、2つのセグメント間のHIDAM1次索引または二次索引を定義します。

  • HISAM(SHISAM)データベース

    以下は、HISAM(SHISAM)データベースのLCHILD文です。

    LCHILD NAME=(segname1,dbname)
         [,POINTER|PTR={DBLE|NONE|SYMB}]
         [,PAIR=segname2]
         [,RULES={LAST|FIRST|HERE}]
  • HDAMまたはHIDAMデータベース

    以下は、HDAMまたはHIDAMデータベースのLCHILD文です。

    LCHILD NAME=(segname1,dbname)
         [,POINTER|PTR={DBLE|NONE|INDX|SYMB}]
         [,PAIR=segname2]
         [,RULES={LAST|FIRST|HERE}]
  • INDEXデータベース

    以下は、INDEXデータベースのLCHILD文です。

    LCHILD NAME=(segname1,dbname)
         [,POINTER|PTR={SNGL|SYMB}]
          ,INDEX=fldname

以下は、LCHILD文のパラメータについての説明です。

項目 説明

NAME

segname1に論理子、索引ポインターまたは索引ターゲットの名前を指定します。dbnameには、segname1に指定したセグメントが定義されているデータベース名を指定します。

POINTER

論理関係または索引関係で使用されるポインターを指定します。

  • SNGL:4バイト論理子の最初のポインターが保存されます。論理関係または索引関係に使用されます。

  • DBLE:論理親セグメントに4バイト論理子の最初のポインターと4バイト論理子の最後のポインターが保存されます。

  • NONE:論理親セグメントに論理子ポインターが保存されません。

  • INDX:HIDAMデータベースで特定のセグメントと二次索引と接続、およびルート・セグメントと1次索引の接続に使用されます。

  • SYMB:HISAM、HDAM、HIDAMデータベースで二次索引の接続のために使用されます。ターゲット索引DBDのLCHILD文にも明示されている必要があります。

PAIR

双方向論理関係で物理的または仮想的なペア・セグメントを指定するために使用されます。

RULES

論理関係における論理子兄弟間の挿入順序を指定します。

  • FIRST:新しい論理インスタンスはすべての論理兄弟インスタンスの前に挿入されます。

  • LAST:新しい論理インスタンスはすべての論理兄弟インスタンスの後ろに挿入されます。

  • HERE:新しい論理インスタンスは現在の論理兄弟インスタンスの前に挿入されます。

INDEX

INDEXデータベースのLCHILD文で使用されます。

fldnameは、HIDAMの1次索引のルート・セグメントを指定するか、HIDAMの二次索引のXDFLDを示します。

2.3.6. FIELD文

FIELD文は、特定のセグメント内のフィールドを定義します。

  • HSAM(SHSAM)データベース

    以下は、HSAM(SHSAM)データベースのFIELD文です。

    FIELD NAME=(fldname1[,SEQ,{U|M}])
         ,BYTES=bytes
         ,START=startpos
        [,TYPE={C|X|P}]
  • HISAM(SHISAM)、HDAM、HIDAMデータベース

    以下は、HISAM(SHISAM)、HDAM、HIDAMデータベースのFIELD文です。

    FIELD NAME={(fldname1[,SEQ,{U|M}])|systrelfldname}
         ,BYTES=bytes
         ,START=startpos
        [,TYPE={C|X|P}]
  • DEDBデータベース

    以下は、DEDBデータベースのFIELD文です。

    FIELD NAME=(fldname1[,SEQ,U])
         ,BYTES=bytes
         ,START=startpos
        [,TYPE={C|X|P}]
  • INDEXデータベース

    以下は、INDEXデータベースのFIELD文です。

    FIELD NAME=(fldname1[,SEQ,{U|M}])
         ,BYTES=bytes
         ,START=startpos
        [,TYPE={C|X|P}]

以下は、FIELD文のパラメータについての説明です。

項目 説明

NAME

特定のセグメント内で定義されるフィールド名を指定します。

  • SEQ:現在定義されるフィールドが順次フィールドであることを示します。

  • U, M:順次フィールド・タイプを指定します。Uは順次フィールドに一意の値のみ保存されることを、Mは順次フィールドに同じ値を持つ項目を保存できることを意味します。

  • systrelfldname:システム関連フィールドを定義します。二次索引で一意のキーを作成するために使用されます。CKまたはSKの2つのタイプがあります。

BYTE[S]

現在定義しているフィールド・サイズを指定します。

START

現在定義しているフィールドの開始位置を指定します。

TYPE

現在定義しているフィールドのデータ・タイプを指定します。

以下の値を指定できます。

  • C:英数字データまたはデータ・タイプの組み合わせ(デフォルト値)

  • P:パック10進数データ

  • X:16進データ

2.3.7. XDFLD文

XDFLD文は、二次索引関係で使用される索引フィールドを定義します。

以下は、HISAM(SHISAM)、HDAMまたはHIDAMデータベースのXDFLD文です。

XDFLD NAME=fldname
    [,SEGMENT=segname]
    [,CONST=char]
     ,SRCH=list1
    [,SUBSEQ=list2]
    [,DDATA=list3]
    [,NULLVAL=value1]
項目 説明

NAME

索引データ・フィールド名を指定します。

SEGMENT

索引ソース・セグメント名を指定します。

SRCH

索引ソース・セグメントのフィールド・リストを指定します。

SUBSEQ

二次索引のサブシーケンス・フィールドを指定します。

DDATA

二次索引の重複データ・フィールドを指定します。

OpenFrame HiDBでは、XDFLD文でCONSTとNULLVALパラメータはサポートされません。

2.3.8. DBDGEN、END、FINISH文

DBD作成制御文には3つの追加制御文があります。

区分 説明

DBDGEN文

DBD作成制御文の最後を示します。

END文

アセンブリ入力文の最後を示します。

FINISH文

オプションであり、互換性のために提供されます。

DBDGEN文とEND文は必須であり、FINISH文はオプションです。

2.4. 使用例

以下は、DBDGENプロシージャーを使用してHIDAMデータベースを定義するJCLの例です。

//DBDGEN  JOB MSGLEVEL=1
//       EXEC DBDGEN,MBR=SKILLINV
//C.SYSIN  DD *
       DBD     NAME=SKILLINV,ACCESS=HIDAM
       DATASET   DD1=SKLHIDAM,BLOCK=1648,SCAN=5
*
       SEGM  NAME=SKILL,BYTES=31,PTR=T,PARENT=0
       LCHILD NAME=(INDE,INDEXDB),PTR=INDX
*
       FIELD NAME=(TYPE,SEQ,U),BYTES=21,START=1,TYPE=C
       FIELD NAME=SDCODE,BYTES=10,START=22,TYPE=C
*
       SEGM  NAME=NAME,BYTES=20,PTR=T,PARENT=((SKILL,SNGL))
       FIELD NAME=(STDCLEVL,SEQ,U),BYTES=20,START=1,TYPE=C
*
       SEGM  NAME=EXPR,BYTES=20,PTR=T,PARENT=((NAME,SNGL))
       FIELD NAME=PREVJOB,BYTES=10,START=1,TYPE=C
       FIELD NAME=CLASSIF,BYTES=10,START=11,TYPE=C
*
       SEGM  NAME=EDUC,BYTES=75,PTR=T,PARENT=((NAME,SNGL))
       FIELD NAME=GRADLEVL,BYTES=10,START=1,TYPE=C
       FIELD NAME=SCHOOL,BYTES=65,START=11,TYPE=C
*
       DBDGEN
       FINISH
       END
/*

2.5. 戻りコード

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

  • 正常に実行された場合

    戻りコード0を返します。

  • エラーが発生した場合

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

    コード 説明

    12

    回復不能エラーです。次のようなエラーがあります。

    • SYSLIN DDまたはSYSLMOD DDが指定されていない場合

    • SYSLIN DDまたはSYSLMOD DDのタイプが正しくない場合

    • SYSIN DD文の構文エラー

    16

    システム・エラーです。次のようなエラーがあります。

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

    • SYSLIN DDまたはSYSLMOD DDのオープン・エラー

    • SYSIN DDまたはSYSLIN DDの読み込みエラ

3. PSBGEN

PSBGENは、アプリケーション側から見たHiDBデータベースの論理構造、およびデータ・コミュニケーションとのインターフェース・ブロックを定義するために使用するユーティリティ・プログラムです。定義されたプログラム・アクセス仕様(Program Access Sepcification)ブロックはシステム・ライブラリに格納されます。

以下は、PSBGENC0とDFSILNK0を実行させるPSBGENプロシージャーの内容です。2つのステップで構成されています。

//       PROC  MBR=TEMPNAME,SOUT=A,RGN=4M,SYS2=
//C      EXEC  PGM=PSBGENC0,REGION=&RGN,PARM='OBJECT,NODECK'
//SYSLIB   DD  DSN=IMS.&SYS2MACLIB,DISP=SHR
//SYSLIN   DD  UNIT=SYSDA,DISP=(,PASS),
//             SPACE=(80,(100,100),RLSE),
//             DCB=(BLKSIZE=80,RECFM=F,LRECL=80)
//SYSPRINT DD  SYSOUT=&SOUT,DCB=BLKSIZE=1089,
//             SPACE=(121,(300,300),RLSE,,ROUND)
//SYSUT1   DD  UNIT=SYSDA,DISP=(,DELETE),
//             SPACE=(CYL,(10,5))
//L      EXEC  PGM=DFSILNK0,PARM='XREF,LIST',COND=(0,LT,C)
//SYSLIN   DD  DSN=*.C.SYSLIN,DISP=(OLD,DELETE)
//SYSPRINT DD  SYSOUT=&SOUT,DCB=BLKSIZE=1089,
//             SPACE=(121,(90,90),RLSE)
//SYSLMOD  DD  DSN=IMS.&SYS2PSBLIB(&MBR),DISP=SHR
//SYSUT1   DD  UNIT=SYSDA,DISP=(,DELETE),
//             SPACE=(1024,(100,10),RLSE)

上記のPSBGENプロシージャーの第1ステップのCはコンパイル・ステップです。SYSINで入力されたPSB定義スクリプトをコンパイルするためにPSBGENC0を実行させ、オブジェクト・モジュールを作成します。第2ステップのLはリンク-編集(Link-Edit)ステップです。前のコンパイル・ステップで作成されたオブジェクト・モジュールをシステム・ライブラリにコピーします。

3.1. DDの設定

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

項目 説明

SYSIN DD

PSBコンパイラーを使用してコンパイルするためのPSBスクリプト入力データセットを指定します。

SYSLMOD DD

IMS.PSBLIBなどのPSBブロックを格納するためのPDSを指定します。

3.2. JCLパラメータ

以下は、JCLのパラメータ項目です。

項目 説明

MBR

作成するPSB名を指定します。この名前は、PSBGEN文のPSBNAMEパラメータに指定した名前と同じである必要があります。

SOUT

SYSOUT DD文に割り当てるクラスを指定します。(デフォルト値: 'A')

SYS2

IMSシステム・データセットの第2レベルの修飾子を指定します。(例:SYS2='IMSA.')

3.3. コマンドの設定

PSBGENでは、PSB制御文を使用してPSBブロックを作成します。

以下は、PSBGENを使用する際のPSB制御文の入力順序です。

PCB TYPE=TP .............. 論理端末のPCB情報
PCB TYPE=DB .............. データベースのPCB情報
  SENSEG
    SENFLD
    SENFLD
PCB TYPE=DB
  SENSEG
  SENSEG
PSBGEN ................... PSBブロック定義の終了
END ...................... 制御文の終了

以下は、PSB制御文についての説明です。

制御文 説明

代替PCB文

現在の入力メッセージの送信元以外の宛先を指定します。(PSBGENを使用する場合)

データベースPCB文

DL/IまたはFastPathデータベースのためのPCBを記述します。

SENSEG文

アプリケーションが使用するデータベース・セグメントを宣言します。

SENFLD文

SENSEGで指定されたセグメントでアプリケーションが使用するフィールドを指定します。

PSBGEN文

PSBブロック定義の終了を指定します。

END文

制御文の終了を指定します。

3.3.1. 代替PCB文

現在の入力メッセージの送信元以外の宛先を指定します。(PSBGENを使用する場合)

以下は、代替PCB文の構文です。

PCB TYPE=TP
  [,LTERM|NAME=name]
  [,ALTRESP={NO|YES}]
  [,SAMETRM={NO|YES}]
  [,MODIFY={NO|YES}]
  [,EXPRESS={NO|YES}]
  [,PCBNAME=pcbname]
  [,LIST={YES|NO}]
項目 説明

TYPE

すべての代替PCBに必須のパラメータです。

LTERM

メッセージが出力される論理端末名またはトランザクション・コードを指定します。

ALTRESP

入出力PCBの代わりに代替PCBを使用できるかどうかを指定します。

SAMETRM

論理端末が実際の物理端末に割り当てられているかどうかを指定します。

MODIFY

アプリケーション内で代替PCBを変更できるかどうかを指定します。

EXPRESS

アプリケーションが異常終了した際、代替PCBからのメッセージを宛先の端末に送信するのか、あるいは削除するのかを指定します。

PCBNAME

PCBの名前を指定します。アセンブラー・ラベルに置き換えられます。

LIST

アプリケーションが実行される際、入り口でアプリケーションに渡されるPCBリストにこのPCBを含めるかどうかを指定します。

3.3.2. データベースPCB文

DL/IまたはFastPathデータベースのためのPCBを記述します。

以下は、データベースPCB文の構文です。

PCB TYPE=DB
   ,DBDNAME|NAME=name
  [,PCBNAME=pcbname]
  [,PROCOPT=nnnn]
  [,SB={NO|COND}]
   ,KEYLEN=value
  [,POS={SINGLE|MULTIPLE}]
  [,PROCSEQ=index_dbname]
  [,VIEW=MSDB]
  [,LIST={YES|NO}]
項目 説明

TYPE

すべてのDL/IデータベースPCBに必須のパラメータです。

DBDNAME

物理データベース名を指定します

PCBNAME

PCBの名前を指定します。アセンブラー・ラベルに置き換えられます。

PROCOPT

PCB処理パラメータを指定します。

最大4つのオプションをアルファベット文字で指定できます。アルファベット文字の意味は次のとおりです。

  • G : Getオプションです。

  • I : 挿入オプションです。(HSAM(SHSAM)では指定できません)

  • R : 置換オプションです(Getオプションが含まれています。HSAM(SHSAM)では指定できません)

  • D : 削除オプションです(Getオプションが含まれています。HSAM(SHSAM)では指定できません)

  • A : Get、挿入、置換、削除の4つのオプションが含まれます。(デフォルト、HSAM(SHSAM)では指定できません)

  • L : データベースのロード・オプションです。(HIDAMを除く)

  • GS : 昇順でのみセグメントを読み取ります。(HSAM(SHSAM)の場合のみ)

  • LS : 昇順でのみセグメントをロードします。(HIDAMの場合)

  • O : アプリケーション・プログラムがデータベースに読み取り専用でアクセスするためのオプションです。他のプログラムによって保留または修正中のセグメントであっても、待機することなく直ちにアクセスすることができます。ただし、Oオプションを指定したプログラムでは、セグメントを保留または修正することができないため、Gオプションと一緒に指定する必要があります。

  • N : 読み取り専用アプリケーション・プログラムが他のプログラムによって修正あるいは削除されたセグメント情報を保持していると、無効なポインターで他のセグメントを参照する場合があります。そのとき、アプリケーション・プログラムは直ちに異常終了します。Nオプションを指定すると、異常終了の代わりにGG状態コードがプログラムに戻され、処理を終了すか、別のセグメントを読み取って処理を続行するかを決定することができます。Nオプションは、Oオプションと一緒に指定する必要があります。

SB

順次バッファリングを使用するかどうかを指定します。未サポート機能です。

KEYLEN

最大の連結キーの長さを指定します。(1~3825)

POS

論理データ構造の単一または複数の位置付けを指定します。

以下のような略字を使用できます。

  • SINGLE : 最後にアクセスしたセグメントの位置のみを維持します。したがって、新しいセグメントを検索した場合、以前のセグメントの位置情報は削除されます。(デフォルト)

  • MULTIPLE : アクセスしているセグメントの階層パスにあるすべてのセグメントの位置を維持します。したがって、階層パスに存在する各セグメントへの並列検索を行う際、GUを呼び出して位置を再設定する必要がありません。(HSAMでは指定できず、HDAMとHIDAMでのみサポートされます)

PROCSEQ

データベースにアクセスするための二次索引の名前を指定します。

VIEW

MSDBコミット・ビューを指定するために使用します。未サポート機能です。

LIST

アプリケーションが実行される際、入り口でアプリケーションに渡されるPCBリストにこのPCBを含めるかどうかを指定します。

複数の位置付けについての詳細は、IBMの『IMS アプリケーション・プログラミング: データベース・マネージャー』の「Using Multiple Processing」を参照してください。

3.3.3. SENSEG文

SENSEG文は、階層的に連結されたデータ・セグメントを定義します。センシティブ・セグメントを指定する際は、階層パス上にある上位レベルのすべてのセグメントがセンシティブ・セグメントである必要があります。

以下は、SENSEG文の構文です。

SENSEG NAME=name
      ,PARENT=name
     [,PROCOPT=nnnn]
     [,INDICES|SIENTRY=list1]
項目 説明

NAME

DBDの作成時にSEGM文で定義したセグメント名を指定します。

PARENT

現在のセグメントの親セグメントを指定します。

PROCOPT

関連付けられたアプリケーションが使用するセグメント処理パラメータを指定します。

特定のセグメントのみ読み込むか、変更できないようにセキュリティ処理を行うことができます。最大4文字以内で指定します。

このパラメータを指定しない場合のデフォルト値は、PCB文のPROCOPTの値に従います。

  • G : Getオプションです。

  • I : 挿入オプションです。(HSAM(SHSAM)では指定できません)

  • R : 置換オプションです。(Getオプションが含まれています。HSAM(SHSAM)では指定できません)

  • D : 削除オプションです。(Getオプションが含まれています。HSAM(SHSAM)では指定できません)

  • A : Get、挿入、置換、削除の4つのオプションが含まれます。(デフォルト、HSAM(SHSAM)では指定できません)

  • L : データベースのロード・オプションです。(HIDAMを除く)

  • LS : 昇順でのみセグメントをロードします。(HIDAMの場合)

INDICES

索引セグメントへの検索フィールドが含まれている二次索引を指定します。

3.3.4. SENFLD文

SENSEG文と一緒に使用されます。アプリケーションで使用できるフィールドを指定します。ただし、SENFLD文を指定すると、そのセグメントに対してはDLET/REPL/ISRT呼び出しを発行できません。

以下は、SENFLD文の構文です。

SENFLD NAME=name,
       START=startpos
     [,REPLACE|REPL={YES|NO}]
項目 説明

NAME

DBDの作成時にFIELD文で定義したフィールド名を指定します

START

ユーザー入力域内でフィールドの開始位置を指定します。以下は、指定する際の注意事項です。

  • (開始位置+フィールド長)が32767を超えてはなりません。

  • 他のSENFLD文とフィールド領域が重複しないように指定します。フィールド領域が重複すると、アプリケーション・データ領域のデータが破損する可能性があります。

REPLACE

REPLACE要求によって指定したフィールドを変更できるようにするかどうかを指定します。

3.3.5. PSBGEN文

PSBGEN文はアプリケーションの属性を指定します。

以下は、PSBGEN文の構文です。

PSBGEN PSBNAME=name
     [,LANG={COBOL|PL/I|ASSEM|PASCAL|blank}]
     [,MAXQ={0|nr}]
     [,CMPAT={NO|YES}]
     [,IOASIZE=value]
     [,SSASIZE=value]
     [,IOEROPN={n|(n,WTOR)}]
     [,OLIC={NO|YES}]
     [,GSROLBOK={NO|YES}]
     [,LOCKMAX={0|n}]
項目 説明

PSBNAME

現在定義しているPSBブロック名を指定します。

LANG

メッセージ・プログラムまたはバッチ・プログラムが作成されたコンパイラー言語を指定します。

以下のような略字を使用できます。

  • ASSEMBLY : AまたはASSEM

  • COBOL : C

  • PL/I : PまたはPLI

MAXQ

Qxコマンド・コードを含むデータベース呼び出しの最大数を指定します。

CMPAT

BMPプログラムまたはメッセージ・プログラムでの互換性を示します。CMPAT=YESが指定された場合、該当のPSBの先頭に入出力PCBが含まれていると見なされます。

IOASIZE

アプリケーションで使用される入出力域の最大サイズを指定します。

SSASIZE

アプリケーションで使用されるSSAの最大長を指定します。

LOCKMAX

アプリケーションが同時に取得できるロックの最大数を指定します。

OpenFrame HiDBでは、PSBGEN文のIOEROPN、OLIC、GSROLBOKパラメータはサポートされません。

3.3.6. END文

制御文の終了を指定します。

3.4. 使用例

以下は、PSBGENプロシージャーを使用してPSBブロックを作成するJCL例です。

//PSBGEN  JOB MSGLEVEL=1
//       EXEC PSBGEN,MBR=APPLPGM1
//C.SYSIN  DD *
       PCB    TYPE=TP,NAME=OUTPUT1,PCBNAME=OUTPCB1
       PCB    TYPE=TP,NAME=OUTPUT2,PCBNAME=OUTPCB2
       PCB    TYPE=DB,DBDNAME=PARTMSTR,PROCOPT=A,KEYLEN=100
       SENSEG NAME=PARTMAST,PARENT=0,PROCOPT=A
       SENSEG NAME=CPWS,PARNET=PARTMAST,PROCOPT=A
       SENSEG NAME=POLN,PARENT=PARTMAST,PROCOPT=A
       SENSEG NAME=OPERTON,PARENT=PARTMAST,PROCOPT=A
       SENSEG NAME=INVSTAT,PARENT=OPERTON,PROCOPT=A
       SENSEG NAME=OPERSGMT,PARENT=OPERTON
       PSBGEN LANG=COBOL,PSBNAME=APPLPGM1
       END
/*

3.5. 戻りコード

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

  • 正常に実行された場合

    戻りコード0を返します。

  • エラーが発生した場合

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

    コード 説明

    12

    回復不能エラーです。次のようなエラーがあります。

    • SYSLIN DDまたはSYSLMOD DDが指定されていない場合

    • SYSLIN DDまたはSYSLMOD DDのタイプが正しくない場合

    • SYSIN DDスクリプト文に文法エラーが発生した場合

    16

    システム・エラーです。次のようなエラーがあります。

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

    • SYSLIN DDまたはSYSLMOD DDのオープン・エラー

    • SYSIN DDまたはSYSLIN DDの読み込みエラー