OpenFrame HiDB 7.2

本章では、OpenFrame HiDB 7.2変更機能について簡単に説明しています。各機能の詳細ついては、関連マニュアルを参照してください。

1. 変更機能

1.1. EBCDICソート順関連の変更

  • HiDB 7.1では、UTL_OFパッケージを使用してEBCDICのソート順をサポートしていましたが、HiDB 7.2からは、NVARCHAR2型の列を使用してEBCDICのソート順をサポートします。

  • 以下は、HiDB 7.1とHiDB 7.2の内部で実行されるCREATE TABLE文の例です。

    • HiDB 7.1

      CREATE TABLE DMAN0201_SEGMENT1(
       OCC_ID NUMBER(18),
       "K1"   VARCHAR(2 CHAR),
       "K2"   VARCHAR(2 CHAR),
       PD_BIT NUMBER(1),
       LD_BIT NUMBER(1),
       "HIDB_K12" AS
       (UTL_OF.ASC2EBC(RAWTOHEX("K1"), 2, 1) ||
        UTL_OF.ASC2EBC(RAWTOHEX("K2"), 2, 1)),
       CONSTRAINT DMAN0201_SEGMENT1_PK
           PRIMARY KEY(OCC_ID),
       CONSTRAINT DMAN0201_SEGMENT1_UK
           UNIQUE("K1", "K2", OCC_ID))
       TABLESPACE "DEFVOL"
    • HiDB 7.2

      CREATE TABLE DMAN0201_SEGMENT1(
       OCC_ID NUMBER(18),
       "K1"   NVARCHAR2(2),
       "K2"   NVARCHAR2(2),
       PD_BIT NUMBER(1),
       LD_BIT NUMBER(1),
       CONSTRAINT DMAN0201_SEGMENT1_PK
           PRIMARY KEY(OCC_ID),
       CONSTRAINT DMAN0201_SEGMENT1_UK
           UNIQUE("K1", "K2", OCC_ID))
       TABLESPACE "DEFVOL"

1.2. dbdcpybkgenツールの機能を改善

  • DBD内のフィールド領域のうち、オーバーラップする部分とオーバーラップしない部分を別途のフィールドとして持つコピーブックが作成されます。

    たとえば、以下のような物理DBDがある場合

    <DMAN0201>

     DBD NAME=DMAN0201,ACCESS=HDAM
     DATASET DD1=DMAN0201
     SEGM NAME=SEGMENT1,BYTES=(7,6)
     FIELD NAME=(SEG1FLD1,SEQ,U),START=3,BYTES=4
      FIELD NAME=SEG1FLD2,START=6,BYTES=1
     DBDGEN
     FINISH
     END

    dbdcpybkgenツールを実行すると、以下のコピーブックが作成されます。

    <DMAN0201/SEGMENT1.cpy>

          *generated by DBDCPYBKGEN
            01 SEGMENT1.
             03 DATALEN PIC 9(4) COMP.
             03 SEG1FLD1 PIC X(3).
             03 SEG1FLD2 PIC X(1).
             03 HIDBFLD-2 PIC X(1).
  • 索引DBDが索引ソース・セグメントのシステム関連フィールド(フィールド名が/SXまたは/CKで始まるフィールド)を参照する場合は、その部分をフィールドとして持つコピーブックが作成されます。

    たとえば、以下のような物理DBD、索引DBDとコピーブックがある場合

    <DMAN0201>

     DBD NAME=DMAN0201,ACCESS=HDAM
     DATASET DD1=DMAN0201
     SEGM NAME=SEGMENT1,BYTES=4
     FIELD NAME=(K12,SEQ,U),START=1,BYTES=4
     SEGM NAME=SEGMENT2,PARENT=SEGMENT1,BYTES=4
     FIELD NAME=(K34,SEQ,U),START=1,BYTES=4
     SEGM NAME=SEGMENT3,PARENT=SEGMENT2,BYTES=4
     FIELD NAME=(K56,SEQ,U),START=1,BYTES=4
     FIELD NAME=/CK1,START=1,BYTES=2
     FIELD NAME=/CK12,START=1,BYTES=4
     FIELD NAME=/CK123,START=1,BYTES=6
     FIELD NAME=/CK1234,START=1,BYTES=8
     FIELD NAME=/CK12345,START=1,BYTES=10
     LCHILD NAME=(XSGMENT1,XMAN0201),PTR=INDX
     XDFLD NAME=SEG3XFL1,SEGMENT=SEGMENT3,SRCH=/CK12345,SUBSEQ=/CK1
     DBDGEN
     FINISH
     END

    <XMAN0201>

     DBD NAME=XMAN0201,ACCESS=INDEX
     DATASET DD1=XMAN0201
     SEGM NAME=XSGMENT1,BYTES=10
     FIELD NAME=(SEG3XFL1,SEQ,U),START=1,BYTES=10
     LCHILD NAME=(SEGMENT3,DMAN0201),INDEX=SEG3XFL1
     DBDGEN
     FINISH
     END

    <DMAN0201/SEGMENT1.cpy>

            01 SEGMENT1.
             03 K12.
              05 K1 PIC XX.
              05 K2 PIC XX.

    <DMAN0201/SEGMENT2.cpy>

            01 SEGMENT2.
             03 K34.
              05 K3 PIC XX.
              05 K4 PIC XX.

    <DMAN0201/SEGMENT3.cpy>

            01 SEGMENT3.
             03 K56.
              05 K5 PIC XX.
              05 K6 PIC XX.

    索引DBDに対してdbdcpybkgenツールを実行すると、以下のコピーブックが作成されます。

    <XMAN0201/XSGMENT1.cpy>

          *generated by DBDCPYBKGEN
            01 XSGMENT1.
             03 CK12345 PIC X(10).
             03 CK1 PIC X(2).
  • 注意事項

    • HiDB 7.2では、DBD内のすべてのフィールドに対し、指定のフィールドと同じ位置から始まるコピーブック内のフィールドが存在しないか、指定のフィールドと同じ位置で終わるコピーブック内のフィールドが存在しない場合は、エラーを出力します。つまり、コピーブックのフィールド構成とDBDのフィールド構成が一致する必要があります。

    • 移行に使用されたコピーブックのフィールド構成がDBDのフィールド構成と異なる場合は、DBDのフィールド範囲に合わせてコピーブックのフィールドをユーザーが直接分割するか、dbdcpybkgenツールを使用してコピーブックを自動作成する必要があります。

    • 可変長セグメントが定義されたDBDの場合は、dbdcpybkgenツールによって自動作成されたコピーブックを使用する必要があります。

    • 二次索引セグメントが定義されたDBDの場合は、dbdcpybkgenツールによって自動作成されたコピーブックを使用します。ただし、その前に物理DBDのメタ情報とスキーマを作成する必要があります。

      dbdgen {物理DBDのファイル名}
      hdgensch all {物理DBDのDBD名}

