4.6.7 イベント制御用テーブルの設計
抽出側Datareplicatorから反映側Datareplicatorの動作内容を操作する場合には,イベント機能を使います。
イベント機能を使う場合は,反映側Datareplicatorでは反映環境定義でイベントコードと対応する処理を指定します。反映側Datareplicatorでのイベントコードの指定については,「4.7.3 反映方法の設計」を参照してください。
イベント機能を使う場合は,抽出側Datareplicatorで,イベントコードを指定したhdeeventコマンドを実行します。hdeeventコマンドを実行すると,イベント制御用テーブルに対してSQLを発行して,イベント制御用の更新情報をシステムログファイルに出力します。抽出側Datareplicatorでは,このイベント制御用の更新情報を抽出し,反映側Datareplicatorに送信して,反映側Datareplicatorの動作内容を操作します。抽出側Datareplicatorでは,イベント制御用の更新情報を検知した時点で,送信間隔を待たないで,反映側Datareplicatorに対する送信処理を開始します。送信処理の完了後は,次回の送信間隔まで送信処理待ちになります。
イベント制御用テーブルは,抽出側Datareplicatorを起動する前に,抽出側HiRDBに作成しておく必要があります。
(1) イベントコードの指定範囲
指定できるイベントコードの範囲と動作を次の表に示します。
範 囲 |
動 作 |
---|---|
0 |
送信プロセスを停止します(反映側Datareplicatorには送信されません)。 |
1〜255 |
指定したイベントコードを,反映側Datareplicatorに送信します。 |
上記以外 |
反映側Datareplicatorには送信されません。 |
(2) hdeeventコマンドを実行したときに発行されるSQL文
hdeeventコマンドを実行すると,次のSQL文が抽出側HiRDBに対して発行されます。抽出側HiRDBがパラレルサーバの場合には,すべてのバックエンドサーバに対して,SQL文が発行されます。
LOCK TABLE "hde_dtbl" IN EXCLUSIVE MODE UPDATE "hde_dtbl" SET EVNO = ユーザ指定のイベントコード COMMIT WORK
hdeeventコマンドを実行する代わりに,同様のSQL文を発行して,反映側Datareplicatorに対してイベントを発行することもできます。ただし,イベント制御用テーブルに対しては,上記以外の操作をしないでください。
(3) イベント制御用テーブルの条件
抽出側Datareplicatorを起動する前に必要になる,イベント制御用テーブルの条件を説明します。
(a) 作成するユーザID
任意のユーザIDで,イベント制御用テーブルを作成します。
hdeeventコマンドを実行する場合には,イベント制御用テーブルを作成したユーザIDを指定します。hdeeventコマンドの実行時にユーザIDの指定を省略すると,PDUSER環境変数の設定値が仮定されます。
(b) テーブル名
hde_dtblで固定です。
(c) テーブルの属性
FIX属性を指定します。
(d) テーブルの構成
列名 |
列属性 |
列長 |
値 |
---|---|---|---|
KEY |
INTEGER |
1 |
整数 |
EVNO |
INTEGER |
1 |
0 |
SNDID |
CHAR |
10 |
'0' |
(e) イベント制御用テーブルの例
-
抽出側HiRDBがシングルサーバの場合
抽出側HiRDBがシングルサーバの場合,1行のテーブルを作成します。抽出側HiRDBがシングルサーバの場合のイベント制御用テーブルの例を次の図に示します。
図4‒37 抽出側HiRDBがシングルサーバの場合のイベント制御用テーブルの例 -
抽出側HiRDBがパラレルサーバの場合
抽出側HiRDBがパラレルサーバの場合には,抽出の対象になるすべてのバックエンドサーバに対して,1行ずつキーレンジ分割してテーブルを作成します。また,RDエリアは,各バックエンドサーバの中から一つ指定します。抽出側HiRDBがパラレルサーバの場合のイベント制御用テーブルの例を次の図に示します。
図4‒38 抽出側HiRDBがパラレルサーバの場合のイベント制御用テーブルの例
(f) 注意
-
イベント制御用テーブルは,hdeprepコマンドを実行する前に作成する必要があります。
-
抽出側HiRDBがパラレルサーバで,バックエンドサーバの追加,削除などの構成変更をした場合,イベント制御用テーブルを再作成する必要があります。イベント制御用テーブルを再作成しなかった場合には,追加したバックエンドサーバからの抽出にイベントが組み込まれないで,抽出側DBと反映側DBが不整合になることがあります。
-
イベント制御用テーブルを再作成した場合には,hdeprepコマンドを実行する必要があります。
-
抽出側HiRDBのシステム中に,イベント制御用テーブルの名称であるhde_dtblと,同じ名称のテーブルは作成しないでください。
-
イベント制御用テーブルは,抽出対象にできません。
-
一つのトランザクション中に,イベントコードが1〜255のイベントを複数発行した場合,最後に発行したイベントだけが有効になります。