DBレプリケーション機能
- 1 DBレプリケーション機能とは
-
A−VX/RDBのDBレプリケーション機能は、A−VX/RDB内のデータをオープン環境のデータベースにレプリケーション(複製)することができるものです。A−VX/RDBに対するデータ更新処理が行われた時に、あらかじめ設定してあるオープンデータベースに更新データを複製します。
NEC公式の説明書にはあまり明確に書かれていませんが、オープンのデータベースなら何でもという訳ではなく、対象はOracle DatabaseとSQL Serverの2種類だけです。
データが複製されるのは、A−VX/RDBからオープンデータベースの方向だけです。オープンデータベースからA−VX/RDBへは複製されません。つまり片方向レプリケーションとなっています。
A−VX/RDBのレコードを修正したり、レコードを追加/削除した場合は、オープンデータベースにもその結果が反映されます。しかしオープンデータベース側で直接レコードを修正したり、レコードを追加/削除しても、A−VX/RDBに反映されません。この場合はA−VX/RDBとオープンデータベースの間でデータの不一致が起きます。DBレプリケーション機能は、A−VX側でデータベースを更新/参照し、オープン側ではデータベースのデータを参照するだけ、のようなときに使用します。
A−VX側からオープンデータベースに複製するときには、ODBCを使用します。なので、複製のスピードはODBC経由のそれなりの性能であるということは理解しておく必要があります。
複製元のデータベース1つに対して複製先は複数のデータベースを指定することもできます。
オープン側はデータ参照だけだと、あまり使い道がないかな、という人もいるかもしれませんが、実際のところ用途は多いです。A−VXを使用しているということは、基幹業務は当然A−VX側のアプリケーションで行っているので、そこで使用するデータや出力されたデータはA−VX側のファイルやデータベースに入ります。
一方、業務データを集計してグラフ化したりといったデータを分析、加工するツールはオープン側に豊富にあります。そういうデータ分析ツールはオープン側のデータベースを使用しますが、基本的にデータは参照しかしません。そういった情報活用・情報加工時にA−VX/RDBのレプリケーション機能は利用できるわけです。なおA−VX4 R2.0から実装されている、A−VX/RDBの標準機能です。標準機能ですので、DBレプリケーションを使用するのに別売りの何かを購入する必要はないということです。
- 2 特徴
-
DBレプリケーション機能は、A−VXの機能でありながら、基本Windows側の操作で設定や管理ができるという特徴があります。
DBレプリケーション機能は、Windows側の設定のみで動作するため、A−VX側の設定は必要ありません。環境の設定にはWindows側で動作する環境設定ユーティリティを使用します。
DBレプリケーション機能で使用する作業ファイルやログファイルなどもWindows側のファイルです。
- 3 反映方法
-
オープンデータベースにデータを反映する方法は3種類から選択できます。性能や使用目的に応じて選択します。
- 逐次更新
- 同期
- 非同期
- 一括更新
更新モードは表単位に指定することができます。
- 3.1 逐次更新(同期)モード
-
A−VX/RDBに対するデータの更新が行われると同時に、該当データをオープンデータベース上にも更新します。オープンデータベースへデータ更新が終了した後、アプリケーションに制御を戻します。
アプリケーションによる読み込み(READ、SELECT命令)は、A−VX/RDBからレコードを読み込みます。読み込み時には、オープンデータベースへはアクセスしません。
A−VX/RDBに対する更新(WRITE、REWRITE、DELETE命令)は、A−VX/RDBへレコードを更新後、オープンデータベースに複製します。アプリケーションがトランザクション機能(更新前ジャーナル指定)を利用していない場合には、CLOSE命令でCOMMITを実行します。アプリケーションの処理性能より、リアルタイムにオープンデータベースに更新データを複製(”A−VX/RDB = オープンデータベース”の状態)したい場合に選択します。
ネットワークを介したり、オープンデータベースの処理が終わるまで待ち合せたりするので、性能低下となることが多いため、NEC公式でもあまり推奨されていないモードです。ただ、トランザクション機能を使用していると強制的にこのモードになります。
- 3.2 逐次更新(非同期)モード
-
A−VX/RDBに対するデータの更新が行われると、更新データをデータ蓄積ファイル(データ格納ファイル)に一時的に蓄え アプリケーションに制御を戻します。
A−VX/RDBを更新するアプリケーションとは非同期に、OSがデータ蓄積ファイル(データ格納ファイル)からオープンデータベースへデータ更新を行います。アプリケーションによる読み込み(READ、SELECT命令)は、A−VX/RDBからレコードを読み込みます。読み込み時には、オープンデータベースへはアクセスしません。
A−VX/RDBに対する更新(WRITE、REWRITE、DELETE命令)は、A−VX/RDBへレコードを更新後、データ蓄積ファイルに蓄積されます。この後OS(レプリケーションタスク)によりデータ蓄積ファイルからレコードごとにオープンデータベースに複製します。トランザクション機能(更新前ジャーナル指定)を利用している場合には、本モードを設定していても、自動的に逐次更新(同期)モードとなります。トランザクション機能を利用していない場合には、OPEN、CLOSE命令でCOMMITを実行します(データ件数が100件以上となる場合、100件毎にCOMMIT命令を実行します)。アプリケーションの処理性能を重視し、さらにリアルタイムに近いタイミングでオープンデータベースに更新データを複製(”A−VX/RDB ≒ オープンデータベース”の状態)したい場合に選択します。
どのような用途で使用するかをよく分析すれば、データベース参照だけならば、本当にリアルタイムに同期しなければならないということはそれほど多くなく、このモードで十分な場合が多いです。
- 3.3 一括更新モード
-
A−VX/RDBに対するデータの更新が行われると、更新データをデータ蓄積ファイル(データ格納ファイル)に一時的に蓄え アプリケーションに制御を戻します。
この後、指定した条件(件数、時間または時刻)となった時点でOSがデータ蓄積ファイル(データ格納ファイル)からオープンデータベースへデータ更新を行います。アプリケーションによる読み込み(READ、SELECT命令)は、A−VX/RDBからレコードを読み込みます。読み込み時には、オープンデータベースへはアクセスしません。
A−VX/RDBに対する更新(WRITE、REWRITE、DELETE命令)は、A−VX/RDBへレコードを更新後、データ蓄積ファイルに蓄積されます。この後指定条件となった時点でOS(レプリケーションタスク)によりデータ蓄積ファイルからオープンデータベースに複製します(指定条件となっていなくても、CLOSE命令の時点でも複製します)。トランザクション機能(更新前ジャーナル指定)を利用している場合には、本モードを設定していても、自動的に逐次更新(同期)モードとなります。トランザクション機能を利用していない場合には、OPEN、CLOSE命令でCOMMITを実行します(データ件数が100件以上となる場合、100件毎にCOMMIT命令を実行します)。一括更新するタイミングは、開始時刻(指定した時刻になったら更新を開始する)、更新レコード件数(設定した更新件数を越えたら更新する)、更新時間(設定した時間間隔毎に更新する)の3種類が選択できます。更新レコード件数と更新時間は両方とも設定することができ、この場合は先に条件を満たした方で一括更新が行われます。
時刻指定はA−VX01 R1.0から実装された機能なので、それ以前のA−VXでは設定できません。アプリケーションの処理性能を重視し、 オープンデータベースへ複製するタイミングはオペレーション(環境設定ユーティリティにより件数、時間または時刻を指定)により決定したい場合に選択します。
- 逐次更新
- 4 オープン側のテーブル
-
A−VX/RDBで使用しているデータ定義型とオープンデータベースが使用するデータ属性は異なります。例えばA−VX/RDBの数字はSの6桁などと表現しますが、Oracle DBだとNumber(6)などと表現します。
A−VX/RDBのDBレプリケーション機能では次のように対応付けています。
A−VX/RDB OracleDB SQLServer C(英数字) CHAR CHAR N(符号無し数字) NUMBER NUMERIC S(符号付き数字) NUMBER NUMERIC Q(符号無しパック数字) NUMBER NUMERIC P(符号付きパック数字) NUMBER NUMERIC J(日本語) CHAR CHAR 日本語項目はバイト数を2倍にします。例えば、J:15桁の場合はCHAR(30)。
複製先のオープンデータベースのテーブルを作成するときには、列のデータ属性は上の表で対応付けて作成します。
複製先のデータベースのテーブルの列は、複製元のA−VX/RDBの表の項目から必要なものだけ選択すればよいです。
例えばA−VX/RDBに「製品コード、製品名、小売価格、在庫数、次回入荷日」という5つの項目があって、オープン側では「製品コード」と「在庫数」しか参照しないならば「製品コード、在庫数」の2列しかないテーブルを作ればよいです。参照しない列を複製するようにすると、性能が下がります。 - 5 使用するファイル類
-
DBレプリケーションで使用する作業ファイルやログファイルはWindows側のファイルとして出力されます。A−VX側のMSDxxxといった仮想ボリューム内ではありません。
ファイル名 概要 AVXRDB.INF 環境設定ファイル AVXRDB.TMP 環境設定時のワークファイル RDBREPMAP.STF データ格納ファイル データソース名-スキーマ名-テーブル名 データ蓄積ファイル AVXUTLERR.LOG 環境設定時のエラーログファイル PAGWRDB.LOG 運用時のエラーログファイル AVXCNV.CTL データ移行時の制御ファイル (Oracleのみ) AVXCNV.FMT データ移行時の制御ファイル (SQL Serverのみ) AVXCNV.DAT データ移行時のデータファイル AVXCNV.BAD 不良ファイル(Oracleのみ) AVXCNV.LOG データ移行時のログファイル CHECK.LOG フィールドチェック時のログファイル MANAGER.LOG 管理操作時のログファイル UPDATEERR_データソース名_テーブル名.dat データ更新/削除に失敗した場合、失敗したデータを出力するファイル UPDATEERR_データソース名_テーブル名.sav データ更新/削除に失敗した場合、失敗したデータを出力するファイル(UPDATEERR_データソース名_テーブル名.dat)のバックアップ ERRCODE_データソース名_テーブル名.dat コード変換に失敗した場合、失敗したデータを出力するファイル ERRCODE_データソース名_テーブル名.sav コード変換に失敗した場合、失敗したデータを出力するファイル(ERRCODE_データソース名_テーブル名.dat)のバックアップ レプリケーション機能は徐々に強化されているので、バージョンによって使われるファイルが異なるようですが、概ね上記のようなファイルが使われるようです。
- 6 環境設定ユーティリティ
-
DBレプリケーションの設定や管理、運用は環境設定ユーティリティを使用します。
- 6.1 設定
-
DBレプリケーション機能の設定、複製元と複製先の表/テーブルの設定などを行います。
- 6.2 テーブル作成
-
環境設定ユーティリティから、複製先データベースにテーブルを作成することができます。
create table xxxのようにコマンドでテーブルを作ったり、別のGUIツールでテーブルを作っても問題ありませんが、環境設定ユーティリティで作った方が設定した通りに作ることができるので、間違いが少ないと思います。
- 6.3 監視
-
環境設定ユーティリティで、レプリケーションの状態を確認することができます。
監視機能では、逐次更新(非同期)モード及び一括更新モードのRDBに対して監視を行います。逐次更新(同期モード)のRDBは監視できません。
詳細確認したい表の行をダブルクリックすると、詳細情報が表示されます。
- 6.4 データ移行
-
A−VX/RDBに既に大量データが入っているときは、レプリケーション開始前にオープンデータベースに一括してコピーしなければならないこともあるかもしれません。
そのような場合にA−VX/RDBの表からオープンデータベースのテーブルに一括してデータをコピーする方法も用意されています。
一番最初に一括コピーしておけば、あとはレプリケーション機能がデータを自動的に複製することになります。
- 6.5 フィールドチェック
-
設定した対応付けの不正やA−VX/RDBに不正なデータ(フィールド違反、ゴミデータ等)が存在していないかをチェックすることができます。
- 6.6 停止・開始管理機能
-
表単位でレプリケーションを停止したり、開始したりできます。
- 6.7 エクスポート・インポート機能
-
環境設定ユーティリティにて、DBレプリケーションの環境設定情報をエクスポート・インポートする事ができます。
別システムに環境設定情報を展開したり、環境設定をバックアップしたりといった用途に使用します。
- 6.8 情報採取
-
DBレプリケーションに何らかの障害が発生したときに、障害調査用のログなどを採取するための機能です。
主にNECから来た保守員が使用するので、我々はあまり関係ないです。