1.3. プリフェッチ方法を変更

  • HiDB 7.1では、親セグメントのインスタンスをプリフェッチする際、LEAD関数を使用していましたが、HiDB 7.2からは、スクロール可能カーソルが使用されます。

  • 以下は、HiDB 7.1とHiDB 7.2の内部で実行されるSELECT文の例です。

    • HiDB 7.1

      SELECT
       /*+ INDEX_ASC(DMAN0201_SEGMENT3
                     DMAN0201_SEGMENT3_PIDX)
           FIRST_ROWS(10) */
       OCC_ID,
       "SEG3FLD1",
       PARENT_ID,
       PARENT_KEY,
       0 AS PRIOR_ID,
       0 AS NEXT_ID,
       0 AS LPARENT_ID,
       LEAD(PARENT_ID, 1)
        OVER(ORDER BY
             HIDB_PARENT_KEY,
             HIDB_SEG3FLD1)
        AS NEXT_PARENT_ID,
       LEAD(PARENT_KEY, 1)
        OVER(ORDER BY
             HIDB_PARENT_KEY,
             HIDB_SEG3FLD1)
        AS NEXT_PARENT_KEY
      FROM DMAN0201_SEGMENT3
      WHERE ...
    • HiDB 7.2

      SELECT
       /*+ INDEX_ASC(DMAN0201_SEGMENT3
                     DMAN0201_SEGMENT3_PIDX)
           FIRST_ROWS(10) */
       OCC_ID,
       "SEG3FLD1",
       "PK0_SEG1FLD1",
       PARENT_ID,
       0 AS PRIOR_ID,
       0 AS NEXT_ID,
       0 AS LPARENT_ID
      FROM DMAN0201_SEGMENT3
      WHERE
       ("PK0_SEG1FLD1") >=
       ((CHR(48) || CHR(48) || CHR(48)))
      AND
       (("SEG3FLD1") >=
       ((CHR(0) || CHR(0) || CHR(0))))
      ORDER BY "PK0_SEG1FLD1", "SEG3FLD1" ASC
  • 参考

    • PSBのSENSEG文にGNALLPARENTパラメータを指定してプリフェッチを制御することができます。GNALLPARENTパラメータの詳細については、OpenFrame HiDB『HiDBガイド』付録の「GNALLPARENT」を参照してください。

