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;