データベース・マイグレーション

本章では、データベースのマイグレーション方法について説明します。

1. AIMデータベース(NDB)のマイグレーション

メインフレーム環境で運用されるAIM DB(ネットワーク・データベース、以下、NDB)の機能は、OpenFrame環境ではOpenFrame NDBによって提供されます。そのためリホストの際に、メインフレームで蓄積されたAIM NDBデータベースをOpenFrame NDBデータベースにマイグレーションする必要があります。

以下は、AIMデータベース(NDB)のマイグレーション・プロセスです。

figure 4 1
AIMデータベースのマイグレーション・プロセス

マイグレーション作業は以下のプロセスで行われます。

  1. NDBデータベース・スキーマのマイグレーション

    メインフレームからダウンロードしたソースADLファイルの中で、SCHEMA文、XIFSCHEMA文、SUBSCHEMA文を含むADLファイルをEBCDICからASCIIに変換し、OpenFrame NDB環境に登録し、OpenFrame NDBにデータベースを作成する作業です。

  2. NDBデータベース・アンロード・ファイルの変換スキーマの作成

    ndbgenschツールを使用して、NDBスキーマ情報を基にデータベース・アンロード・ファイルをOpenFrameでOpenFrame NDBにインポートできるアンロード・ファイルに変換するために必要な変換スキーマ(conversion schema)を作成します。

  3. NDBデータベース・アンロード・ファイルの変換

    dsmiginツールを使用して、メインフレームのデータベース・アンロード・ファイルをOpenFrameでOpenFrame NDBにインポートできるアンロード・ファイルに変換します。

  4. OpenFrame NDBデータベースの作成

    ndbmgrツールを使用して、データベースにテーブルを作成し、入出力のためのライブラリを作成します。

  5. OpenFrame NDBデータベースのインポート

    ndbimportツールを使用して、データセットをOpenFrame NDBに作成されたデータベースにインポートします。

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

1.1. NDBデータベース・スキーマのマイグレーション

AIMデータベース(NDB)をマイグレーションするにあたって最初の作業は、NDBデータベースの物理的な構造と索引を定義したAIM ADLスキーマ情報をマイグレーションすることです。メインフレームからアンロードされたADLスキーマ・ファイルはEBCDIC形式なので、dsmiginツールを使用してASCII形式に変換した後、ndbadlgenツールを使ってOpenFrame NDBシステムに登録します。

dsmiginとndbadlgenを使用して、ADLで記述されたAIM定義リソースをマイグレーションする方法については、リソース・マイグレーションAIM定義リソース(ADL)のマイグレーションを参照してください。

1.2. NDBデータベース・アンロード・ファイルの変換スキーマの作成

メインフレームのAIMデータベース(NDB)をアンロードしたデータベース・アンロード・ファイルには、データベース・レコードのフィールド構成とEBCDIC文字またはメインフレームのデータ型でデータが保存されています。そのため、データベース・アンロード・ファイルをOpenFrame環境のOpenFrame NDBにインポートする前に、各フィールドに保存されているデータをASCIIまたはオープン環境で使用できるデータ型に変換しなければなりません。

NDBデータベース・スキーマのマイグレーションにより、OpenFrame NDB環境に登録されたNDBスキーマ情報を参照して、アンロード・ファイルに保存されているデータベース・レコードの各フィールドのデータ型の情報を確認できます。このNDBスキーマ情報を利用して、データベース・アンロード・ファイルを、OpenFrameのOpenFrame NDBにインポートできるアンロード・ファイルに変換するために必要な変換スキーマ(conversion schema)を作成することができます。この作業には、ndbgenschツールを使用します。

以下は、ndbgenschを使用してNDBアンロード・ファイルの変換に必要な変換スキーマを作成する例です。

$ ndbgensch -o DB01C DB01
Scheme filename = /home/o5aim/schema/DB01C.conv - created

上記例では、DB01という名前のNDBデータベース・スキーマを参照して、該当するデータベース・アンロード・ファイルを変換するために必要な変換スキーマのDB01C.convを、$OPENFRAME_HOME/schemaディレクトリに作成しています。

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

1.3. NDBデータベース・アンロード・ファイルの変換

NDBデータベース・スキーマがOpenFrame AIM環境にマイグレーションされており、データベース・アンロード・ファイルの変換に必要な変換スキーマが作成されていれば、dsmiginツールを使用して、メインフレームのデータベース・アンロード・ファイルをOpenFrameのOpenFrame NDBにインポートできるアンロード・ファイルに変換します。

以下は、dsmiginを使用してNDBアンロード・ファイルを変換する例です。

$ dsmigin DB01.db2 DB01.DB2 -s DB01C.conv -e JAK -v DBVOL1 -f V -l 3216
215046 M MIG0001M =====< DSMIGIN START >=====
source file : DB01.db2
dataset name : DB01.DB2
member name :
unit:
volume : DBVOL1
schema file  : DB01C.conv
encoding type : JAK
record length : 3216
record format : V
dsorg:
delimiter:


DSMIGIN: (record count = 2145, conversion error count = 0)

上記例では、メインフレームのAIM DBからアンロードされたDB01.db2ファイルを、OpenFrameの可変長の非VSAMデータセットに変換しています。DB01.DB2というデータセット名で、ボリュームDBVOL1に作成するように指定しています。