1.4. フィールドの比較方法を変更

  • HiDB 7.1では、DBDのフィールドが参照する列を比較する際、接続演算子(||)を使用していましたが、HiDB 7.2からは、タプル比較が使用されます。

  • 以下は、HiDB 7.1とHiDB 7.2の内部で実行されるSELECT文の例です。

    • HiDB 7.1

       SELECT /*+ INDEX_ASC(DMAN0201_SEGMENT1
                            DMAN0201_SEGMENT1_UNIQ)
                  FIRST_ROWS(10) */
              OCC_ID,
              "K1",
              "K2",
              0 AS PRIOR_ID,
              0 AS NEXT_ID,
              0 AS LPARENT_ID
       FROM DMAN0201_SEGMENT1
       WHERE ("HIDB_K12" = TO_CHAR(CHR(49) ||
                                   CHR(49)) ||
                           TO_CHAR(CHR(65) ||
                                   CHR(65)))
             AND (OCC_ID > 0)
       ORDER BY OCC_ID ASC
    • HiDB 7.2

       SELECT /*+ INDEX_ASC(DMAN0201_SEGMENT1
                            DMAN0201_SEGMENT1_PK)
                  FIRST_ROWS(10) */
              OCC_ID,
              "K1",
              "K2",
              0 AS PRIOR_ID,
              0 AS NEXT_ID,
              0 AS LPARENT_ID
       FROM DMAN0201_SEGMENT1
       WHERE (("K1", "K2") = ((CHR(49) || CHR(49)),
                              (CHR(65) || CHR(65))))
             AND (OCC_ID > 0)
       ORDER BY OCC_ID ASC

1.5. 外部プロシージャの指定方法を変更

  • HiDB 7.1では、セグメントに外部プロシージャを指定する際、REMARKSパラメータを使用していましたが、HiDB 7.2からは、EXTPROCパラメータが使用されます。EXTPROCパラメータの詳細については、OpenFrame HiDB『HiDBガイド』の付録の「EXTPROC」を参照してください。

1.6. DLI関連のライブラリを自動ビルド

  • HiDB 7.2では、hidbmgrツールを使用してDLI関数を作成する際、.pcファイルを自動的にプリコンパイルおよびコンパイルして動的ライブラリ・ファイルを作成します。

  • 以下は、HiDB 7.1とHiDB 7.2で動的ライブラリ・ファイルを作成する例です。

    • HiDB 7.1

      $ hidbmgr dbd dligen DMAN0201
      $ cd $OPENFRAME_HOME/hidb/hidb_sch
      $ ./compile.sh
    • HiDB 7.2

      $ hidbmgr dbd dligen DMAN0201

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

1.7. OpenFrame環境設定情報の管理

  • ファイルで管理していたOpenFrameの環境設定情報をデータベースで管理するように変更しました。

  • データベースにロードされる環境設定メタ・ファイルの形式を変更し、製品ごとにファイルを分離しました。

  • 環境設定情報の同期およびマルチ・ノード環境に対応するために、Tmax TCacheにロードして使用するように変更しました。

  • 環境設定情報を表で管理するためのofconfigツールを追加しました。

    1. OpenFrame環境設定の詳細については、OpenFrame HiDB『環境設定ガイド』を参照してください。

    2. ofconfigツールの詳しい使用方法については、OpenFrame Base『ツールリファレンスガイド』を参照してください。

1.8. エラー・コードの管理

  • ファイルで管理していたOpenFrameのエラー情報をデータベースで管理するように変更しました。

  • エラー情報をデータベースにロードするために、oferrorツールに挿入機能を追加しました。

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

1.9. システムおよびサーバーのログ形式

  • OpenFrame製品の各モジュールのログ形式を統一しました。

  • ログ形式に日付と時間を追加しました。

    • サービス・ログ形式

      [YYYY-MM-DDTHH:MM:SS.ffffff] [SERVICE-NAME(PID)] [M] [MSGCODE] MESSAGE-CONTENTS
    • システム・ログ形式

      [YYYY-MM-DDTHH:MM:SS.ffffff] [EXECUTED-MODULE] [CODE] [MSGCODE] EVENT FREE-FORMAT-CONTENTS
    • 操作ログ形式

      [YYYY-MM-DDTHH:MM:SS.ffffff] [EXECUTED-MODULE] [CODE] [MSGCODE] EVENT FREE-FORMAT-CONTENTS

      OpenFrameのログについての詳細は、OpenFrame Base『Baseガイド』の付録「ログの管理」を参 照してください。