Hitachi

HiRDB データ連動機能 HiRDB Datareplicator Version 10


9.8.2 更新SQLファイル

更新SQL出力機能によって出力される更新SQLファイルについて説明します。

〈この項の構成〉

(1) 出力先

更新SQLファイルの出力先を次に示します。

項目

出力先

出力先ノード

抽出側DBの更新対象になる各ノード

出力先ディレクトリ

抽出側Datareplicator運用ディレクトリ

ファイル名称

SQLTXT_サーバ名_送信先識別子

同じ名称のファイルが存在している場合,情報がそのファイルに追加出力されます。

また,抽出情報キューファイルに未送信情報が存在しない場合,更新SQLファイルは作成されません。

(2) 出力形式

更新SQLファイルには,未送信情報が1行1SQL文の形式で出力されます。SQL文として出力されるデータはCOMMITされたトランザクションのものだけであり,ROLLBACKされたトランザクションのデータは出力されません。また,トランザクションはCOMMITされた順番に並べ替えて出力されます。なお,仕掛かり中の更新情報は出力されません。

出力されるデータの形式を次に示します。

INSERT文
/* 更新日時 */ INSERT INTO 認可識別子.表名(列名,列名,...) VALUES(値※1,値,...);
UPDATE文※2
/* 更新日時 */ UPDATE 認可識別子.表名 SET※3 列名=値※1,列名=値, ... WHERE※4 列名=値 AND 列名=値 ...;
DELETE文
/* 更新日時 */ DELETE FROM 認可識別子.表名 WHERE※4 列名=値※1 AND 列名=値 ...;
PURGE TABLE文※5
/* 更新日時 */ PURGE TABLE 認可識別子.表名;
イベント※6
/* ****-**-** **:**:** */ /* HDEEVENT イベントコード */
トランザクションの終端
/* ****-**-** **:**:** */ COMMIT;
注※1

出力する列値の形式と内容を次の表に示します。なお,繰返し列の場合は,NULL値/非NULL値に関係なく,列値は*MCOL*と出力されます。

列属性

文字集合

指定

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*"

  • SUBSTR演算の場合も,該当する固定文字列("*BLOB*"又は"*BINARY*")が出力されます。

  • NULL値/非NULL値に関係なく,該当する固定文字列("*BLOB*"又は"*BINARY*")が出力されます。

BINARY

"*BINARY*"

ADT

固定文字列

"*ADT*"

NULL値/非NULL値に関係なく,該当する固定文字列"*ADT*"が出力されます。

(凡例)

−:該当しません。

注※2

繰返し列に対する更新情報を出力する場合,次の制限があります。

  • UPDATE ADD,UPDATE SET,及びUPDATE DELETEは,すべてUPDATE SETとして出力されます。

  • 要素指定による更新の場合でも,列名に対する添え字及び'*'は出力されません。

注※3

定義長が256バイト以上の可変長データが非更新の場合,その列はSET句に出力されません。

注※4

WHERE句にはマッピングキー列が出力されます。列値がNULLの場合には,「列名 IS NULL」の形式で出力されます。

注※5

複数サーバにわたる分割表に対するPURGE TABLEの更新情報を検知した場合,送信環境定義のprg_eventnoオペランド指定の有無に従って動作します。指定値による動作の違いを次に示します。

オペランドの指定

動作

あり

prg_eventnoオペランドに指定した番号のイベントを出力します。イベント出力後,処理を続行します。

なし

該当するPURGE TABLEを無視します。

注※6

イベントコード0は本来反映側Datareplicatorへの送信対象ではありませんが,このファイルには出力されます。

一つのトランザクション中で複数のイベントが発行された場合,最後に発行されたイベントだけ出力されます。また,hdeeventコマンドによるイベント発行の場合,イベントが出力された直後にCOMMITが出力されます。

(3) 出力例

更新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;