HiRDB データ連動機能 HiRDB Datareplicator Version 8
Datareplicatorでは,抽出側DBの更新と反映側DBの更新には時間差があります。したがって,反映処理の最中に抽出側DBに障害が発生した場合,抽出側DBと反映側DBとの間に不整合が発生することがあります。
更新SQL出力機能は,このような場合に抽出側DBからの未送信情報(反映側DBに反映されていない情報)をSQL文にしてファイル出力する機能です。これによって,反映されていない情報を知ることができます。
更新SQL出力機能の使用方法について説明します。
更新SQL出力機能を使用する場合,次に示す条件を満たしている必要があります。
hdestartに-s -Lオプションを指定して実行します。コマンドの詳細については,hdestartコマンドを参照してください。
更新SQL出力機能を使用すると,更新SQL出力プロセスが起動します。更新SQL出力プロセスの詳細を次に示します。
| プロセス名 | 起動方法 | 終了方法 |
|---|---|---|
| hdesqlput | hdestart -s -L | hdestop |
更新SQL出力プロセスは,次に示す点を除いて送信プロセスと同じ動作をします。
更新SQL出力機能によって出力される更新SQLファイルについて説明します。
更新SQLファイルの出力先を次に示します。
| 項目 | 出力先 |
|---|---|
| 出力先ノード | 抽出側DBの更新対象になる各ノード |
| 出力先ディレクトリ | 抽出側Datareplicator運用ディレクトリ |
| ファイル名称 | SQLTXT_サーバ名_送信先識別子 |
同じ名称のファイルが存在している場合,情報がそのファイルに追加出力されます。
また,抽出情報キューファイルに未送信情報が存在しない場合,更新SQLファイルは作成されません。
更新SQLファイルには,未送信情報が1行1SQL文の形式で出力されます。SQL文として出力されるデータはCOMMITされたトランザクションのものだけであり,ROLLBACKされたトランザクションのデータは出力されません。また,トランザクションはCOMMITされた順番に並べ替えて出力されます。なお,仕掛かり中の更新情報は出力されません。
出力されるデータの形式を次に示します。
/* 更新日時 */ INSERT INTO 認可識別子.表名(列名,列名,...) VALUES(値※1,値,...); |
/* 更新日時 */ UPDATE 認可識別子.表名 SET※3 列名=値※1,列名=値, ... WHERE※4 列名=値 AND 列名=値 ...; |
/* 更新日時 */ DELETE FROM 認可識別子.表名 WHERE※4 列名=値※1 AND 列名=値 ...; |
/* 更新日時 */ PURGE TABLE 認可識別子.表名; |
/* ****-**-** **:**:** */ /* HDEEVENT イベントコード */ |
/* ****-**-** **:**:** */ COMMIT; |
| 列属性 | 文字集合 指定 |
hdestartコマンドの-Hオプション | 出力される形式 | 出力される内容 | 備考 |
|---|---|---|---|---|---|
| CHAR,又は VARCHAR |
なし | なし | 文字形式 (例:'aaa') |
該当する列の列値 | 制御コードはピリオドとして出力されます。 |
| あり | 16進形式 (例:X'C3C3C3') |
− | |||
| あり | なし | 文字形式 (例:'aaa') |
該当する列の列値をDBロケールに文字コード変換した後の列値 | 制御コードはピリオドとして出力されます。 | |
| あり | 16進形式 (例:X'C3C3C3') |
− | |||
| MCHAR,又は MVARCHAR |
− | なし | 文字形式 (例:M'あイうエお') |
該当する列の列値 | 制御コードはピリオドとして出力されます。 |
| あり | 16進形式 (例:X'81C141') |
− | |||
| NCHAR,又は NVARCHAR |
− | なし | 文字形式 (例:N'あいう') |
制御コードはピリオドとして出力されます。 | |
| あり | 16進形式 (例:X'81C181C2') |
− | |||
| INTEGER,又はSMALLINT | − | − | 10進形式 (例:100) |
− | |
| DECIMAL | − | − | 10進形式 (例:100) |
パック形式データを文字列に変換する際にエラーが発生した場合,その列は16進形式で出力されます。 | |
| FLOAT,又はSMALLFLT | − | − | 浮動小数点形式 (例:1.0…0E+02) |
− | |
| DATE | − | − | 文字形式 (例:'2008-04-15') |
パック形式データを文字列に変換する際にエラーが発生した場合,その列は16進形式で出力されます。 | |
| TIME | − | − | 文字形式 (例:'16:15:30') |
||
| TIMESTAMP | − | − | 文字形式 (例:'2008-04-15 16:15:30') |
||
| INTERVAL YEAR TO DAY | − | − | 10進形式 (例:+12340102.) |
||
| INTERVAL HOUR TO SECOND | − | − | 10進形式(例:+112233.) | ||
| BLOB | − | − | 固定文字列 | "*BLOB*" |
|
| BINARY | − | − | "*BINARY*" | ||
| ADT | − | − | 固定文字列 | "*ADT*" | NULL値/非NULL値に関係なく,該当する固定文字列"*ADT*"が出力されます。 |
| オペランドの指定 | 動作 |
|---|---|
| あり | prg_eventnoオペランドに指定した番号のイベントを出力します。イベント出力後,処理を続行します。 |
| なし | 該当するPURGE TABLEを無視します。 |
更新SQLファイルの出力例を次に示します。
/* 2004-12-29 19:18:00 */ INSERT INTO "USR1"."T1"("C1","C2") VALUES(1,'a');
/* 2004-12-29 19:18:30 */ UPDATE "USR1"."T1" SET "C1"=2,"C2"='b' WHERE "C1"=2;
/* 2004-12-29 19:19:00 */ DELETE FROM "USR1"."T1" WHERE "C1" IS NULL;
/* 2004-12-29 19:19:30 */ PURGE TABLE "USR1"."T1";
/* ****-**-** **:**:** */ /* HDEEVENT 200 */
/* ****-**-** **:**:** */ COMMIT;
|
更新SQL出力を実行するには,次のように操作します。
hdsstop -t immediate |
hdestart -e |
hdemodq |
$ pdlogls -d sys -s flora370 HOSTNAME : flora370(151739) Group Type Server Gen No. Status Run ID Block No. log10 sys sds01 1 oc-d--u 3e6835a9 1 40 log11 sys sds01 0 os----- 00000000 0 0 |
$ pdls -d rpl -j -s flora370 SYSTEMID : HRD1(150621) Data replication : Y UNITID : unt1(150621) Data replication : Y SERVER NAME : sds01 Extract Database : Y Extract Status : C System Log Extract Point : Run ID Group Gen No. BLock No. 3e6835a9 log10 1 41 System Log Sync Info : Run ID Group Gen No. BLock No. 3e6835a9 log10 1 13 |
hdestop |
hdestart -s -L |
hdestop |
表9-16 更新SQL出力機能実行中に系切り替えが発生した場合のDatareplicatorの動作
| 系切り替えの発生状況 | Datareplicatorの動作 |
|---|---|
| MSTが存在するホストで系切り替えが発生 | 系切り替え完了後,MSTはいったん起動されますが,更新SQL出力状態で稼働中のNMTからの接続要求を拒否します。その結果,すべてのNMT及びMSTが停止します。 |
| NMTが存在するホストで系切り替えが発生 | 系切り替え完了後,NMTはいったん起動されますが※,更新SQL出力状態で稼働中のMSTは,NMTからの接続要求を拒否します。その結果,系切り替えが発生したNMTは停止します。 |
All Rights Reserved. Copyright (C) 2006, 2016, Hitachi, Ltd.