変換の際に適用する変換スキーマとしては、上記で作成したDB01C.convを指定しており、-e JAKオプションを指定して、文字コードを変換するときにソースがEBCDIC(JEF)エンコーディングで作成されたソースであることを指定しています。また、可変長データセット・レコードの最大長として「3216」を指定していますが、ここには変換結果の非VSAMデータセットに保存できる最大のレコード長を指定します。この情報は、データベース・スキーマ情報から取得できます。

dsmiginを使用したNDBデータベース・アンロード・ファイルの変換は、変換スキーマを使用するデータセット・マイグレーションといえます。詳細については、データセット・マイグレーションを参照してください。

1.4. OpenFrame NDBデータベースの作成

NDBデータベース・アンロード・ファイルの変換が完了したら、変換されたデータベース・アンロード・ファイルを保存するデータセットをOpenFrame NDBデータベースに作成します。データベースの作成とは、データベースのテーブルと索引を作成することを意味します。

OpenFrame NDBでデータベースを保存するためのテーブルは、NDBデータを保存するために適切な属性(レコード長およびレコード形式、キー長など)で作成する必要があります。この作業は、ndbmgrツールを使用して行います。

ndbmgrツールは、OpenFrame NDBデータベースの作成以外に、入出力のためのライブラリを作成するためにも使用されます。一般的に、データベースのテーブルを作成し、入出力ライブラリを作成した後に、NDBデータベースのインポートを行います。

以下は、ndbmgrを使用して、OpenFrame NDBにデータベースのテーブルを作成する例です。

$ ndbmgr schm create DB01
Managing OpenFrame NDB record tables and set tables

sacee token taken from config!
ndbmgr: creating SCHEMA (DB01) objects

ndbmgr: successfully processed the request

以下は、ndbmgrを使用して、OpenFrame NDBに入出力ライブラリを作成する例です。

$ ndbmgr schm dmlgen DB01
Managing OpenFrame NDB record tables and set tables

ndbmgr: generate SCHEMA (DB01) objects

tbESQL Precompiler 6

TmaxData Corporation Copyright (c) 2008-. All rights reserved.

DB01_REC01.tbc is precompiled successfully!

ndbmgr: successfully processed the request

上記例では、ndbmgrを使用してデータベースDB01を作成しています。DB01は、DBスキーマ名です。

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

1.5. OpenFrame NDBデータベースのインポート

ndbmgrツールを使用してOpenFrame NDBにデータベースを作成したら、dsmiginによって変換されたデータベース・アンロード・ファイルをndbimportツールを使用して順次に読み込んでOpenFrame NDBデータベースにインポートします。

ndbimportを使用したインポート作業も1つのアプリケーション・プログラムとして見なされるため、インポート対象のデータベースを含むサブスキーマ(SUBSCHEMA)を指定する必要があります。なお、インポート・プロセスを制御する制御文が含まれたファイルも指定する必要があります。ndbimportのための制御文の形式と内容は、OpenFrame NDBのリロード・ユーティリティであるJXKRELODのSYSINに入力する制御文と同じです。この制御文で、インポートするデータベースの名前、レンジ(RANGE)、サブレンジ(SUBRANGE)を指定したり、インポート後に実行する基本索引および拡張索引の構築に必要な中間データセットを作成するか否かを指定したりできます。

JXKRELODユーティリティの制御文とndbimportツールについての詳細は、OpenFrame NDB『ユーティリティリファレンスガイド』とOpenFrame NDB『ツールリファレンスガイド』を参照してください。

以下は、ndbimportを使用して、変換されたデータベース・アンロード・ファイルをOpenFrame NDBデータベースにインポートする例です。

$ ndbimport -c DB01.ctl -v DBVOL1 -k DB01X.KRD SDB01 DB01 DB01.DB2

上記例では、制御文ファイルとしてDB01.ctlを、サブスキーマ名としてSDB01を指定しており、OpenFrame NDB向けに変換されたアンロード・データセットDB01.DB2をデータベースDB01にインポートしています。

OpenFrame NDBでは基本索引と拡張索引をデータベースの索引として構成するので、IRDデータセットとKRDデータセットは実際に生成されません。

以下は、上記例で使用された制御文ファイルDB01.ctlの内容です。KRDATA文とXINDEX文を指定し、拡張索引の構築に必要なKRDデータを作成するよう指定しています。基本索引を使用するデータベースの場合は、IXDATA文とINDEX文を指定して、基本索引の構築に必要なIXDデータを作成するように指定できます。この制御文は、ndbconvstmtツールを使って、メインフレームで当該データベースをアンロードするために使用された制御文を入力として作成することができます。

    RELOAD       MODE=IS
    DIRECTORY    SCHEMA=DB01,SUBSCHEMA=SDB01
    SETUP        RECORD=DB01REC1
    KRDATA       DMFXIO=01
    XINDEX       XINAME=(DB01X-KEY)
    XINDEX       XINAME=(DB01X-KEY1)
    XINDEX       XINAME=(DB01X-KEY2)
    END

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

以下は、上記例で使用されたサブスキーマSDB01の内容です。サブスキーマSDB01には、インポート対象データベースのDB01が含まれています。

    SUBSCHEMA NAME  IS SDB01;
        SCHEMA NAME IS DB01.
    01  DB01REC1.
    END