db2 v9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=qrepdb...

128
Replication/Federation機能強化 <第1.00版 2009年 7> に含まれている情報は、正式なIBMのテストを受けていません。また、明記にしろ、黙的にしろ、なんらの保証もなしに配布されるものです。 この情報の使用またはこれらの技術の実施は、いずれも、使用先の責任において行われるべきものであり、それらを評価し、実際に使用する環境に統合する 使用先の判断に依存しています。それぞれの項目は、ある特定の状態において正確であることがIBMによって調べられていますが、他のところで同じまたは同 様の結果が得られる保証はありません。これらの技術を自身の環境に適用することを試みる使用先は、自己の責任において行う必要があります。 © Copyright IBM Japan Systems Engineering Co., Ltd. 2009 DB2 V9.7新機能ワークショップ

Upload: dangtuong

Post on 20-Jun-2018

307 views

Category:

Documents


10 download

TRANSCRIPT

Page 1: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

Replication/Federation機能強化

<第1.00版 2009年 7月>

本書に含まれている情報は、正式なIBMのテストを受けていません。また、明記にしろ、暗黙的にしろ、なんらの保証もなしに配布されるものです。

この情報の使用またはこれらの技術の実施は、いずれも、使用先の責任において行われるべきものであり、それらを評価し、実際に使用する環境に統合する使用先の判断に依存しています。それぞれの項目は、ある特定の状態において正確であることがIBMによって調べられていますが、他のところで同じまたは同

様の結果が得られる保証はありません。これらの技術を自身の環境に適用することを試みる使用先は、自己の責任において行う必要があります。

© Copyright IBM Japan Systems Engineering Co., Ltd. 2009

DB2 V9.7新機能ワークショップ

Page 2: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

2 © 2009 ISE Corporation

目次

• Range partition表表表表ののののサポートサポートサポートサポート

• Compression表表表表ののののサポートサポートサポートサポート

• Option to replicate Loadののののサポートサポートサポートサポート

• Multiple Restart Queue ののののサポートサポートサポートサポート

• ConcurrentAccessResolution for Load

• XML列列列列ののののTransformationサポートサポートサポートサポート

• フェデレーテッドフェデレーテッドフェデレーテッドフェデレーテッド・・・・クエリークエリークエリークエリーののののキャンセルキャンセルキャンセルキャンセルサポートサポートサポートサポート

• 全体全体全体全体まとめまとめまとめまとめ

Page 3: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

3 © 2009 ISE Corporation

Range partition表のサポートRange partition表のサポート

Page 4: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

4 © 2009 ISE Corporation

Range partition表のサポート

目的目的目的目的

Range partition表表表表ををををソースソースソースソースとしたとしたとしたとした差分差分差分差分レプリケーションレプリケーションレプリケーションレプリケーションののののサポートサポートサポートサポート

使用方法使用方法使用方法使用方法とととと変更点変更点変更点変更点

Qcaptureがががが自動的自動的自動的自動的にににに使用使用使用使用

DB2ののののLOG read APIのののの機能拡張機能拡張機能拡張機能拡張によるによるによるによる

使用可能使用可能使用可能使用可能ななななレベルレベルレベルレベル

IRS V9.7 GA ~~~~

対象対象対象対象プラットフォームプラットフォームプラットフォームプラットフォーム

Linux, Unix, Windows

当機能の目的と使用方法

Page 5: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

5 © 2009 ISE Corporation

Range Partition表(テーブル・パーティショニング)

• データデータデータデータのののの範囲範囲範囲範囲によってによってによってによって、、、、ひとつのひとつのひとつのひとつの表表表表をををを複数複数複数複数ののののパーティションパーティションパーティションパーティションにににに物理的物理的物理的物理的にににに分割分割分割分割してしてしてして保存保存保存保存

• 新新新新しいしいしいしいパーティションパーティションパーティションパーティションののののアタッチアタッチアタッチアタッチ/デタッチデタッチデタッチデタッチがががが可能可能可能可能

履歴表履歴表履歴表履歴表A

JAN01

区分区分区分区分ののののデタッチデタッチデタッチデタッチ

JAN05

JAN05

区分区分区分区分ののののアタッチアタッチアタッチアタッチ

JAN01 JAN02 JAN03 JAN04

V9からの機能

Page 6: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

6 © 2009 ISE Corporation

Range Partition表のメリット• ①①①①保存期間保存期間保存期間保存期間をををを過過過過ぎたぎたぎたぎた行行行行のののの高速高速高速高速なななな削除削除削除削除

• 従来はDELETEによる大量行の削除

• 低速、大量のログを発生、表の再編成必要

• ②②②②新新新新しいしいしいしいデータデータデータデータののののオンラインオンラインオンラインオンラインでのでのでのでの高速高速高速高速ロードロードロードロード

• LOAD済みの表をアタッチする

• 読み書き不能になるのはアタッチ処理の瞬間的時点のみ

• ③③③③データアクセスデータアクセスデータアクセスデータアクセスのののの性能向上性能向上性能向上性能向上

• 指定された条件によって、特定パーティションのみアクセス

• ④④④④故障範囲故障範囲故障範囲故障範囲のののの局所化局所化局所化局所化

• ある表スペースがアクセス不能になっても、その他の表スペースに配

置されたパーティションへのアクセスは可能

• ⑤⑤⑤⑤バックアップバックアップバックアップバックアップ性能性能性能性能のののの向上向上向上向上

• 複数の表スペースに分割配置し、並列バックアップ可能

• BACKUPコマンドのPARALLELISMオプション

①①①①

②②②②

③③③③ ④④④④

V9からの機能

⑤⑤⑤⑤

Page 7: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

7 © 2009 ISE Corporation

Range Partition表サポート

• V9.7よりよりよりよりRange Partition表表表表ををををソースソースソースソース表表表表としたとしたとしたとしたレプリケーションレプリケーションレプリケーションレプリケーションがががが可能可能可能可能

• 従来までは、Range Partition表を使用できたのはターゲット表の場合のみ

新機能新機能新機能新機能((((LUW)

履歴表履歴表履歴表履歴表A

JAN01

INSERT

UPDATE

DELETE

QCaptureSQLCapture

Log Read API

JAN02 JAN05・・・・

DB2 ログ

Page 8: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

8 © 2009 ISE Corporation

Range Partition表サポート

• ターゲットターゲットターゲットターゲット表表表表ははははRange Partition表表表表であってもであってもであってもであっても、、、、通常表通常表通常表通常表であってもよいであってもよいであってもよいであってもよい

• Qcapture、、、、SQLcaptureははははパーティションパーティションパーティションパーティションののののアタッチアタッチアタッチアタッチ・・・・デタッチデタッチデタッチデタッチのののの検知検知検知検知がががが可能可能可能可能• ASN7184W “Q Capture” : “<キャプチャー・スキーマ>” : “WorkerThread” : ソース表 “<ソース表名>” にデータ・パーティション “<

パーティション番号>" がアタッチされました。• ASN7185W "Q Capture" : "<キャプチャー・スキーマ> " : "WorkerThread" : ソース表 "<ソース表名>” からデータ・パーティション

“<パーティション番号>" がデタッチされました。

• 注意事項注意事項注意事項注意事項

• ソース表とアタッチする表の双方にData Capture Changesオプションの指定が必要• ただしINCLUDE LONGVAR COLUMNSオプションの有無も一致していなければ

ならない• 一致していない場合、SQL20307Nの理由コード 9のエラー

• ソース表にデータが入った表をアタッチしても、そのデータは自動的にはレプリケーション(INSERT)されない

• ターゲット表に手動でデータを挿入、あるいは同じデータが入った表をアタッチしておく必要あり

• ソース表からパーティションをデタッチしても、そのデータは自動的には削除されない

• ターゲット表からも削除したい場合は、手動でデータを削除、あるいは同じレンジのデータが入ったパーティションをデタッチしておく必要あり

Page 9: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

9 © 2009 ISE Corporation

検証: 差分レプリケーションの確認• ソースソースソースソース表表表表ののののDDL

CREATE TABLE DB2INST1.PARTTAB (pk int, rk int) IN USERSPACE1

PARTITION BY RANGE (rk)

(PART p0 STARTING 0,

PART p1 STARTING 100,

PART p2 STARTING 200 ENDING 299) ;

CREATE UNIQUE INDEX DB2INST1.IX_PARTTAB ON DB2INST1.PARTTAB ( PK ASC );

ALTER TABLE DB2INST1.PARTTAB DATA CAPTURE CHANGES INCLUDE LONGVAR COLUMNS;

• パーティションパーティションパーティションパーティション表表表表のののの確認確認確認確認

db2 DESCRIBE DATA PARTITIONS FOR TABLE PARTTAB SHOW DETAIL

PartitionId Inclusive (y/n) Inclusive (y/n)Low Value High Value

----------- - ------------------------------- - -------------------------------0 Y 0 N 1001 Y 100 N 2002 Y 200 Y 299

PartitionId PartitionName TableSpId PartObjId IndexTblSpId LongTblSpId AccessModeStatus

----------- ------------------------------- ----------- ----------- ------------ ----------- - ------0 P0 2 4 2 2 F1 P1 2 5 2 2 F2 P2 2 6 2 2 F

Page 10: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

10 © 2009 ISE Corporation

検証: 差分レプリケーションの確認

• ターゲットターゲットターゲットターゲット表表表表ののののDDL((((サブスクリプションサブスクリプションサブスクリプションサブスクリプションのののの作成作成作成作成によってによってによってによって新規表作成新規表作成新規表作成新規表作成をををを選択選択選択選択))))

• ターゲット表に対しては、パーティション表のDDLは生成されない

CREATE TABLE DB2INST1.TG_PARTTAB

(PK INTEGER,

RK INTEGER)

IN TSTG_PARTTAB;

CREATE UNIQUE INDEX DB2INST1.IXTG_PARTTAB ON DB2INST1.TG_PARTTAB ( PK ASC );

• ソースソースソースソース表表表表ににににデータデータデータデータををををINSERTしておくしておくしておくしておく

>db2 insert into parttab values (1,1)

DB20000I SQL コマンドが正常に完了しました。

>db2 select * from parttab

PK RK

----------- -----------

1 1

1 レコードが選択されました。

Page 11: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

11 © 2009 ISE Corporation

検証: 差分レプリケーションの確認

• Qcaptureののののスタートスタートスタートスタート

asnqcap capture_server=QREPDB capture_schema=QREP3

ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4" は開始中です。

ASN0594I "Q Capture" : "QREP3" : "Initial" プログラムは、キーが "(Global¥OSSEIPC48tempDB2_03

QREPDB.QREP3.QCAP.IPC, Global¥OSSEIPC49tempDB2_03.QREPDB.QREP3.QCAP.IPC, Global¥OSSEIPC50tempDB2_03.Q" の IPC

キューを作成しました。

ASN7010I ASN7010I ASN7010I ASN7010I ““““Q CaptureQ CaptureQ CaptureQ Capture”””” : : : : ““““QREP3QREP3QREP3QREP3”””” : : : : ““““WorkerThreadWorkerThreadWorkerThreadWorkerThread”””” : : : : プログラムプログラムプログラムプログラムはははは、、、、ソースソースソースソース表表表表 ““““MANA.PARTTABMANA.PARTTABMANA.PARTTABMANA.PARTTAB”””” のののの発行発行発行発行またはまたはまたはまたは

Q Q Q Q サブスクリプションサブスクリプションサブスクリプションサブスクリプション ““““PARTTAB0001PARTTAB0001PARTTAB0001PARTTAB0001”””” ((((送信送信送信送信キューキューキューキュー ““““Q3Q3Q3Q3””””、、、、発行発行発行発行またはまたはまたはまたはレプリケーションレプリケーションレプリケーションレプリケーション・・・・キューキューキューキュー・・・・マップマップマップマップ

"QREPDB_QREP3_T_QREPDB_QREP3") "QREPDB_QREP3_T_QREPDB_QREP3") "QREPDB_QREP3_T_QREPDB_QREP3") "QREPDB_QREP3_T_QREPDB_QREP3") をををを正常正常正常正常にににに活動化活動化活動化活動化しましたしましたしましたしました。。。。

ASN7000I "Q Capture" : "QREP3" : "WorkerThread" : "1" サブスクリプションがアクティブです。 "

“ サブスクリプションは非アクティブです。新しい ”0“ サブスクリプションは、正常に活動化されました。

新しい "0" サブスクリプションは、活動化できず非アクティブになっています。

ASN0572I "Q Capture" : "QREP3" : "WorkerThread" : "mqpub 9.7.4" プログラムは正常に初期化され

ました。

Page 12: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

12 © 2009 ISE Corporation

検証: 差分レプリケーションの確認

• QApplyののののスタートスタートスタートスタート

asnqapp apply_server=QREPDB apply_schema=QREP3 LOGSTDOUT=Y

ASN0600I “Q Apply” : “” : “Initial” : プログラム “mqapply 9.7.4” は開始中です

(中略)

ASN7606I "Q Apply" : "QREP3" : "BR00000" : Q Q Q Q サブスクリプションサブスクリプションサブスクリプションサブスクリプション "PARTTAB0001" ("PARTTAB0001" ("PARTTAB0001" ("PARTTAB0001" (受信受信受信受信キューキューキューキュー "Q3""Q3""Q3""Q3"、、、、レプリケーレプリケーレプリケーレプリケーションションションション・・・・キューキューキューキュー・・・・マップマップマップマップ "QREPDB_QREP3_TO_QREPDB_QREP3") "QREPDB_QREP3_TO_QREPDB_QREP3") "QREPDB_QREP3_TO_QREPDB_QREP3") "QREPDB_QREP3_TO_QREPDB_QREP3") ががががアクティブアクティブアクティブアクティブですですですです。。。。

ASN7526I "Q Apply" : "QREP3" : "BR00000" : Q アプライ・プログラムが、レプリケーション・キュー・マップ“QREPDB_QREP3_TO_QREPDB_QREP3” の受信キュー “Q3” の処理を開始しました。

(中略)

ASN7607I "Q Apply" : "QREP3" : "BR00000" : Q サブスクリプション "PARTTAB0001" (受信キュー "Q3"、レプリケーション・キュー・マップ "QREPDB_QREP3_TO_QREPDB_QREP3") がターゲットのロードを終了しました。変更は、スピル・キュー "IBMQREP.SPILL.MODELQ.0.1.1" から適用されます。

ASN8999D Browser for queue 'Q3' received a 'ASNMQ_LOADDONE_RCVD' message.

ASN7606I "Q Apply" : "QREP3" : "BR00000" : Q サブスクリプション "PARTTAB0001" (受信キュー "Q3"、レプリケーション・キュー・マップ "QREPDB_QREP3_TO_QREPDB_QREP3") がアクティブです。

Page 13: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

13 © 2009 ISE Corporation

検証: 差分レプリケーションの確認

• ソースソースソースソース表表表表へのへのへのへのINSERTととととレプリケーションレプリケーションレプリケーションレプリケーションのののの確認確認確認確認

>db2 insert into parttab values (100,100)

DB20000I SQL コマンドが正常に完了しました。

>db2 select * from parttab

PK RK

----------- -----------

1 1

100 100

2 レコードが選択されました。

>db2 select * from tg_parttab

PK RK

----------- -----------

1 1

100 100

2 レコードが選択されました。

差分レプリケーションの確認

Page 14: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

14 © 2009 ISE Corporation

参考:V9.5の場合

• V9.5でもでもでもでもRange Partition表表表表ををををソースソースソースソース表表表表としてとしてとしてとして登録登録登録登録はできてしまうがはできてしまうがはできてしまうがはできてしまうが、、、、QCaptureででででエラーエラーエラーエラーになりになりになりになり、、、、CAPSTART直後直後直後直後ににににサブスクリプションサブスクリプションサブスクリプションサブスクリプションがががが非非非非活動化活動化活動化活動化されるされるされるされる

• IBMQREP_SENDQUEUESのERROR_ACTIONが‘S’であっても、QCaptureは停止はしない

asnqcap capture_server=QREPDB capture_schema=QREP3 LOGSTDOUT=Y

009-04-14-03.09.14.546000 ASN0600I "Q Capture" : "" : "Initial" : Program "mqpub 9.5.0" is starting.

(中略)

ASN0630E "Q Capture" :"QREP3" : "WorkerThread" : Table "DB2INST1.PARTTAB" is a partitioned table

.

ASN0589I "Q Capture" : "QREP3" : "WorkerThread" The program received an unexpected return code "6020" from

routine "masterSub::masterSub".

ASN7133I “Q Capture” :“QREP3” : “WorkerThread” : The publication or Q subscription “PARTTAB0001” wasstopped.

ASN7006E "Q Capture" : "QREP3" : "WorkerThread" : The publication or Q subscription "PARTTAB0001" was deactivated due to an error.

IBMQREP_SUBS表のSTATE N(新規登録) => I(非活動)

Page 15: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

15 © 2009 ISE Corporation

検証: ATTACH Partitionの確認

• 新新新新しいしいしいしいパーティションパーティションパーティションパーティションののののアタッチアタッチアタッチアタッチ

• Qcaptureががががパーティションパーティションパーティションパーティションののののアタッチアタッチアタッチアタッチをををを検知検知検知検知

(Qcaptureが停止していた場合は、次回のWARMスタート時に検知する)

ASN7184W “Q Capture” : “QREP3” : “WorkerThread” : ソース表 “MANA.PARTTAB” にデータ・パーティション

"3" がアタッチアタッチアタッチアタッチされましたされましたされましたされました。

CREATE TABLE WORKTAB (pk int,rk int) IN USERSPACE1 ;

INSERT INTO WORKTAB VALUES (300,300);

ALTER TABLE WORKTAB DATA CAPTURE CHANGES INCLUDE LONGVAR COLUMNS;

ALTER TABLE PARTTAB ATTACH PARTITIONATTACH PARTITIONATTACH PARTITIONATTACH PARTITION p3 STARTING (300) ENDING (399) FROM WORKTAB;

=> SQL3601W ステートメントにより 1 つ以上の表が自動的に SET INTEGRITY

ペンディング状態になりました。 SQLSTATE=01586

>db2 select * from tg_parttab

PK RK

----------- -----------

1 1

100 100

2 レコードが選択されました。

• しかししかししかししかし、、、、アタッチアタッチアタッチアタッチしたしたしたした表表表表ににににデータデータデータデータがががが入入入入っていてもっていてもっていてもっていても、、、、それはそれはそれはそれはレプリケーションレプリケーションレプリケーションレプリケーションされないされないされないされない

Page 16: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

16 © 2009 ISE Corporation

検証: ATTACH Partitionの確認

• アタッチアタッチアタッチアタッチしたしたしたしたパーティションパーティションパーティションパーティションにににに含含含含まれるまれるまれるまれる行行行行ののののINSERTととととレプリケーションレプリケーションレプリケーションレプリケーションのののの確認確認確認確認

>db2 insert into parttab values (350,350)

DB21034E コマンドが、有効なコマンド行プロセッサー・コマンドでないため、 SQLステートメントとして処理

されました。 SQL 処理中に、そのコマンドが返されました。

SQL0327N 定義済みデータ・パーティションの範囲外であるため、行を表“MANA.PARTTAB” に挿入できません。

SQLSTATE=22525

>db2 set integrity for parttab allow write access immediate checked

DB20000I SQL コマンドが正常に完了しました。

>db2 insert into parttab values (350,350)

DB20000I SQL コマンドが正常に完了しました。

>db2 select * from parttab

PK RK

----------- -----------

1 1

100 100

300 300

350 350

4 レコードが選択されました。

>db2 select * from tg_parttab

PK RK

----------- -----------

1 1

100 100

350 350

3 レコードが選択されました。

set integrity ペンディ

ング状態のため、新しい行の追加不可

新しい行の追加

ソース表に追加確認

パーティションをアタッチ後に挿入した行(350) は、レ

プリケーションされたが、アタッチ前に既存であった行(300)は、自動的にはレプリケーションされていない

set integrityの実行

Page 17: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

17 © 2009 ISE Corporation

検証: ADD Partitionの確認

• 新新新新しいしいしいしいパーティションパーティションパーティションパーティションのののの追加追加追加追加((((ADD)

• パーティション表はATTACHの検証時と同じPARTTAB

ALTER TABLE PARTTAB ADD PARTITION p3 STARTING (300) ENDING (399)

ASN7184W “Q Capture” : “QREP3” : “WorkerThread” : ソース表 “MANA.PARTTAB” にデータ・パーティション

“3” が追加追加追加追加されましたされましたされましたされました。

• Qcaptureががががパーティションパーティションパーティションパーティションのののの追加追加追加追加をををを検知検知検知検知

(Qcaptureが停止していた場合は、次回のWARMスタート時に検知する)

• パーティションパーティションパーティションパーティションのののの追加追加追加追加はははは、、、、データデータデータデータのののの追加追加追加追加をををを伴伴伴伴わないのでわないのでわないのでわないので、、、、ソースソースソースソース表表表表、、、、ターゲットターゲットターゲットターゲット表表表表ともともともとも変化変化変化変化なしなしなしなし

>db2 select * from parttab

PK RK

----------- -----------

1 1

100 100

2 レコードが選択されました。

>db2 select * from tg_parttab

PK RK

----------- -----------

1 1

100 100

2 レコードが選択されました。

Page 18: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

18 © 2009 ISE Corporation

検証: ADD Partitionの確認

• 追加追加追加追加したしたしたしたパーティションパーティションパーティションパーティションにににに含含含含まれるまれるまれるまれるデータデータデータデータののののINSERTととととレプリケーションレプリケーションレプリケーションレプリケーションをををを確認確認確認確認

>db2 insert into parttab values (350,350)

>db2 select * from parttab

PK RK

----------- -----------

1 1

100 100

350 350

3 レコードが選択されました。

>db2 select * from tg_parttab

PK RK

----------- -----------

1 1

100 100

350 350

3 レコードが選択されました。

ADDの場合は、set integrityの実行は不要

のため、すぐにデータ挿入可能

ソース表へのデータ挿入の確認

ターゲット表へも

レプリケーションされている

Page 19: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

19 © 2009 ISE Corporation

検証: DETACH Partitionの確認

• パーティションパーティションパーティションパーティションののののデタッチデタッチデタッチデタッチ

• パーティション表はADDの検証後の状態のPARTTAB(P3のパーティションが追加済み)

ALTER TABLE PARTTAB DETACH PARTITION p3 INTO WORKTAB2

ASN7184W “Q Capture” : “QREP3” : “WorkerThread” : ソース表 “MANA.PARTTAB” からデータ・パーティション

“3” がデタッチデタッチデタッチデタッチされましたされましたされましたされました。

• Qcaptureががががパーティションパーティションパーティションパーティションののののデタッチデタッチデタッチデタッチをををを検知検知検知検知

(Qcaptureが停止していた場合は、次回のWARMスタート時に検知する)

• ソースソースソースソース表表表表はははは、p、p、p、p3にににに入入入入っていたっていたっていたっていた350のののの行行行行がががが見見見見えなくなるえなくなるえなくなるえなくなる ((((デタッチデタッチデタッチデタッチははははset integrityはははは不要不要不要不要))))

>db2 select * from parttab

PK RK

----------- -----------

1 1

100 100

350 350

3 レコードが選択されました。

>db2 select * from parttab

PK RK

----------- -----------

1 1

100 100

2 レコードが選択されました。

p3のDETACH

Page 20: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

20 © 2009 ISE Corporation

検証: DETACH Partitionの確認

• デタッチデタッチデタッチデタッチでででで見見見見えなくなったえなくなったえなくなったえなくなった行行行行はははは、、、、ターゲットターゲットターゲットターゲット表表表表のののの方方方方はそのままはそのままはそのままはそのまま残残残残るるるる

>db2 select * from parttab

PK RK

----------- -----------

1 1

100 100

350 350

3 レコードが選択されました。

>db2 select * from tg_parttab

PK RK

----------- -----------

1 1

100 100

350 350

3 レコードが選択されました。

ソース表の

p3のDETACH

変化なし

Page 21: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

21 © 2009 ISE Corporation

運用上の考慮点

• ATTACH

• データの入った表をアタッチする場合は、ターゲット表にも同じデータを挿入するか、ターゲット表もパーティション表の場合は同じようにアタッチしてからレプリケーションを再開

• ADD

• ターゲット表がパーティション表の場合は、同じレンジのパーティションをADDしてからレプリケーションを再開

• DETACH

• ターゲット表からもデータを削除したい場合は、手動で削除するか、ターゲット表もパーティション表の場合は同じようにデタッチしてからレプリケーションを再開

• ターゲット表は履歴としてデータを残しておきたい場合は、そのままでよい

Page 22: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

22 © 2009 ISE Corporation

ATTACHの場合の注意事項• ATTACHするするするする表表表表へのへのへのへのData Capture Changes (DCC)のののの付加付加付加付加はははは、、、、

ATTACHのののの直前直前直前直前にににに行行行行うことうことうことうこと

• 即ち、DCCの付加とATTACHのののの間間間間ににににデータデータデータデータのののの更新更新更新更新がががが発生発生発生発生しないようしないようしないようしないようににににすること!

• DCCをつけてからATTACHするまでにデータの挿入や更新があると、その変更がATTACH後にレプリケーションされてしまうことがある

• レプリケーションされる条件• Capture停止中停止中停止中停止中に、DCCがついている表のデータの更新し、ATTACHを実行

• そのそのそのその後後後後Captureを開始

• Capture起動時にATTACHを検知するが、Capture停止中の更新も収集対象の更新として扱ってしまう• Capture起動後にATTACHが発行された場合は、収集しない

• DETACHにににに関関関関してもしてもしてもしてもDELETEおよびおよびおよびおよびDETACHををををCapture停止中停止中停止中停止中にににに実施実施実施実施するとするとするとするとDELETEがががが収集収集収集収集されないされないされないされない問題問題問題問題があるがあるがあるがある(WARNING検討検討検討検討中中中中))))

Page 23: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

23 © 2009 ISE Corporation

:Attach操作の考慮点• Capture停止中停止中停止中停止中にににに収集収集収集収集してしまうしてしまうしてしまうしてしまう例例例例

create table temp (pk smallint not null,rk smallint,description char(20)) in

userspace1 DATA CAPTURE CHANGES ;

insert into temp values (46,46,null);

alter table test_source attach partition part4 starting (41) ending (50) from temp;

• Capture停止中停止中停止中停止中にににに収集収集収集収集しないしないしないしない例例例例

create table temp (pk smallint not null,rk smallint,description char(20)) in userspace1;

insert into temp values (46,46,null);

Alter table temp data capture changes;

alter table test_source attach partition part4 starting (41) ending (50) from temp;

Data Capture ChangesをAttachの直前に実行

Page 24: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

24 © 2009 ISE Corporation

Range partition表のサポートはBiDir、P2Pでも使用可能

• BiDir、、、、P2Pのののの双方向双方向双方向双方向レプリケーションレプリケーションレプリケーションレプリケーションでもでもでもでも、、、、 Range

partition表表表表ををををサポートサポートサポートサポート

• ただしただしただしただし、、、、P2Pのののの場合場合場合場合はははは以下以下以下以下のののの考慮点考慮点考慮点考慮点ありありありあり

• ATTACHの場合、P2P用の追加列とデフォルト値を含む表を作成して、ATTACHする必要がある

• IBMQREPVERTIME

• TIMESTAMP NOT NULL WITH DEFAULT '0001-01-01-

00.00.00.000000‘

• IBMQREPVERNODE

• SMALLINT NOT NULL WITH DEFAULT 0

Page 25: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

25 © 2009 ISE Corporation

検証: 差分レプリケーションの確認• PARTTAB2表表表表ののののDDL

CREATE TABLE YANAV97.PARTTAB2 (pk int, rk int) IN USERSPACE1

PARTITION BY RANGE (rk)

(PART p0 STARTING 0,

PART p1 STARTING 100,

PART p2 STARTING 200 ENDING 299) ;

CREATE UNIQUE INDEX YANAV97.IX_PARTTAB2 ON DB2INST1.PARTTAB ( PK ASC );

ALTER TABLE YANAV97.PARTTAB2 DATA CAPTURE CHANGES INCLUDE LONGVAR COLUMNS;

• パーティションパーティションパーティションパーティション表表表表のののの確認確認確認確認

DB2 DESCRIBE DATA PARTITIONS FOR TABLE PARTTAB2 SHOW DETAIL

PartitionId Inclusive (y/n) Inclusive (y/n)Low Value High Value

----------- - ------------------------------- - -------------------------------0 Y 0 N 1001 Y 100 N 2002 Y 200 Y 299

PartitionId PartitionName TableSpId PartObjId IndexTblSpId LongTblSpId AccessModeStatus

----------- ------------------------------- ----------- ----------- ------------ ----------- - ------0 P0 2 19 2 2 F1 P1 2 281 2 2 F2 P2 2 512 2 2 F

Page 26: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

26 © 2009 ISE Corporation

検証: 差分レプリケーションの確認• TG_PARTTAB2表表表表ののののDDL

CREATE TABLE YANAV97.TG_PARTTAB2 (pk int, rk int) IN USERSPACE1

PARTITION BY RANGE (rk)

(PART p0 STARTING 0,

PART p1 STARTING 100,

PART p2 STARTING 200 ENDING 299) ;

CREATE UNIQUE INDEX YANAV97.IX_TG_PARTTAB2 ON YANAV97.TG_PARTTAB2 ( PK ASC );

ALTER TABLE YANAV97.TG_PARTTAB2 DATA CAPTURE CHANGES INCLUDE LONGVAR COLUMNS;

• パーティションパーティションパーティションパーティション表表表表のののの確認確認確認確認

DB2 DESCRIBE DATA PARTITIONS FOR TABLE TG_PARTTAB2 SHOW DETAIL

PartitionId Inclusive (y/n) Inclusive (y/n)Low Value High Value

----------- - ------------------------------- - -------------------------------0 Y 0 N 1001 Y 100 N 2002 Y 200 Y 299

PartitionId PartitionName TableSpId PartObjId IndexTblSpId LongTblSpId AccessModeStatus

----------- ------------------------------- ----------- ----------- ------------ ----------- - ------0 P0 2 18 2 2 F1 P1 2 280 2 2 F2 P2 2 281 2 2 F

Page 27: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

27 © 2009 ISE Corporation

検証: 差分レプリケーションの確認

• PARTTAB2表表表表ににににデータデータデータデータををををINSERTしておくしておくしておくしておく

>db2 insert into parttab2 values (1,1)

DB20000I SQL コマンドが正常に完了しました。

>db2 select * from parttab2

PK RK IBMQREPVERTIME IBMQREPVERNODE----------- ----------- -------------------------- --------------

1 1 0001-01-01-00.00.00.000000 0

1 record(s) selected.

ALTER TABLE YANAV97.PARTTAB2

ADD IBMQREPVERTIME TIMESTAMP NOT NULL WITH DEFAULT

'0001-01-01-00.00.00'

ADD IBMQREPVERNODE SMALLINT NOT NULL WITH DEFAULT 0

DATA CAPTURE CHANGES INCLUDE LONGVAR COLUMNS

• ASNCLPでででで定義定義定義定義するとするとするとすると IBMQREPVERTIME、、、、IBMQREPVERNODEをそれぞれのをそれぞれのをそれぞれのをそれぞれの表表表表にににに追加追加追加追加

ALTER TABLE YANAV97.TG_PARTTAB2

ADD IBMQREPVERTIME TIMESTAMP NOT NULL WITH DEFAULT

'0001-01-01-00.00.00'

ADD IBMQREPVERNODE SMALLINT NOT NULL WITH DEFAULT 0

DATA CAPTURE CHANGES INCLUDE LONGVAR COLUMNS

Page 28: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

28 © 2009 ISE Corporation

検証: 差分レプリケーションの確認

• PARTTAB2表表表表へのへのへのへのINSERTととととレプリケーションレプリケーションレプリケーションレプリケーションのののの確認確認確認確認

>db2 insert into parttab2(pk,rk) values (100,100)

DB20000I SQL コマンドが正常に完了しました。

>select * from parttab2

PK RK IBMQREPVERTIME IBMQREPVERNODE----------- ----------- -------------------------- --------------

1 1 0001-01-01-00.00.00.000000 0100 100 2009-04-30-02.37.48.402853 4

2 record(s) selected.

>select * from tg_parttab2

PK RK IBMQREPVERTIME IBMQREPVERNODE----------- ----------- -------------------------- --------------

1 1 0001-01-01-00.00.00.000000 0100 100 2009-04-30-02.37.48.402853 4

2 record(s) selected.

IBMQREPVERNODE=0:

フルリフレッシュ時に挿入

IBMQREPVERNODE=4:

差分レプリケーションの確認

Page 29: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

29 © 2009 ISE Corporation

検証: ATTACH Partitionの確認

• 新新新新しいしいしいしいパーティションパーティションパーティションパーティションののののアタッチアタッチアタッチアタッチ

• Qcaptureががががパーティションパーティションパーティションパーティションののののアタッチアタッチアタッチアタッチをををを検知検知検知検知

2009-04-30-11.40.12.935445 ASN7184W "Q Capture" : "QREP1" : "WorkerThread" :Data partition "3" was attachedattachedattachedattached to the source table "YANAV97.PARTTAB2".

CREATE TABLE WORKTAB (pk int,rk int, ibmqrepvertime timestamp not null with default '0001-01-01-00.00.00.000000', ibmqrepvernode smallint not null with default 0) IN USERSPACE1 ;

ALTER TABLE WORKTAB DATA CAPTURE CHANGES INCLUDE LONGVAR COLUMNS;

INSERT INTO WORKTAB(pk,rk) VALUES (300,300);

ALTER TABLE PARTTAB2 ATTACH PARTITIONATTACH PARTITIONATTACH PARTITIONATTACH PARTITION p3 STARTING (300) ENDING (399) FROM WORKTAB;

=> SQL3601W The statement caused one or more tables to automatically be placedin the Set Integrity Pending state. SQLSTATE=01586

>db2 set integrity for parttab2 allow write access immediate checked

DB20000I The SQL command completed successfully.

>db2 select * from parttab2

PK RK IBMQREPVERTIME IBMQREPVERNODE----------- ----------- -------------------------- --------------

1 1 0001-01-01-00.00.00.000000 0

100 100 2009-04-30-02.37.48.402853 4

300 300 0001-01-01-00.00.00.000000 0

3 record(s) selected.

• SET INTEGRITY をををを実行実行実行実行

Attatchする表に、P2P用の列

を作成することを忘れずに!

set integrity を忘れずに!

Page 30: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

30 © 2009 ISE Corporation

検証: ATTACH Partitionの確認

• 片方片方片方片方のののの表表表表にもにもにもにも新新新新しいしいしいしいパーティションパーティションパーティションパーティションののののアタッチアタッチアタッチアタッチ

• Qcaptureががががパーティションパーティションパーティションパーティションののののアタッチアタッチアタッチアタッチをををを検知検知検知検知

2009-04-30-11.47.13.250920 ASN7184W “Q Capture” : “QREP2” : “WorkerThread” :Data partition "3" was attachedattachedattachedattached to the source table "YANAV97.TG_PARTTAB2"

CREATE TABLE WORKTAB (pk int,rk int, ibmqrepvertime timestamp not null with default '0001-01-01-00.00.00.000000', ibmqrepvernode smallint not null with default 0) IN USERSPACE1 ;

ALTER TABLE WORKTAB DATA CAPTURE CHANGES INCLUDE LONGVAR COLUMNS;

INSERT INTO WORKTAB(pk,rk) VALUES (300,300);

ALTER TABLE TG_PARTTAB2 ATTACH PARTITIONATTACH PARTITIONATTACH PARTITIONATTACH PARTITION p3 STARTING (300) ENDING (399) FROM WORKTAB;

=> SQL3601W The statement caused one or more tables to automatically be placedin the Set Integrity Pending state. SQLSTATE=01586

>db2 set integrity for tg_parttab2 allow write access immediate checked

DB20000I The SQL command completed successfully.

>db2 select * from tg_parttab2

PK RK IBMQREPVERTIME IBMQREPVERNODE----------- ----------- -------------------------- --------------

1 1 0001-01-01-00.00.00.000000 0

100 100 2009-04-30-02.37.48.402853 4

300 300 0001-01-01-00.00.00.000000 0

3 record(s) selected.

• SET INTEGRITY をををを実行実行実行実行

Attatchする表に、P2P用の列

を作成することを忘れずに!

set integrity を忘れずに!

Page 31: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

31 © 2009 ISE Corporation

検証: ATTACH Partitionの確認

• アタッチアタッチアタッチアタッチしたしたしたしたパーティションパーティションパーティションパーティションにににに含含含含まれるまれるまれるまれる行行行行ののののINSERTととととレプリケーションレプリケーションレプリケーションレプリケーションのののの確認確認確認確認

>db2 insert into parttab2(pk,rk) values (350,350)

DB20000I The SQL command completed successfully.

>db2 select * from parttab2

PK RK IBMQREPVERTIME IBMQREPVERNODE----------- ----------- -------------------------- --------------

1 1 0001-01-01-00.00.00.000000 0

100 100 2009-04-30-02.37.48.402853 4

300 300 0001-01-01-00.00.00.000000 0

350 350 2009-04-30-02.44.12.706994 4

4 record(s) selected.

>db2 select * from tg_parttab2

PK RK IBMQREPVERTIME IBMQREPVERNODE----------- ----------- -------------------------- --------------

1 1 0001-01-01-00.00.00.000000 0

100 100 2009-04-30-02.37.48.402853 4

300 300 0001-01-01-00.00.00.000000 0

350 350 2009-04-30-02.44.12.706994 4

4 record(s) selected.

新しい行の追加

レプリケーション確認

Page 32: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

32 © 2009 ISE Corporation

検証: ADD Partitionの確認

• 新新新新しいしいしいしいパーティションパーティションパーティションパーティションのののの追加追加追加追加((((ADD)

• パーティション表はATTACHの検証時と同じPARTTAB2

ALTER TABLE PARTTAB2 ADD PARTITION p3 STARTING (300) ENDING (399)

2009-05-01-10.45.54.365061 ASN7183W "Q Capture" : "QREP1" : "WorkerThread" :

Data partition "3" was addedaddedaddedadded to the source table "YANAV97.PARTTAB2".

• Qcaptureががががパーティションパーティションパーティションパーティションのののの追加追加追加追加をををを検知検知検知検知

• 同様同様同様同様にもうにもうにもうにもう片方片方片方片方のののの表表表表にににに対対対対してもしてもしてもしてもパーティションパーティションパーティションパーティションををををADD

ALTER TABLE TG_PARTTAB2 ADD PARTITION p3 STARTING (300) ENDING (399)

2009-05-01-10.47.23.380852 ASN7183W "Q Capture" : "QREP2" : "WorkerThread" :

Data partition "3" was addedaddedaddedadded to the source table "YANAV97.TG_PARTTAB2".

• Qcaptureががががパーティションパーティションパーティションパーティションのののの追加追加追加追加をををを検知検知検知検知

Page 33: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

33 © 2009 ISE Corporation

検証: ADD Partitionの確認

• 追加追加追加追加したしたしたしたパーティションパーティションパーティションパーティションにににに含含含含まれるまれるまれるまれるデータデータデータデータののののINSERTととととレプリケーションレプリケーションレプリケーションレプリケーションをををを確認確認確認確認

>db2 insert into tg_parttab2(pk,rk) values (350,350) DB20000I The SQL command completed successfully.

>db2 select * from tg_parttab2

PK RK IBMQREPVERTIME IBMQREPVERNODE----------- ----------- -------------------------- --------------

1 1 0001-01-01-00.00.00.000000 0

100 100 2009-04-30-02.37.48.402853 4

350 350 2009-05-01-01.48.07.867481 8

3 record(s) selected.

>db2 select * from parttab2

PK RK IBMQREPVERTIME IBMQREPVERNODE----------- ----------- -------------------------- --------------

1 1 0001-01-01-00.00.00.000000 0

100 100 2009-04-30-02.37.48.402853 4

350 350 2009-05-01-01.48.07.867481 8

3 record(s) selected.

ADDの場合は、set integrityの実行は不要

のため、すぐにデータ挿入可能

片方の表へのデータ挿入の確認

レプリケーションされている

Page 34: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

34 © 2009 ISE Corporation

検証: DETACH Partitionの確認

• パーティションパーティションパーティションパーティションののののデタッチデタッチデタッチデタッチ

• パーティション表はADDの検証後の状態のPARTTAB2(P3のパーティションが追加済み)

ALTER TABLE PARTTAB2 DETACH PARTITION p3 INTO WORKTAB2

2009-05-01-10.36.43.696422 ASN7185W "Q Capture" : "QREP1" : "WorkerThread" :

Data partition "3" was detacheddetacheddetacheddetached from the source table "YANAV97.PARTTAB2".

• Qcaptureががががパーティションパーティションパーティションパーティションののののデタッチデタッチデタッチデタッチをををを検知検知検知検知

Page 35: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

35 © 2009 ISE Corporation

検証: DETACH Partitionの確認

• PARTTAB2表表表表はははは、p、p、p、p3にににに入入入入っていたっていたっていたっていた300、、、、350のののの行行行行がががが見見見見えなくなるえなくなるえなくなるえなくなる ((((デタッチデタッチデタッチデタッチははははset integrityはははは不要不要不要不要))))

>db2 select * from parttab2

PK RK IBMQREPVERTIME IBMQREPVERNODE----------- ----------- -------------------------- --------------

1 1 0001-01-01-00.00.00.000000 0

100 100 2009-04-30-02.37.48.402853 4

300 300 0001-01-01-00.00.00.000000 0

350 350 2009-04-30-02.44.12.706994 4

4 record(s) selected.

>select * from parttab2

PK RK IBMQREPVERTIME IBMQREPVERNODE

----------- ----------- -------------------------- --------------

1 1 0001-01-01-00.00.00.000000 0

100 100 2009-04-30-02.37.48.402853 4

2 record(s) selected.

P3の Detach

Page 36: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

36 © 2009 ISE Corporation

検証: DETACH Partitionの確認

ALTER TABLE TG_PARTTAB2 DETACH PARTITION p3 INTO WORKTAB2

2009-05-01-10.43.58.314665 ASN7185W "Q Capture" : "QREP2" : "WorkerThread" :

Data partition "3" was detacheddetacheddetacheddetached from the source table "YANAV97.TG_PARTTAB2".

• Qcaptureががががパーティションパーティションパーティションパーティションののののデタッチデタッチデタッチデタッチをををを検知検知検知検知

• 同様同様同様同様にににに片方片方片方片方のののの表表表表にににに対対対対してしてしてしてパーティションパーティションパーティションパーティションををををデタッチデタッチデタッチデタッチ

Page 37: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

37 © 2009 ISE Corporation

検証: DETACH Partitionの確認

• TG_PARTTAB2表表表表はははは、p、p、p、p3にににに入入入入っていたっていたっていたっていた300、、、、350のののの行行行行がががが見見見見えなくなるえなくなるえなくなるえなくなる ((((デタッチデタッチデタッチデタッチははははset integrityはははは不要不要不要不要))))

>db2 select * from tg_parttab2

PK RK IBMQREPVERTIME IBMQREPVERNODE----------- ----------- -------------------------- --------------

1 1 0001-01-01-00.00.00.000000 0

100 100 2009-04-30-02.37.48.402853 4

300 300 0001-01-01-00.00.00.000000 0

350 350 2009-04-30-02.44.12.706994 4

4 record(s) selected.

>select * from tg_parttab2

PK RK IBMQREPVERTIME IBMQREPVERNODE

----------- ----------- -------------------------- --------------

1 1 0001-01-01-00.00.00.000000 0

100 100 2009-04-30-02.37.48.402853 4

2 record(s) selected.

P3の Detach

Page 38: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

38 © 2009 ISE Corporation

ブランクブランクブランクブランク・・・・ページページページページ

Page 39: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

39 © 2009 ISE Corporation

Compression表のサポートCompression表のサポート

Page 40: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

40 © 2009 ISE Corporation

Compression表のサポート

目的目的目的目的

Compressされたされたされたされた表表表表ををををソースソースソースソースとしたとしたとしたとした差分差分差分差分レプリケーションレプリケーションレプリケーションレプリケーションののののサポートサポートサポートサポート

使用方法使用方法使用方法使用方法とととと変更点変更点変更点変更点

Qcaptureがががが自動的自動的自動的自動的にににに使用使用使用使用((((SQL Captureもももも使用可能使用可能使用可能使用可能)

DB2ののののLOG read APIのののの機能拡張機能拡張機能拡張機能拡張によるによるによるによる

使用可能使用可能使用可能使用可能ななななレベルレベルレベルレベル

IRS V9.7 GA ~~~~

対象対象対象対象プラットフォームプラットフォームプラットフォームプラットフォーム

Linux, Unix, Windows

当機能の目的と使用方法

Page 41: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

41 © 2009 ISE Corporation

圧縮とレプリケーション

�V95まではData Capture Changes属性が表に付与できない(SQL0270N)

DB2LogreadAPIは圧縮されたDataを非圧縮してCaptureへ返すことができない

V9.5Log

DB2ReadLogAPI

DB2ReadLogAPI

Dictionary

V9.7Log

Compressed data

Uncompressed data

�V97からData Capture Changes属性が表に付与可能 (XML列の圧縮もサポート)

Page 42: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

42 © 2009 ISE Corporation

行圧縮機能の概要(1/2)

• 辞書辞書辞書辞書をををを使使使使ったったったった行行行行レベルレベルレベルレベルののののデータデータデータデータ圧縮圧縮圧縮圧縮• 表のレコード情報から作成された辞書を使用して、実データを圧縮する機能

• 圧縮対象は、データ・ページのデータとログ・レコード

• LONG/LOB列、索引データは圧縮の対象外

• XML列は、INLINEでなくとも圧縮対象とすることが可能(V9.7で新規作成の表のみ対象)

• 辞書には、レコードにある特定のパターンが記録される

24355港区港区港区港区東京都東京都東京都東京都10000500Fred

24355港区港区港区港区東京都東京都東京都東京都20000500John

郵便番号郵便番号郵便番号郵便番号区区区区・・・・市市市市都道府県都道府県都道府県都道府県給与給与給与給与部署部署部署部署名前名前名前名前

……

東京都東京都東京都東京都, 港港港港区区区区,24355

02

50001

…243

55港港港港区区区区

東京東京東京東京都都都都

200

00

50

0

Joh

n

243

55港区

東京都

100

00

50

0

Fred

ディクショナリー

…(02)200

00

(01

)

Joh

n

(02)100

00

(0

1)

Fred

Page 43: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

43 © 2009 ISE Corporation

行圧縮機能の概要(2/2)

• 辞書辞書辞書辞書をををを使使使使ったったったった行行行行レベルレベルレベルレベルののののデータデータデータデータ圧縮圧縮圧縮圧縮((((続続続続きききき))))

• 設定単位は、表

• 辞書の作成は、データ・パーティション単位で行なわれる

• パーティション・データベースでは、さらにデータベース・パーティションごとに作成される

• Data Capture Changes属性が付与された表は1世代前の辞書をKeep可能

• メリットメリットメリットメリット

• 特に繰り返しの多いデータがある場合、データ・ページ使用量の削減が期待できる

• ディスクI/O(読み取り量)が削減できるため、I/Oネックのシステムには効果がある

• より多くのデータが圧縮された状態でバッファープールに乗るため、バッファープールHIT率の向上が期待できる

• ログ・ファイルへの書き出し量が削減される

• Captureの処理が遅れている場合に辞書が再作成されても1世代前の辞書を使用して変更収集を継続可能

新機能新機能新機能新機能

新機能新機能新機能新機能

Page 44: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

44 © 2009 ISE Corporation

行圧縮の流れ

((((圧縮対象表圧縮対象表圧縮対象表圧縮対象表のののの検討時検討時検討時検討時))))

1. 圧縮率の見積もり

• INSPECTコマンド、 ADMIN_GET_TAB_COMPRESS_INFO表関数

((((表表表表データデータデータデータのののの初期圧縮初期圧縮初期圧縮初期圧縮))))

2. 表へのCOMPRESS属性の定義(COMPRESS=YES)

3. 辞書作成、データ圧縮

• REORG TABLEコマンド、自動辞書作成(ADC)、LOADコマンド(REPLACE)など

((((圧縮後圧縮後圧縮後圧縮後のののの本番本番本番本番メンテナンスメンテナンスメンテナンスメンテナンス))))

4. 圧縮率の確認

• ADMIN_GET_TAB_COMPRESS_INFO表関数、 ADMINTABCOMPRESSINFO管理ビュー、SYSCAT.TABLES カタログ・ビュー

5. 辞書再作成、データ再圧縮

• RESETDICTIONARYオプションを指定したREORG TABLEコマンド

-以降、必要に応じて、4~5を繰り返し実施する

(注意) Capture対象表に関しては辞書を再作成する前に変更収集をEnd of Logまで終了させて

おく 注意注意注意注意

Page 45: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

45 © 2009 ISE Corporation

辞書の作成方法

• Shadow Copyアプローチアプローチアプローチアプローチによるによるによるによる表表表表のののの再編成再編成再編成再編成((((V9.1~)~)~)~)

• 再編成処理の中で、辞書を作成した上で、辞書に基づいた表データの圧縮を行なう。圧縮に使用される辞書は、既存を引き継ぐのか、新規に作成するのかを、オプションで指定できる。

• 自動自動自動自動辞辞辞辞書作成書作成書作成書作成((((ADC: Automatic Dictionary Creation、、、、V9.5~~~~))))

• 一定量のデータが表に格納された時点で、DB2が自動的に辞書を作成する。

• REPLACE モードモードモードモードによるによるによるによるLOADコマンドコマンドコマンドコマンド((((V9.5~)~)~)~)

• LOAD処理中に一定量のデータが表に格納された時点で、DB2が自動的に辞書を

作成する。辞書作成後に投入されたデータは、データ圧縮が行なわれて、表に格納される。デフォルトでは、既存の辞書が存在する場合には、その辞書が引き継がれる。

• 見積見積見積見積もりもりもりもり機能機能機能機能によるによるによるによる辞書作成辞書作成辞書作成辞書作成

• INSPECTコマンド(V9.1~)、ADMIN_GET_TAB_COMPRESS_INFO表関数(V9.5~)

• 圧縮率の見積もりを行なう際に作成される辞書が残る

• 辞書が保持されるのは、COMPRESS属性がYES、かつ 表に既存の辞書が存在

しない場合

Page 46: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

46 © 2009 ISE Corporation

表の再編成による表データの圧縮

• 表表表表のののの再編成再編成再編成再編成とあわせてとあわせてとあわせてとあわせて、、、、辞書辞書辞書辞書のののの作成作成作成作成よびよびよびよびデータデータデータデータのののの圧縮圧縮圧縮圧縮をををを行行行行なうことがなうことがなうことがなうことが可能可能可能可能

• 圧縮が行なわれるのは、表で行圧縮の設定が有効となっている場合のみ

• 他の辞書作成方法と異なり、既存の表データを圧縮することが可能

• 圧縮圧縮圧縮圧縮ののののコマンドコマンドコマンドコマンド例例例例

1. ALTER TABLEステートメントで、COMPRESSオプションの変更

2. 辞書の作成、データの圧縮

ALTER TABLE T2 COMPRESS YESALTER TABLE T2 COMPRESS YESALTER TABLE T2 COMPRESS YESALTER TABLE T2 COMPRESS YES

REORG TABLE T2 KEEPDICTIONARYREORG TABLE T2 KEEPDICTIONARYREORG TABLE T2 KEEPDICTIONARYREORG TABLE T2 KEEPDICTIONARY <辞書の作成、既存辞書がある場合は、引継ぐ(デフォルトの動作)>

REORG TABLE T1 RESETDICTIONARYREORG TABLE T1 RESETDICTIONARYREORG TABLE T1 RESETDICTIONARYREORG TABLE T1 RESETDICTIONARY <辞書の作成>

Page 47: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

47 © 2009 ISE Corporation

ADCによる自動辞書作成(1/3)

• 一定量一定量一定量一定量ののののデータデータデータデータがががが表表表表にににに格納格納格納格納されたされたされたされた時点時点時点時点でででで、、、、DB2がががが自動的自動的自動的自動的にににに辞書辞書辞書辞書をををを作成作成作成作成するするするする

• 容量のしきい値は、約1~2MB。データをサンプリングして、辞書が作成される(しきい値は内部的に決められている)

• 自動的に辞書作成が行われるのは、しきい値を最初に越えた時点のみ(一度のみ)

• 辞書作成後辞書作成後辞書作成後辞書作成後にににに挿入挿入挿入挿入されたされたされたされたデータデータデータデータがががが、、、、圧縮圧縮圧縮圧縮してしてしてして格納格納格納格納されるされるされるされる

• 既存データは、圧縮されない

• ADCがががが使用可能使用可能使用可能使用可能なななな条件条件条件条件はははは、、、、以下以下以下以下のとおりのとおりのとおりのとおり

• 表のCOMPRESS属性がYESに定義されている

• その表に辞書が作成されていない

• 辞書がすでに存在する場合、ADCは機能しない

• ADCののののトリガートリガートリガートリガーとなるとなるとなるとなる操作操作操作操作はははは、、、、以下以下以下以下のとおりのとおりのとおりのとおり

• INSERT

• IMPORT INSERT

• LOAD INSERT

• REDISTRIBUTE DATABASE PARTITION GROUP

Page 48: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

48 © 2009 ISE Corporation

ADCによる自動辞書作成(2/3)

Page 49: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

49 © 2009 ISE Corporation

ADCによる自動辞書作成(3/3)

((((ADCによるによるによるによる動動動動きききき))))

• 圧縮辞書圧縮辞書圧縮辞書圧縮辞書をををを持持持持たないたないたないたない空空空空のののの表表表表がががが存在存在存在存在するするするする。。。。

• 表表表表ににににデータデータデータデータがががが挿入挿入挿入挿入されるされるされるされる。。。。辞書辞書辞書辞書がががが存在存在存在存在しないためしないためしないためしないため、、、、データデータデータデータはははは圧縮圧縮圧縮圧縮されないされないされないされない。。。。

• 更更更更ににににデータデータデータデータがががが挿入挿入挿入挿入されるがされるがされるがされるが、、、、辞書辞書辞書辞書がががが存在存在存在存在しないためしないためしないためしないため、、、、データデータデータデータはははは圧縮圧縮圧縮圧縮されないされないされないされない。。。。

• しきいしきいしきいしきい値値値値にににに達達達達するとするとするとすると、、、、自動的自動的自動的自動的にににに辞書作成辞書作成辞書作成辞書作成がががが開始開始開始開始されるされるされるされる((((COMPRESS YES

のののの場合場合場合場合のみのみのみのみ)。)。)。)。

• 圧縮辞書圧縮辞書圧縮辞書圧縮辞書がががが作成作成作成作成されるされるされるされる((((既存既存既存既存ののののデータデータデータデータはははは圧縮圧縮圧縮圧縮されないままされないままされないままされないまま存在存在存在存在するするするする)。)。)。)。

• 圧縮辞書圧縮辞書圧縮辞書圧縮辞書がががが表表表表にににに付加付加付加付加されるされるされるされる。。。。

• このこのこのこの時点以降時点以降時点以降時点以降にににに挿入挿入挿入挿入されたされたされたされたデータデータデータデータはははは、、、、圧縮圧縮圧縮圧縮してしてしてして格納格納格納格納されるされるされるされる。。。。

※※※※既存既存既存既存ののののデータデータデータデータをををを圧縮圧縮圧縮圧縮するにはするにはするにはするには、、、、オフラインオフラインオフラインオフラインREORGがががが必要必要必要必要。。。。

Page 50: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

50 © 2009 ISE Corporation

XML記述子記述子記述子記述子…PR28

…ACC

…PR27

DOC (XML)…ID

RegionsIndex

索引索引索引索引オブジェクトオブジェクトオブジェクトオブジェクトデータデータデータデータ・・・・オブジェクトオブジェクトオブジェクトオブジェクト

XDAオブジェクトオブジェクトオブジェクトオブジェクト(XML Data)

XMLデータの圧縮

• DB2 V9.5では、指定したサイズ以下のXMLデータを基礎表に保持可能になった

• 基礎表に保持させたいXML列を定義する際に「INLINE LENGTH <integer>」キーワードを付加する。

• 下記の例では、10000バイト以下のXMLデータを、ベース表に保持する。

• 基礎表基礎表基礎表基礎表にににに保持保持保持保持されたものがされたものがされたものがされたものがV9.5V9.5V9.5V9.5でのでのでのでの圧縮対象圧縮対象圧縮対象圧縮対象

• DB2 V9.7DB2 V9.7DB2 V9.7DB2 V9.7ではではではではXDAXDAXDAXDAオブジェクトオブジェクトオブジェクトオブジェクトにににに保持保持保持保持されたされたされたされたXMLXMLXMLXMLデータデータデータデータもももも圧縮対象圧縮対象圧縮対象圧縮対象

create table dept (deptID char(8),...,doc XML inline length 10000)

圧縮可圧縮可圧縮可圧縮可((((V9.5V9.5V9.5V9.5))))

圧縮可圧縮可圧縮可圧縮可((((DB2 DB2 DB2 DB2 V9.7V9.7V9.7V9.7))))

Page 51: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

51 © 2009 ISE Corporation

「RESETDICTIONARY」 activeとHistorical Dictionary

影響影響影響影響なしなしなしなし、、、、全行圧縮解除全行圧縮解除全行圧縮解除全行圧縮解除されるされるされるされるNN

辞書辞書辞書辞書がががが除去除去除去除去されされされされ、、、、全行圧縮解除全行圧縮解除全行圧縮解除全行圧縮解除されるされるされるされるYN

辞書辞書辞書辞書がががが新規作成新規作成新規作成新規作成されされされされ、、、、行行行行がががが圧縮圧縮圧縮圧縮されるされるされるされるNY

辞書辞書辞書辞書がががが再作成再作成再作成再作成されされされされ、、、、行行行行がががが圧縮圧縮圧縮圧縮されるされるされるされるYY

結果辞書が存在するかCOMPRESS

• REORG RESETDICTIONARY

• Data Capture Changes属性が付与されている場合は再作成時に古い辞書は保持される

• INSPECTコマンドにてHistorical Dictionaryの有無を判断可能

Table phase start (ID Signed: 4, Unsigned: 4; Tablespace ID: 2) : DB2V97.T1

Data phase start. Object: 4 Tablespace: 2

The index type is 2 for this table.

Traversing DAT extent map, anchor 1088.

Extent map traversal complete.

Expansion dictionary size: 32768 bytes.

Compression dictionary size: 19712 bytes.

Historical expansion dictionary size: 32768 bytes.

DAT Object Summary: Total Pages 291 - Used Pages 272 - Free Space 0 %

Data phase end.

Page 52: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

52 © 2009 ISE Corporation

Compressed表 と辞書(Data pature Changeなし)

create table t1(c1 int not null primary key,c2 char(20),c3 char(20)) in userspace1 compress yes

DB20000I The SQL command completed successfully..

create procedure ins(in cnt int)begindeclare i int default 0;--while i < cntdoinsert into t1 values (i,char(i),char(i));--if mod(i,100) = 0 thencommit;--

end if;--set i = i + 1;--

end while;--commit;--return 0;--end

DB20000I The SQL command completed successfully.

call ins(45000)

Return Status = 0

Page 53: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

53 © 2009 ISE Corporation

Compressed表 と辞書

select COMPRESS_ATTR, DICT_BUILDER, DICT_BUILD_TIMESTAMP, COMPRESS_DICT_SIZE, EXPAND_DICT_SIZE from SYSIBMADM.ADMINTABCOMPRESSINFO WHERE tabname

='T1'and tabschema=USER

COMPRESS_ATTR DICT_BUILDER DICT_BUILD_TIMESTAMP COMPRESS_DICT_SIZE EXPAND_DICT_SIZE

------------- ------------------------------ -------------------------- -------------------- --------------------

Y TABLE GROWTH 2009-03-31-09.36.48.000000 20864 32768

Y NOT BUILT - 0 0

2 record(s) selected.

reorg table t1 resetdictionary

DB20000I The REORG command completed successfully.

select COMPRESS_ATTR, DICT_BUILDER, DICT_BUILD_TIMESTAMP, COMPRESS_DICT_SIZE, EXPAND_DICT_SIZE from SYSIBMADM.ADMINTABCOMPRESSINFO WHERE tabname

='T1' and tabschema=USER

COMPRESS_ATTR DICT_BUILDER DICT_BUILD_TIMESTAMP COMPRESS_DICT_SIZE EXPAND_DICT_SIZE

------------- ------------------------------ -------------------------- -------------------- --------------------

Y REORG 2009-03-31-09.36.57.000000 19712 32768

Y NOT BUILT - 0 0

2 record(s) selected.

(EXPAND_DICT_SIZE)Size of the expansion dictionary measured in bytes. If a historical dictionary exists, this value is the sum of the current and historical dictionary sizes.

Data Data Data Data CpatureCpatureCpatureCpature ChangeChangeChangeChange属性属性属性属性なしでなしでなしでなしでははははサイズサイズサイズサイズはははは変化変化変化変化なしなしなしなし

Page 54: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

54 © 2009 ISE Corporation

Compressed表 と辞書(Data pature Changeあり)

create table t1(c1 int not null primary key,c2 char(20),c3 char(20)) in userspace1 data capture changes compress yes

DB20000I The SQL command completed successfully..

create procedure ins(in cnt int)begindeclare i int default 0;--while i < cntdoinsert into t1 values (i,char(i),char(i));--if mod(i,100) = 0 thencommit;--

end if;--set i = i + 1;--

end while;--commit;--return 0;--end

DB20000I The SQL command completed successfully.

call ins(45000)

Return Status = 0

Page 55: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

55 © 2009 ISE Corporation

Compressed表 と辞書

select COMPRESS_ATTR, DICT_BUILDER, DICT_BUILD_TIMESTAMP, COMPRESS_DICT_SIZE, EXPAND_DICT_SIZE from SYSIBMADM.ADMINTABCOMPRESSINFO WHERE tabname

='T1'and tabschema=USER

COMPRESS_ATTR DICT_BUILDER DICT_BUILD_TIMESTAMP COMPRESS_DICT_SIZE EXPAND_DICT_SIZE

------------- ------------------------------ -------------------------- -------------------- --------------------

Y TABLE GROWTH 2009-03-31-09.05.03.000000 20864 32768

Y NOT BUILT - 0 0

2 record(s) selected.

reorg table t1 resetdictionary

DB20000I The REORG command completed successfully.

select COMPRESS_ATTR, DICT_BUILDER, DICT_BUILD_TIMESTAMP, COMPRESS_DICT_SIZE, EXPAND_DICT_SIZE from SYSIBMADM.ADMINTABCOMPRESSINFO WHERE tabname

='T1' and tabschema=USER

COMPRESS_ATTR DICT_BUILDER DICT_BUILD_TIMESTAMP COMPRESS_DICT_SIZE EXPAND_DICT_SIZE

------------- ------------------------------ -------------------------- -------------------- --------------------

Y REORG 2009-03-31-09.05.09.000000 19712 65536

Y NOT BUILT - 0 0

2 record(s) selected.

(EXPAND_DICT_SIZE)Size of the expansion dictionary measured in bytes. If a historical dictionary exists, this value is the sum of the current and historical dictionary sizes.

Data Data Data Data CpatureCpatureCpatureCpature ChangeChangeChangeChange属性属性属性属性ありでありでありでありでははははサイズサイズサイズサイズはははは変化変化変化変化ありありありあり

Page 56: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

56 © 2009 ISE Corporation

Compressed表 と辞書(XML + Data Capature Changeあり)

create table t1(c1 int not null primary key,c2 char(20),c3 xml ) in userspace1 data capture changes compress yesDB20000I The SQL command completed successfully.

create procedure ins(in cnt int)begindeclare i int default 0;--while i < cntdoinsert into t1 values (i,char(i),'<name>XML TO XML</name>');--if mod(i,100) = 0 thencommit;--

end if;--set i = i + 1;--

end while;--commit;--return 0;--end

DB20000I The SQL command completed successfully.

call ins(45000)

Return Status = 0

Page 57: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

57 © 2009 ISE Corporation

Compressed表 と辞書

select COMPRESS_ATTR, DICT_BUILDER, DICT_BUILD_TIMESTAMP, COMPRESS_DICT_SIZE, EXPAND_DICT_SIZE from SYSIBMADM.ADMINTABCOMPRESSINFO WHERE tabname

='T1'and tabschema=USER

COMPRESS_ATTR DICT_BUILDER DICT_BUILD_TIMESTAMP COMPRESS_DICT_SIZE EXPAND_DICT_SIZE

------------- ------------------------------ -------------------------- -------------------- --------------------

Y TABLE GROWTH 2009-03-31-10.25.54.000000 42752 32768

Y TABLE GROWTH 2009-03-31-10.25.47.000000 30336 32760

2 record(s) selected.

db2 reorg table t1 use tempspace1 longlobdata resetdictionary

DB20000I The REORG command completed successfully.

select COMPRESS_ATTR, DICT_BUILDER, DICT_BUILD_TIMESTAMP, COMPRESS_DICT_SIZE, EXPAND_DICT_SIZE from SYSIBMADM.ADMINTABCOMPRESSINFO WHERE tabname

='T1' and tabschema=USER

COMPRESS_ATTR DICT_BUILDER DICT_BUILD_TIMESTAMP COMPRESS_DICT_SIZE EXPAND_DICT_SIZE

------------- ------------------------------ -------------------------- -------------------- --------------------

Y REORG 2009-03-31-10.26.39.000000 40832 65536

Y REORG 2009-03-31-10.25.47.000000 30336 32760

2 record(s) selected.

(EXPAND_DICT_SIZE)Size of the expansion dictionary measured in bytes. If a historical dictionary exists, this value is the sum of the current and historical dictionary sizes.

XMLXMLXMLXMLははははData Data Data Data CpatureCpatureCpatureCpature ChangeChangeChangeChange属性属性属性属性ありでもありでもありでもありでもサイズサイズサイズサイズはははは変化変化変化変化ないないないない

Page 58: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

58 © 2009 ISE Corporation

辞書が使用できない場合のQcaptureメッセージ (SUBが非活動化)2009-03-31-10.52.42.214736 ASN7000I "Q Capture" : "ASN" : "WorkerThread" : "1" subscriptions are active. "0" subscriptions are inactive. "0" subscriptions that were new and were successfully activated. "0" subscriptions that were new could not be activated and are now inactive.

2009-03-31-10.52.42.215126 ASN0572I "Q Capture" : "ASN" : "WorkerThread" : The "mqpub 9.7.4" program initialized successfully.

2009-03-31-10.52.43.267414 ASN0011E CAPTURE "ASN" : "WorkerThread". The Capture program log read failed because the DB2 compression dictionary that was used to create the compressed log record no longer exists. The log record that could not be readwas for the registered source table "DB2V97.T1". The reason code is "*".

2009-03-31-10.52.46.357447 ASN7133I "Q Capture" :"ASN" : "WorkerThread" : The publication or Q Subscription "SUB1" was stopped.

2009-03-31-10.53.48.414995 ASN7019I "Q Capture" : "ASN" : "WorkerThread" : "CAPSTART" signal was received and will be processed.

2009-03-31-10.53.48.436288 ASN7017I "Q Capture" : "ASN" : "WorkerThread" : The target table "DB2V97.T1_COPY" is ready to be loaded from source table "DB2V97.T1" for publication or Q subscription "SUB1".

ASN0011E Explanation:

The Capture program received an error from the DB2 log read interface.

The reason code is from DB2 and indicates that the data in a log record

cannot be processed because the compression dictionary for the

corresponding DB2 table or table space is permanently gone. The

compressed table or table space containing this source table was

probably reorganized by the REORG utility that ran without the

KEEPDICTIONARY option. The Capture program cannot read the remaining

compressed log records from source changes that occurred before the

REORG. The Capture program follows the option that was specified for

Stop Capture on Error (Replication Center) or STOP ON ERROR (ASNCLP

command-line program) for this registration.

Page 59: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

59 © 2009 ISE Corporation

パーティション表と行圧縮の使用例

• 新規新規新規新規データデータデータデータのののの追加追加追加追加

方法 1: ADD PARTITION + データ投入(LOAD INSERT、IMPORT、INSERTなど)

• 空のパーティションをADDする

• データ投入

• データ投入の際、ADCによって、自動的に辞書作成、データ圧縮が行なわれる

方法 2: 行圧縮された表のアタッチ

• より精度の高い辞書作成のためには、こちらの方法が推奨される

履歴表履歴表履歴表履歴表A

JAN03

④区分のアタッチ

JAN01 JAN02 JAN03

履歴表履歴表履歴表履歴表A

JAN01 JAN02 JAN03

①表の作成

②データ投入③データ圧縮(REORG TABLE)

アタッチ対象表の属性がCOMPRESSION=NOの場合、ATTACHは失敗するので注意。(SQL20307N)

方法方法方法方法 1 方法方法方法方法 2

辞書辞書辞書辞書辞書辞書

辞書

①新規パーティションの作成(ADD PARTITON)

②データ投入

⑤SET INTEGRITYコマンド

Page 60: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

60 © 2009 ISE Corporation

Compressed表 とPartition表

create table t1 (pk int, rk int, dummy varchar(1000)) partitioning key (pk) partition by range (rk) (starting 1 ending 80000 every 20000 ) in userspace1 data capture changes compress yes

DB20000I The SQL command completed successfully.

==> db2 -vtd% -f while.db2

CREATE PROCEDURE WHILED(IN n1 INT)

LANGUAGE SQL

BEGIN NOT ATOMIC

DECLARE count INT;

DECLARE while_count INT default 0;

DECLARE max_count INT default 0;

SELECT max(pk) into max_count from t1;

if max_count is null then set max_count=0;

end if;

SET count = n1;

WHILE (count > 0) DO

SET while_count = while_count + 1;

INSERT INTO t1 VALUES (max_count+while_count, max_count+while_count,repeat('A',1000));

set count = count -1;

IF MOD(count,1000)=0 then COMMIT; end if;

END WHILE ; COMMIT;

END

DB20000I The SQL command completed successfully.

==> db2 "call whiled(80000)"

Return Status = 0

4444つのつのつのつの区分区分区分区分でででで区分毎区分毎区分毎区分毎にににに2222万件万件万件万件

Page 61: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

61 © 2009 ISE Corporation

Compressed表 とPartition表

select OBJECT_TYPE,COMPRESS_ATTR, DICT_BUILDER, DICT_BUILD_TIMESTAMP, COMPRESS_DICT_SIZE, EXPAND_DICT_SIZE,BYTES_SAVED_PERCENT from SYSIBMADM.ADMINTABCOMPRESSINFO WHERE tabname IN ('T1','T1_COPY') and TABSCHEMA=USER

select OBJECT_TYPE,COMPRESS_ATTR, substr(DICT_BUILDER,1,15) as DICT_BUILDER, DICT_BUILD_TIMESTAMP, COMPRESS_DICT_SIZE, EXPAND_DICT_SIZE,BYTES_SA

VED_PERCENT from SYSIBMADM.ADMINTABCOMPRESSINFO WHERE tabname IN ('T1','T1_COPY') and TABSCHEMA=USER

OBJECT_TYPE COMPRESS_ATTR DICT_BUILDER DICT_BUILD_TIMESTAMP COMPRESS_DICT_SIZE EXPAND_DICT_SIZE BYTES_SAVED_PERCENT

----------- ------------- --------------- -------------------------- -------------------- -------------------- -------------------

DATA Y NOT BUILT - 0 0 0

XML Y NOT BUILT - 0 0 0

DATA Y TABLE GROWTH 2009-03-31-12.02.35.000000 13312 27128 88

XML Y NOT BUILT - 0 0 0

DATA Y TABLE GROWTH 2009-03-31-12.02.58.000000 13440 27264 88

XML Y NOT BUILT - 0 0 0

DATA Y TABLE GROWTH 2009-03-31-12.03.25.000000 13440 27264 88

XML Y NOT BUILT - 0 0 0

DATA Y TABLE GROWTH 2009-03-31-12.03.53.000000 13440 27264 88

XML Y NOT BUILT - 0 0 0

10 record(s) selected.

Page 62: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

62 © 2009 ISE Corporation

Compressed表 とPartition表

==> db2 -vtf list.sql

describe data partitions for table t1 show detail

PartitionId Inclusive (y/n) Inclusive (y/n)

Low Value High Value

----------- - ------------------------------- - -------------------------------

0 Y 1 N 20001

1 Y 20001 N 40001

2 Y 40001 N 60001

3 Y 60001 Y 80000

4 record(s) selected.

PartitionId PartitionName TableSpId PartObjId IndexTblSpId LongTblSpId AccessMode

Status

----------- ------------------------------- ----------- ----------- ------------ ----------- - ------

0 PART0 2 4 2 2 F

1 PART1 2 6 2 2 F

2 PART2 2 7 2 2 F

3 PART3 2 8 2 2 F

4 record(s) selected.

Page 63: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

63 © 2009 ISE Corporation

Compressed表 とPartition表

ASN0594I "Q Capture" : "ASN" : "Initial" The program created an IPC queue with keys "(0x300001bb)".

2009-03-31-12.20.33.286295 ASN0585I "Q Capture" : "ASN" : "AdminThread" : The program successfully loaded the WebSphere MQ library "libmqm_r.a(

libmqm_r.o)". Environment variable ASNUSEMQCLIENT is set to "".

2009-03-31-12.20.33.339802 ASN7108I "Q Capture" : "ASN" : "WorkerThread" : At program initialization, the highest log sequence number of a successfully processed transaction is "0000:0000:0000:0000:0000" and the lowest log sequence number of a transactionstill to be committed is "0000:0000:0000:3EF3:0DCD".

2009-03-31-12.20.33.423588 ASN7155I "Q Capture" : "ASN" : "WorkerThread" : The Q Capture program started processing log records in log file "/dbland1/db2v97/NODE0000/SQL00001/SQLOGDIR/S0000243.LOG".

2009-03-31-12.20.33.477091 ASN7023W "Q Capture" : "ASN" : "WorkerThread" : Source table "DB2V97.T1" does not have a primary key, unique constraint, or unique index.

2009-03-31-12.20.33.537946 ASN7010I "Q Capture" : "ASN" : "WorkerThread" : The program successfully activated publication or Q subscription "SUB1" (send queue "Q1", publishing or replication queue map "MYQMAP1") for source table "DB2V97.T1".

2009-03-31-12.20.33.542225 ASN8999D Browser for queue 'Q1' received a 'ASNMQ_SUBSCHEMA_MSG' message.

2009-03-31-12.20.33.551002 ASN7000I "Q Capture" : "ASN" : "WorkerThread" : "0" subscriptions are active. "0" subscriptions are inactive. "0" subscriptions that were new and were successfully activated. "0" subscriptions that were new could not be activated and are now inactive.

2009-03-31-12.20.33.556616 ASN0572I "Q Capture" : "ASN" : "WorkerThread" : The "mqpub 9.7.4" program initialized successfully.

Page 64: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

64 © 2009 ISE Corporation

Compressed表 とPartition表

==> db2 -vtf attach_compress.sql

create table temp (pk int,rk int, dummy varchar(1000)) in userspace1 DATA CAPTURE CHANGES compress yes

DB20000I The SQL command completed successfully.

alter table temp DATA CAPTURE CHANGES INCLUDE LONGVAR COLUMNS

DB20000I The SQL command completed successfully.

alter table t1 attach partition part4 starting (80001) ending (100000) from temp

SQL3601W The statement caused one or more tables to automatically be placed

in the Set Integrity Pending state. SQLSTATE=01586

==> db2 set2009-03-31-12.35.47.246171 ASN7184WASN7184WASN7184WASN7184W "Q Capture" : "ASN" : "WorkerThread" : Data partition "4" was attached to the source table "DB2V97.T1".

==> db2 -vtf set.sql

set integrity for t1 allow write access immediate checked

DB20000I The SQL command completed successfully.

Page 65: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

65 © 2009 ISE Corporation

Compressed表 とPartition表

==> db2 "insert into t1 values (90000,90000,'90000')"

DB20000I The SQL command completed successfully.

==> asnqmfmt Q1 AZQMGR

**** Message number: 1

**** Message size: 538

qMsgHeader.msgFamily: QREP

qMsgHeader.msgtype: ASNMQ_TRANS_MSG

qMsgHeader.msgVersion: ASNMQ_VERSION400

qMsgHeader.msgFlag:

Last message in DB transaction.

qTransMsgHeader.segment_num: 0001

qTransMsgHeader.commit_LSN: 0000:0000:0000:3eff:bf79

qTransMsgHeader.commit_time: 03-31-2009 02:37:22.000002 UTC

qTransMsgHeader.commit_time: 03-31-2009 12:37:22.000002 LOCALTIME

qTransMsgHeader.nRows: 1

qTransMsgHeader.auth_id: DB2V97

qTransMsgHeader.auth_tkn:

qTransMsgHeader.plan_id:

qTransMsgHeader.uow_id: 0000:0000:0000:0004:ec83

qTransRow.length: 58

rowheader.encodetype: COMPACT

rowheader.encodever: ASNMQ_ROW_ENCODE_V100

rowheader.operation: INSERT

Page 66: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

66 © 2009 ISE Corporation

QCapture Performance Impact

• Test環境環境環境環境

- system configuration (optimus1)

- System Model: IBM,9117-570

- Processor Type: PowerPC_POWER5

- Number Of Processors: 4

- Processor Clock Speed: 2198 MHz

- Memory Size: 65536 MB

- OS level : 5300-07-01-0748

- build level : db2_DB2 V9.7_aix64_s090219

- workload : IRWW (balanced workload with IUD and fetch)

- compression type : row_compression

- preload

- non-DPF mode

+0%0.0520.052Q-Capture CPU (ms/row)

+10.3%109369909Q-Capture throughput (rows/sec)

Changess090219 (compressed Changes)

s090219 (not-compressed)

Tables have been pre-loaded, The second step I generate the workload with total of 4,321,974 changed rows. - After the workload finishes, started Q-Capture.

Page 67: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

67 © 2009 ISE Corporation

Option to replicate LoadのサポートOption to replicate Loadのサポート

Page 68: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

68 © 2009 ISE Corporation

Option to replicate Loadのサポート

目的目的目的目的

LOAD操作操作操作操作のののの検知検知検知検知とととと自動自動自動自動LOADののののサポートサポートサポートサポート

使用方法使用方法使用方法使用方法とととと変更点変更点変更点変更点

Qcaptureがががが自動的自動的自動的自動的にににに使用使用使用使用((((SQL Captureもももも使用不可使用不可使用不可使用不可)

DB2ののののLOG のののの機能拡張機能拡張機能拡張機能拡張によるによるによるによる

使用可能使用可能使用可能使用可能ななななレベルレベルレベルレベル

IRS V9.7 GA, IRS z/OS((((DB2 z/OS PTF要要要要))))

対象対象対象対象プラットフォームプラットフォームプラットフォームプラットフォーム

Linux, Unix, Windows, z/OS

当機能の目的と使用方法

Page 69: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

69 © 2009 ISE Corporation

Q Replication Full Refresh

ControlControl

ログログログログ・・・・ベースベースベースベース

WebSphere MQ

Q

CaptureQ

Apply

DB2

DB2

Non-

DB2

ニックネーム経由

ストアードストアードストアードストアードプロシージャープロシージャープロシージャープロシージャー

agent

agent

agent ターゲット表

フルフルフルフル・・・・リフレッシュリフレッシュリフレッシュリフレッシュ

ソース表差分差分差分差分コピーコピーコピーコピー

OracleOracleOracleOracleSQL ServerSQL ServerSQL ServerSQL Server

InformixInformixInformixInformixSybaseSybaseSybaseSybase

z/OSz/OSz/OSz/OSUnixUnixUnixUnixLinuxLinuxLinuxLinux

WindowsWindowsWindowsWindows

z/OSz/OSz/OSz/OSUnixUnixUnixUnixLinuxLinuxLinuxLinux

WindowsWindowsWindowsWindows

• WebSphere MQをををを使用使用使用使用したしたしたしたレプリケーションレプリケーションレプリケーションレプリケーション

• 更新差分をキューにPUTしてレプリケーション

• 自動自動自動自動/手動手動手動手動フルフルフルフル・・・・リフレッシュリフレッシュリフレッシュリフレッシュ、、、、またまたまたまたフルフルフルフル・・・・リフレッシュリフレッシュリフレッシュリフレッシュなしなしなしなし、、、、がががが容易容易容易容易にににに選択可能選択可能選択可能選択可能

• フル・リフレッシュ:初期データをターゲット側に転送(静止点の作成)• 転送中のソース側更新も、後追いで適用• 自動フル・リフレッシュでは、DB2のDRDA機能を使用

• Load Utilityをををを変更収集変更収集変更収集変更収集できないできないできないできない

• ただしSHRLEVEL CHANGEのLOADは収集可能(PQ52343 )

• ソースソースソースソース表表表表ののののLoadをををを検知検知検知検知ししししWarningをををを発行可能発行可能発行可能発行可能((((z/OSのみのみのみのみ)

• ASN0196W

Page 70: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

70 © 2009 ISE Corporation

自動ロード機能追加オプション

R(Restart the subscription) : CaptureははははWarningをををを発行後発行後発行後発行後、、、、ススススキーマキーマキーマキーマをををを発行発行発行発行、、、、ApplyははははLoad_Typeにににに従従従従うううう

W(default) : Warning Message ASN7186Wをををを出力出力出力出力

Data Type: CHAR(1) not null with default ‘W’CAPTURE_LOAD

• IBMQREP_SUBS

Load

�CAPTURE_LOAD=‘R’

QQQQキャプチャーキャプチャーキャプチャーキャプチャー QQQQアプライアプライアプライアプライ

SCHEMA Message

TEST_SOURCETEST_SOURCETEST_SOURCETEST_SOURCE TEST_COPYTEST_COPYTEST_COPYTEST_COPY

Page 71: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

71 © 2009 ISE Corporation

CAPTURE_LOAD=‘R’実行例

M 4020000 ZS17PA 09092 16:03:58.39 JOB00186 00000010 ASN7606I "Q Apply" : "AZUMA" : "BR00000" : Q subscription "SUB1" 292E 292 00000010 (receive queue "Q1", replication queue map "MYQMAP1") is active.N 0200000 ZS17PA 09092 16:04:12.92 JOB00188 00000010 $HASP100 LOAD1 ON INTRDR FROM TSU00163S ADMF001N 0000000 ZS17PA 09092 16:04:12.94 JOB00188 00000210 IRR010I USERID ADMF001 IS ASSIGNED TO THIS JOB.N 0020000 ZS17PA 09092 16:04:13.05 JOB00188 00000010 ICH70001I ADMF001 LAST ACCESS AT 16:03:47 ON THURSDAY, APRIL 2, 2009N 4000000 ZS17PA 09092 16:04:13.06 JOB00188 00000010 $HASP373 LOAD1 STARTED - INIT 3 - CLASS A - SYS STL0 N FFFFFFF ZS17PA 09092 16:04:15.77 JOB00188 00000010 SMF000I LOAD1 DSNUPROC DSNUTILB 0000N 4000000 ZS17PA 09092 16:04:15.77 JOB00188 00000010 $HASP395 LOAD1 ENDEDN C000000 ZS17PA 09092 16:04:15.78 00000201 $HASP309 INIT 3 INACTIVE ******** C=APZRX3NC0000000 ZS17PA 09092 16:04:15.80 INTERNAL 00000210 SE '16.04.15 JOB00188 $HASP165 LOAD1 ENDED AT STLVM3 MAXCC=0',LOGON,SC USER=(ADMF001)

M 4020000 ZS17PA 09092 16:04:19.15 JOB00185 00000010 ASN7186W "Q Capture" : "AZUMA" : "WorkerThread" : A load 301 D 301 00000010 operation has been detected on table "ADMF001.T1" for QD 301 00000010 subscription "SUB1" (receive queue "Q1.T1", replication queueE 301 00000010 map "MYQMAP1.T1").

N 4020000 ZS17PA 09092 16:04:19.23 JOB00185 00000010 ASN7012I "Q Capture" : "AZUMA" : "WorkerThread" : The publication or QS subscription "SUB1" was successfully reinitialized.M 4020000 ZS17PA 09092 16:04:19.23 JOB00186 00000010 2009-04-02-16.04.19.239270 ASN8999D "Q Apply" : "AZUMA" : 303

<- apply received schema D 303 00000010 "BR00000" : Browser for queue 'Q1' received aE 303 00000010 'ASNMQ_SUBSCHEMA_MSG' message.M 4020000 ZS17PA 09092 16:04:19.24 JOB00186 00000010 2009-04-02-16.04.19.242322 ASN8999D "Q Apply" : "AZUMA" : 304D 304 00000010 "BR00000" : Browser for queue 'Q1' received a schema for anE 304 00000010 active subscription.

(CAPTURE_LOAD=‘R’ z/OS to z/OS)

Page 72: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

72 © 2009 ISE Corporation

自動ロード機能追加オプション

• QCapture側側側側にてにてにてにてDB2 z/OS PTF PK78558, DB2 UDB V9.7以上以上以上以上がががが必要必要必要必要

• PTFを適用していないQCAPTUREではASN0196Wを出力(z/OSのみ)

• UDBではV9.7以前では検知不可能

• 下記下記下記下記ののののUtilityがががが検知検知検知検知されるされるされるされる

• DB2 for z/OSではTablespace 単位で検知

• 1 Tablespaceに複数ソースがあり1表にLoadされるとすべての表に関してLoadが実行

されてしまうので注意

• LOAD RESUME YES SHRLEVEL NONE

• LOAD REPLACE

• REORG TABLESPACE DISCARD

• DB2 UDB V9.7

• LOAD Utility

• 制約制約制約制約((((参照制約参照制約参照制約参照制約 RIをををを含含含含むむむむ))))ががががソースソースソースソース表表表表にあるにあるにあるにある場合場合場合場合ははははLOAD後後後後ももももCHECK Pending状態状態状態状態になるためになるためになるためになるためQApplyののののLoadがががが失敗失敗失敗失敗しししし、、、、Subscriptionはははは非活動化非活動化非活動化非活動化するするするする(z/OS, LUW)

• CHECK DATA (z/OS), SET INTEGRITY(LUW)をLOAD後に実施する必要あり

• 制約(参照制約 RIを含む)ある場合、INSERT ALLOW READ ACCESSの場合には追加されていない既存のData部分のみフルレフレシュで取り込むので注意(LUWのみ)

• 制約がある場合 ALLOW NO ACCESSではソース表の読み取り不可のためSubが非活動化(LUWのみ)

Page 73: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

73 © 2009 ISE Corporation

自動ロード機能追加オプション

• EEE環境環境環境環境でもでもでもでも有効有効有効有効

• Bidir/P2P環境環境環境環境ではではではではLOAD自身自身自身自身のののの収集収集収集収集のののの無限無限無限無限Loopをををを避避避避けるためけるためけるためけるためQapplyからからからからREPLICATE_LOAD signal REPLICATE_LOAD signal REPLICATE_LOAD signal REPLICATE_LOAD signal がががが使用使用使用使用

されるされるされるされる

• 1. Issued after inserting a P2PNEW2MEM signal (after having received a schema

message) for the local Q Capture - used to deactivate; prevent recapture of Q Apply

load operation.

• 2. Issued after inserting p2pLOADDONE signals upon receiving a

LOADDONE_RECVD message from Q Capture - used to enable after performing a

successful load operation by Q Apply.

• 3. Issued when performing a subscription state transition from active ('A') to inactive ('I')

- used to enable upon a possibly failed load operation by Q Apply (we do not want to

leave it in disabled state). However, any state transition from A to I will trigger the

signal.

• 3node以上以上以上以上ののののPeer to Peerではではではでは使用不可使用不可使用不可使用不可

• 定義は可能であるがLOAD時にASN7187EでLOADされたNodeのCAPTURE停止

• SUBS_STATE=‘A’のみのみのみのみスキーマスキーマスキーマスキーマをををを送信送信送信送信するするするする

• STATE=‘L’ではasn7186wのみ出力する

Page 74: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

74 © 2009 ISE Corporation

制約がある場合のCapture_LOAD=‘R’(Allow no access)$==> db2 "load from t1.ixf of ixf replace into t1 nonrecoverable allow no access"

SQL3109N The utility is beginning to load data from file "/home/db2v97/mq/asnclp/local/t1.ixf".

SQL3515W The utility has finished the "BUILD" phase at time "2009-04-10 21:59:32.786042".

Number of rows read = 1

Number of rows skipped = 0

Number of rows loaded = 1

Number of rows rejected = 0

Number of rows deleted = 0

Number of rows committed = 1

2009-04-10-21.59.37.439304 ASN7186W "Q Capture" : "ASN" : "WorkerThread" : A load operation was detected on table "DB2V97.T1" for Q subscription "SUB1" (receive queue "Q1", replication queue map "MYQMAP1").

2009-04-10-21.59.37.439568 ASN7189I "Q Capture" : "ASN" : "WorkerThread" : The subscription "SUB1" (receive queue "Q1", replication queue map "MYQMAP1") for table "DB2V97.T1" is restarted due to a detected load operation in the DBMS log.

2009-04-10-21.59.37.485213 ASN8999D Browser for queue 'Q1' received a 'ASNMQ_SUBSCHEMA_MSG' message.

2009-04-10-21.59.37.485446 ASN8999D Browser for queue 'Q1' will be suspended because a schema was received for an active subscription.

2009-04-10-21.59.37.486438 ASN8999D spillQ 'IBMQREP.SPILL.MODELQ.0.1.3' for sub 'SUB1' was not found

2009-04-10-21.59.37.569823 ASN8999D Browser for queue 'Q1' will be resumed because a pending schema was processed.

2009-04-10-21.59.37.594785 ASN8999D agent 1001 started for queue "Q1" for sub "SUB1"

2009-04-10-21.59.37.596206 ASN7531I "Q Apply" : "ASN" : "BR00000SP001" : The load utility "LOAD from CURSOR" was selected by the Q Apply program for Q subscription "SUB1" (receive queue "Q1", replication queue map "MYQMAP1"). Reason code: "0".

2009-04-10-21.59.37.596547 ASN7528I "Q Apply" : "ASN" : "BR00000SP001" : The Q Apply program for the Q subscription "SUB1" (receive queue "Q1", replication queue map "MYQMAP1") will use the "LOAD from CURSOR" utility to load table "DB2V97.T1_COPY".

Page 75: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

75 © 2009 ISE Corporation

制約がある場合のCapture_LOAD=‘R’(Allow no access)2009-04-10-21.59.38.314099 ASN7530E "Q Apply" : "ASN" : "BR00000SP001" : The load utility "LOAD from CURSOR" for table "DB2V97.T1_COPY" failed for Q subscription "SUB1" (receive queue "Q1", replication queue map "MYQMAP1"). Detailed message from the load utility is "RC: 0, SQLCODE: -668".

2009-04-10-21.59.38.314583 ASN0552E "Q Apply" : "ASN" : "BR00000SP001" : The program encountered an SQL error. The server name is "". The SQL request is "LOAD". The table name is "DB2V97.T1_COPY". The SQLCODE is "-668". The SQLSTATE is "57016". The SQLERRMC is "1DB2V97.T1". The SQLERRP is "SQLDTBLR".Source SQL used for LOAD: [SELECT "C1", "C2", "C3" FROM "DB2V97"."T1"]

Target SQL used for LOAD: [REPLACE INTO "DB2V97"."T1_COPY" ( "C1", "C2", "C3" )]

2009-04-10-21.59.38.314817 ASN0589I "Q Apply" : "ASN" : "BR00000SP001" The program received an unexpected return code "-668" from routine "LoadParms::invokeLoad".

2009-04-10-21.59.38.316049 ASN0589I "Q Apply" : "ASN" : "BR00000SP001" The program received an unexpected return code "-668" from routine "QAsub::callLoader".

2009-04-10-21.59.38.331313 ASN7597E "Q Apply" : "ASN" : "BR00000SP001" : The Q subscription "SUB1" (receive queue "Q1", replication queue map "MYQMAP1") is about to be disabled because of the conflict action or error action. Future transaction row changes to this Q subscription will beskipped.

2009-04-10-21.59.41.596794 ASN8999D spillQ 'IBMQREP.SPILL.MODELQ.0.1.2' for sub 'SUB1' successfully deleted

2009-04-10-21.59.45.210423 ASN7019I "Q Capture" : "ASN" : "WorkerThread" : "CAPSTOP" signal was received and will be processed.

2009-04-10-21.59.45.237593 ASN7013I "Q Capture" : "ASN" : "WorkerThread" : The publication or Q subscription "SUB1" was deactivated.

2009-04-10-21.59.45.701506 ASN8999D Browser for queue 'Q1' received a 'ASNMQ_SUBDEACTIVATED' message.

2009-04-10-21.59.45.701805 ASN7595W "Q Apply" : "ASN" : "BR00000" : The Q Apply program received a Q subscription deactivate message, but the SUB_ID "1" (receive queue "Q1", replication queue map"MYQMAP1") cannot be found or the Q subscription is in theinactive state.

2009-04-10-21.59.45.710567 ASN7133I "Q Capture" :"ASN" : "WorkerThread" : The publication or Q subscription "SUB1" was stopped.

2009-04-10-21.59.51.712703 ASN0590I "Q Apply" : "ASN" : "BR00000" The thread "BR00000" received return code "2011" from the exiting thread "BR00000SP001".

Page 76: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

76 © 2009 ISE Corporation

BIDIR/P2P環境でのCAPTURE_LOAD=RとREPLICATE_LOAD signal

• Bidir/P2PBidir/P2PBidir/P2PBidir/P2P環境環境環境環境ではではではではLOADLOADLOADLOAD自身自身自身自身のののの収集収集収集収集ののののをををを避避避避けるためけるためけるためけるためQApplyQApplyQApplyQApplyからからからからREPLICATE_LOAD signal REPLICATE_LOAD signal REPLICATE_LOAD signal REPLICATE_LOAD signal がががが発行発行発行発行されるされるされるされる

• SUBSCRIPTION単位のコントロール

Bidir

==> db2 'select * from asn2.ibmqrep_signal order by signal_time'

SIGNAL_TIME SIGNAL_TYPE SIGNAL_SUBTYPE SIGNAL_INPUT_IN SIGNAL_STATE SIGNAL_LSN

------------------------ ---------------- ---------------------- ------------------------- ------------ -----------------------

2009-06-10-20.01.49.598843 CMD P2PNEW2MEMB T20001;0001;0002;I;0001 C x'0000000000002801462F'

2009-06-10-20.01.49.599020 CMD REPLICATE_LOAD T20001;D C x'000000000000280146AC'

2009-06-10-20.01.56.634782 CMD REPLICATE_LOAD T20001;E C x'0000000000002801B24A'

Load

Page 77: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

77 © 2009 ISE Corporation

REPLICATE_LOADシグナル Flow

User Capture Apply

LOAD

SUB_2_1

I � A

Node 1 (Initiator)

LOADDONE SUB_1_2

SUB_1_2

L � A

CaptureApply

P2PNEW2MEMB SUB_2_1

SUB_1_2

I � L / E

SUB_2_1

I � A

Node 2 (New)

SUB_1_2

L / E � A

SCHEMA MSG

SCHEMA MSG

LOADDONE_RCVD MSG

Figure 2. 2-Node Initialization (With Load)

REPLICATE_LOAD(D)

REPLICATE_LOAD(E)

Page 78: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

78 © 2009 ISE Corporation

BIDIR環境でのCAPTURE_LOAD=RとREPLICATE_LOAD signal

• REPLICATE_LOAD SignalははははSubscription単位単位単位単位

• 従属のSubscriptionには影響しない

• BIDIRのHAS_LOADPHASE=‘E’まだloaddoneを発行していな

• REPLICATE_LOAD(D)が発行済み

• LOADを実施

• UNIのみLOADが実施される

Bidir Uni

Load

Page 79: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

79 © 2009 ISE Corporation

EEEの環境下でも有効な例

$ db2 list nodegroups show detail

DATABASE PARTITION GROUP PMAP_ID DATABAS

E PARTITION NUMBER IN_USE

--------------------------------------------------------------------------------------------------------------------------------------- -------

--------------------- ------

IBMCATGROUP 0

0 Y

IBMDEFAULTGROUP 3

0 Y

IBMDEFAULTGROUP 3

1 Y

3 record(s) selected.

$create table t1 (pk int not null, rk int, dummy varchar(1000),xmldata xml) partitioning key (pk) partition by range ( rk) (starting 1 ending 80000 every 20000 ) organize by(dummy) in ts1 data capture changes compress yes

DB20000I The SQL command completed successfully.

(CAPTURE_LOAD=‘R’ under EEE + MDC + Partitioned + Compressed ( Data + XML)

Page 80: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

80 © 2009 ISE Corporation

EEEの環境下でも有効な例

$ db2 "load from t1.del of del replace resetdictionary into t1 nonrecoverable"

Agent Type Node SQL Code Result______________________________________________________________________________

LOAD 000 +00000000 Success.______________________________________________________________________________

LOAD 001 +00000000 Success.______________________________________________________________________________

PARTITION 001 +00000000 Success.______________________________________________________________________________

PRE_PARTITION 000 +00000000 Success.______________________________________________________________________________

RESULTS: 2 of 2 LOADs completed successfully.______________________________________________________________________________

Summary of Partitioning Agents:Rows Read = 20000Rows Rejected = 0Rows Partitioned = 20000

Summary of LOAD Agents:Number of rows read = 20000Number of rows skipped = 0Number of rows loaded = 20000Number of rows rejected = 0Number of rows deleted = 0Number of rows committed = 20000

(CAPTURE_LOAD=‘R’ under EEE + MDC + Partitioned + Compressed ( Data + XML)

Page 81: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

81 © 2009 ISE Corporation

EEEの環境下でも有効な例

$2009-04-10-21.19.11.212774 ASN7186W "Q Capture" : "ASN" : "WorkerThread" : A load operation was detected on table "EEE.T1" for Q subscription "SUB1" (receive queue "Q1", replication queue map "MYQMAP1").2009-04-10-21.19.11.213084 ASN7189I "Q Capture" : "ASN" : "WorkerThread" : The subscription "SUB1" (receive queue "Q1", replication queue map "MYQMAP1") for table "EEE.T1" is restarted due to a detected load operation in the DBMS log.2009-04-10-21.19.11.677391 ASN8999D Browser for queue 'Q1' received a 'ASNMQ_SUBSCHEMA_MSG' message.2009-04-10-21.19.11.677652 ASN8999D Browser for queue 'Q1' will be suspended because a schema was received for an active subscription.2009-04-10-21.19.11.871251 ASN8999D Browser for queue 'Q1' will be resumed because a pending schema was processed.2009-04-10-21.19.11.921310 ASN8999D agent 1001 started for queue "Q1" for sub "SUB1"2009-04-10-21.19.11.922396 ASN7531I “Q Apply” : “ASN” : “BR00000SP001” : The load utility “EXPORT/LOAD” was selected by the Q Apply program for Q subscription "SUB1" (receive queue "Q1", replication queue map "MYQMAP1"). Reason code: "4".2009-04-10-21.19.11.923671 ASN7528I "Q Apply" : "ASN" : "BR00000SP001" : The Q Apply program for the Q subscription "SUB1" (receive queue "Q1", replication queue map "MYQMAP1") will use the "EXPORT" utility to load table "EEE.T1".2009-04-10-21.19.24.223508 ASN7529I "Q Apply" : "ASN" : "BR00000SP001" : The "EXPORT" utility for table "EEE.T1" completed successfully for the Q subscription "SUB1" (receive queue "Q1", replication queue map "MYQMAP1"). The message from the utility is "Rows exported: 20000".2009-04-10-21.19.24.239729 ASN7528I "Q Apply" : "ASN" : "BR00000SP001" : The Q Apply program for the Q subscription "SUB1" (receive queue "Q1", replication queue map "MYQMAP1") will use the "LOAD" utility to load table "EEE.T1_COPY".2009-04-10-21.19.39.578969 ASN7529I “Q Apply” : “ASN” : “BR00000SP001” : The “LOAD” utility for table “EEE.T1_COPY”completed successfully for the Q subscription "SUB1" (receive queue "Q1", replication queue map "MYQMAP1"). The message from theutility is "Rows loaded: 20000, Rows rejected: 0, Rows skipped: 0, Rows deleted: 0".2009-04-10-21.19.40.831065 ASN7608I "Q Apply" : "ASN" : "BR00000" : The program finished loading Q subscription "SUB1" (receive queue "Q1", replication queue map "MYQMAP1"), and notified the Q Capture program.2009-04-10-21.19.40.855072 ASN7607I "Q Apply" : "ASN" : "BR00000" : Q subscription "SUB1" (receive queue "Q1", replication queue map "MYQMAP1") finished loading the target. The changes will be applied from the spill queue "IBMQREP.SPILL.MODELQ.0.1.5".2009-04-10-21.19.41.897252 ASN7019I "Q Capture" : "ASN" : "WorkerThread" : "LOADDONE" signal was received and will be processed.2009-04-10-21.19.41.909851 ASN7010I "Q Capture" : "ASN" : "WorkerThread" : The program successfully activated publication or Q subscription "SUB1" (send queue "Q1", publishing or replication queue map "MYQMAP1") for source table "EEE.T1".2009-04-10-21.19.42.360100 ASN8999D Browser for queue 'Q1' received a 'ASNMQ_LOADDONE_RCVD' message.2009-04-10-21.19.46.387934 ASN7606I "Q Apply" : "ASN" : "BR00000" : Q subscription "SUB1" (receive queue "Q1", replication queue map "MYQMAP1") is active.

(CAPTURE_LOAD=‘R’ under EEE + MDC + Partitioned + Compressed ( Data + XML)

Page 82: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

82 © 2009 ISE Corporation

3NODE以上のP2Pでは使用不可(ASN7187E)

2009-04-09-16.43.14.974372 <subMgr::execLoadAction> ASN7186W "Q Capture" : "ASN" : "WorkerThread" : A load operation was detected on table "DB2V97.T1" for Q subscription "T10002" (receive queue "Q6", replication queue map "ASNTOASN3").

2009-04-09-16.43.14.999459 <subMgr::execLoadAction> ASN7187EASN7187EASN7187EASN7187E "Q Capture" : "ASN" : "WorkerThread" : The value of the CAPTURE_LOAD column in the IBMQREP_SUBS control table is set to R for Q subscription "T10002". This value is only supported in unidirectional, bidirectional and peer-to-peer subscriptions with a maximum of two nodes. However, a load operation has been detected on the source table. The Q Capture program was stopped.

2009-04-09-16.43.14.999703 <subMgr::processLoad> ASN0589I "Q Capture" : "ASN" : "WorkerThread" The program received an unexpected return code "6060" from routine "subMgr::execLoadAction".

2009-04-09-16.43.14.999976 <subMgr::publishTrans> ASN0589I “Q Capture” : “ASN” : “WorkerThread” The program received an unexpected return code "6060" from routine "handleLoad".

2009-04-09-16.43.15.000142 <waitAndProcessLogrdNotif> ASN0589I "Q Capture" : "ASN" : "WorkerThread" The program received an unexpected return code "6060" from routine "subMgr::publishTrans".

2009-04-09-16.43.15.000458 <asnqwk> ASN7109I "Q Capture" : "ASN" : "WorkerThread" : At program termination, the highest log sequence number of a successfully processed transaction is "49DD:98A9:0000:000B:0000" and the lowest log sequence number of a transaction still to be committed is "0000:0000:0000:091C:D73D".

2009-04-09-16.43.15.067039 <asnqwk> ASN7156I "Q Capture" : "ASN" : "WorkerThread" : The Q Capture program stopped processing log records in log file "/dbland1/db2v97/NODE0000/SQL00001/SQLOGDIR/S0000022.LOG".

2009-04-09-16.43.15.068147 <stopLogrdThread> ASN8999D timeout waiting for log reader thread to stop

2009-04-09-16.43.20.067492 <asnThread::stop> ASN0590I "Q Capture" : "ASN" : "Initial" The thread "Initial" received return code "6060" from the exiting thread "WorkerThread".

2009-04-09-16.43.22.075518 <asnThread::stop> ASN0590I "Q Capture" : "ASN" : "Initial" The thread "Initial" received return code "2001" from the exiting thread "AdminThread".

2009-04-09-16.43.22.076007 <asnThread::stop> ASN0590I "Q Capture" : "ASN" : "Initial" The thread "Initial" received return code "2011" from the exiting thread "PruneThread".

2009-04-09-16.43.22.091785 <Asnenv:delEnvIpcQRcvHdl> ASN0595I "Q Capture" : "ASN" : "Initial" The program removed an IPC queue with keys "(0x3000020e)".

2009-04-09-16.43.33.094729 <asnqcap::main> ASN0573I "Q Capture" : "ASN" : "Initial" : The program was stopped.

(CAPTURE_LOAD=‘R’ under 3node P2P , Load was invoked)

Page 83: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

83 © 2009 ISE Corporation

Multiple Restart QueueMultiple Restart Queue

Page 84: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

84 © 2009 ISE Corporation

Multiple Restart Queue(QCaptureのSTARTALLQパラメータ、STARTQ/STOPQコマンド)

目的目的目的目的

1111つのつのつのつのQcaptureでのでのでのでの複数送信複数送信複数送信複数送信キューキューキューキュー使用時使用時使用時使用時においてにおいてにおいてにおいて、、、、一部一部一部一部ののののキューキューキューキューでのでのでのでのMQPUTエラーエラーエラーエラーがががが発生発生発生発生ししししたたたた場合場合場合場合、、、、Qcapture自体自体自体自体がががが停止停止停止停止するのではなくするのではなくするのではなくするのではなく、、、、障害障害障害障害がががが発生発生発生発生したしたしたしたキューキューキューキューへのへのへのへの書書書書きききき込込込込みのみをみのみをみのみをみのみを停止停止停止停止すすすすることによってることによってることによってることによって、、、、正常正常正常正常ななななキューキューキューキューへのへのへのへの処理処理処理処理をををを継続継続継続継続しししし、、、、全体的全体的全体的全体的ななななレイテンシーレイテンシーレイテンシーレイテンシーのののの悪化悪化悪化悪化をををを回避回避回避回避することがすることがすることがすることが1111つのつのつのつの目的目的目的目的。。。。またまたまたまた障害障害障害障害がががが発生発生発生発生したしたしたしたキューキューキューキューのののの回復時回復時回復時回復時にににに、、、、関連関連関連関連するするするするQサブスクリプションサブスクリプションサブスクリプションサブスクリプションののののFULLREFRESHをををを回避回避回避回避しししし、、、、復旧時間復旧時間復旧時間復旧時間のののの短縮短縮短縮短縮をををを図図図図るるるる。。。。

使用方法使用方法使用方法使用方法とととと変更点変更点変更点変更点

QCaptureのののの始動始動始動始動パラメータパラメータパラメータパラメータでででで、、、、STARTALLQ=Y/Nをををを指定指定指定指定

ASNQCMDででででキューキューキューキュー単位単位単位単位ににににSTARTQ/STOPQをををを発行発行発行発行

RESTARTQがががが、、、、各各各各キューキューキューキューごとにごとにごとにごとにリスタートポイントリスタートポイントリスタートポイントリスタートポイントのののの情報情報情報情報をををを持持持持つようになるつようになるつようになるつようになる

IBMQREP_SENDQUEUESののののERROR_ACTIONにににに新新新新しいしいしいしい値値値値::::Qがががが追加追加追加追加

使用可能使用可能使用可能使用可能ななななレベルレベルレベルレベル

IRS V9.7 GA ~~~~ またはまたはまたはまたは APAR PK78112

対象対象対象対象プラットフォームプラットフォームプラットフォームプラットフォーム

Linux, Unix, Windows, z/OS

当機能の目的と使用方法

Page 85: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

85 © 2009 ISE Corporation

ソース表4 ターゲット表4

QサブスクリプションとQマッピング

• メリットメリットメリットメリット

• ひとつのQマップがinactiveになっても、他のQマップに属するQサブスクリプションに影響がない

• デメリットデメリットデメリットデメリット

• 運用管理対象のコンポーネントが増える

• 同一同一同一同一ののののトランザクショントランザクショントランザクショントランザクションでででで異異異異なるなるなるなるQマップマップマップマップにににに属属属属するするするするソースソースソースソース表表表表がががが更新更新更新更新されるとされるとされるとされると、、、、トランザクショトランザクショトランザクショトランザクションンンン情報情報情報情報がががが分割分割分割分割されてしまうされてしまうされてしまうされてしまう

• ほかほかほかほか

• 複数サイトへのレプリケーションでは、それぞれのサイトに対するQマップが必要

ソース表3 ターゲット表3

qsubqsubqsubqsub1111((((QQQQサブスクリプションサブスクリプションサブスクリプションサブスクリプション))))

qmapqmapqmapqmap3333((((QQQQマップマップマップマップ))))

送信キュー 受信キュー

qsubqsubqsubqsub3333

qsubqsubqsubqsub4444

• Qサブスクリプションサブスクリプションサブスクリプションサブスクリプション::::Qマップマップマップマップ====2222::::1111

qsubqsubqsubqsub2222

ソース表1 ターゲット表1

qmapqmapqmapqmap1111((((QQQQマップマップマップマップ))))

送信キュー 受信キュー

ソース表2 ターゲット表2

qmapqmapqmapqmap2222((((QQQQマップマップマップマップ))))

送信キュー 受信キュー

• Qサブスクリプションサブスクリプションサブスクリプションサブスクリプション::::Qマップマップマップマップ====1111::::1111

• メリットメリットメリットメリット

• 運用管理が容易

• デメリットデメリットデメリットデメリット

• ひとつのキューがinactiveになると、そのQマップに属するサブスクリプション全て

が実行できなくなる

• ほかほかほかほか

• APPLY側で表の従属関係を検知可能

Page 86: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

86 © 2009 ISE Corporation

複数送信キューの利用

• 複数複数複数複数のののの送信送信送信送信キューキューキューキューをををを使用使用使用使用するするするする目的目的目的目的

• 依存性のない表に対する更新を別々のキューで送信することにより、キュー単位で開始停止が可能となり、アプリケーション単位での管理がしやすい

• 万が一キューが停止しても、他のQマップに含まれるサブスクリプションに影響を与えないアプリケーションごとの負荷を軽減

• 1つのQcaptureで収集した更新情報を複数のリモートサイトに送信する

キューが分かれていても、 Qcaptureが停止するため、

すべてのキューへのMQPUTができなくなる

1つのキューで

MQPUTエラー

が発生!

送信キュー

送信キュー

送信キュー

全体的全体的全体的全体的ななななデータデータデータデータ鮮度鮮度鮮度鮮度のののの悪化悪化悪化悪化!!!!

Page 87: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

87 © 2009 ISE Corporation

従来までの送信キューエラーと復旧シナリオ

QCaptureででででMQPUTエラーエラーエラーエラー発生発生発生発生

該当送信該当送信該当送信該当送信キューキューキューキューののののステータスステータスステータスステータスをををを‘‘‘‘I’’’’((((非活動非活動非活動非活動))))にににに変更変更変更変更しししし、、、、Qcapture停止停止停止停止

サブスクリプションサブスクリプションサブスクリプションサブスクリプションののののステータスステータスステータスステータスはははは‘‘‘‘A’’’’((((活動活動活動活動))))のままのままのままのまま

障害原因復旧障害原因復旧障害原因復旧障害原因復旧OK

Qcaptureのののの再起動再起動再起動再起動

該当該当該当該当キューキューキューキューへのへのへのへの書書書書きききき込込込込みみみみOKであればであればであればであれば、、、、

キューキューキューキューののののステータスステータスステータスステータスをををを’A’にににに変更変更変更変更しししし、、、、処理処理処理処理をををを継続継続継続継続

障害原因復旧不可障害原因復旧不可障害原因復旧不可障害原因復旧不可

他他他他ののののキューキューキューキューののののレプリケーションレプリケーションレプリケーションレプリケーションをををを継続継続継続継続させるさせるさせるさせる場合場合場合場合

関連関連関連関連するするするするサブスクリプションサブスクリプションサブスクリプションサブスクリプションののののステータスステータスステータスステータスをををを

すべてすべてすべてすべて‘‘‘‘I’’’’((((非活動非活動非活動非活動))))にするかにするかにするかにするか、、、、CAPSTOPをををを発行発行発行発行

Qcaptureのののの再起動再起動再起動再起動

QCaptureはははは停止停止停止停止したしたしたした以降以降以降以降ののののLOGのののの読読読読みみみみ込込込込みみみみ再開再開再開再開

エラーエラーエラーエラーがががが発生発生発生発生したしたしたしたキューキューキューキューにににに関連関連関連関連していたしていたしていたしていたサブスクリプションサブスクリプションサブスクリプションサブスクリプションはははは

障害障害障害障害がががが復旧復旧復旧復旧してもしてもしてもしても、、、、差分差分差分差分レプリケーションレプリケーションレプリケーションレプリケーションのののの継続継続継続継続はははは不可不可不可不可

Qrepのののの場合場合場合場合、、、、関連関連関連関連サブスクリプションサブスクリプションサブスクリプションサブスクリプション

全全全全てのてのてのてのFULLREFRESHがががが必要必要必要必要

Event Publisherのののの場合場合場合場合、、、、

レプリケーションレプリケーションレプリケーションレプリケーションのののの継続継続継続継続はははは不可不可不可不可

Page 88: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

88 © 2009 ISE Corporation

Fullrefreshが必要な理由

• サブスクリプションサブスクリプションサブスクリプションサブスクリプションがががが非活動非活動非活動非活動のののの間間間間ににににQcaptureがががが起動起動起動起動するとするとするとすると、、、、Qcaptureのののの次回次回次回次回ののののリスタートリスタートリスタートリスタート・・・・ポイントポイントポイントポイント情報情報情報情報がががが進進進進むむむむ

• リスタート・ポイントは1つのQcaptureで1つ、RestartQに持つ

• 現行現行現行現行ののののRestartQのののの情報情報情報情報

• 1つのQcaptureで1つのmin-LSN と max-commitを持つ

• min-LSN:Qcaptureが停止した時点でCOMMITまたはROLLBACKが発行されていないトランザクションの開始のLSN

• max-commit: Qcaptureが停止した時点で、最後に確実にMQに書き込んだトランザクションのCOMMITのタイムスタンプ

非活動の間の更新は

収集できない

レプリケーションを継続させるためには

Fullrefreshまたは手動でソース表とターゲット表の

同期を取る必要がある

timeLSN = 5

MAXCMTSEQ

Tx1

Tx2QCapQCapQCapQCap StopStopStopStop

Page 89: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

89 © 2009 ISE Corporation

従来のRestartQの内容

• Qcaptureのののの停止時停止時停止時停止時ののののメッセージメッセージメッセージメッセージ ((((Qrep V9.1 Windowsのののの例例例例))))

2009-04-28-11.01.59.578000 ASN7109I "Q Capture" : "QREP6" : “WorkerThread” :

ププププログラムログラムログラムログラムのののの終了時終了時終了時終了時、、、、正常正常正常正常にににに処理処理処理処理されたされたされたされたトランザクショントランザクショントランザクショントランザクションのののの一番高一番高一番高一番高いいいいログログログログ・・・・シーケンスシーケンスシーケンスシーケンス番号番号番号番号はははは

“49F6:6308:0000:0001:0000” でででで、、、、まだまだまだまだコミットコミットコミットコミットされていないされていないされていないされていないトランザクショントランザクショントランザクショントランザクションのののの一番低一番低一番低一番低いいいい

ログログログログ・・・・シーケンスシーケンスシーケンスシーケンス番号番号番号番号はははは0000:0000:0000:01C9:C4DD" ですですですです。。。。

qRestartMsg for MAINLINE log reader.

qRestartMsg.capServer : QREPDB

qRestartMsg.capSchema : QREP6

qRestartMsg.qRestartsgSize : 436

qRestartMsg.freeNodeSpace : 0

Number of partition at restart: 1

qRestartMsg.nodeId: 0

qRestartMsg.restartLSN: 0000:0000:0000:01c9:c4dd

qRestartMsg.lastCommitSEQ: 49f6:6308:0000:0001:0000

qRestartMsg.lastCommitTime: 2009-04-28-10.59.36.000001

qRestartMsg.reuseSEQ: 0000:0000:0000:0000:0000

qRestartMsg.reuseTime: 2009-04-28-10.21.14

Number of send queues at restart: 2

[ 0] sendq name: Q6

sendq activation time: 1240881674

sendq next msg seq no: 00000000000000000000000000000019

[ 1] sendq name: Q7

sendq activation time: 1240883933

sendq next msg seq no: 00000000000000000000000000000005

Page 90: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

90 © 2009 ISE Corporation

新機能

• 目的目的目的目的

• ある送信キューの障害による、全体的なレイテンシーの悪化を避ける

• 障害が発生したキューに関連する全てのサブスクリプションのターゲット表への再LOAD(FULLREFRESH)を回避

• Event Publisherでは、レプリケーションの継続を可能にする

• 新機能新機能新機能新機能のののの概要概要概要概要

• IBMQREP_SENDQUEUSの新しいERROR_ACTIONとして「Q」が追加

• 意味:キューでエラーが発生した場合は、そのキューのみ停止し、他のキューへの処理を継続

• 現行のデフォルトは「S」、この場合Qcaptureは停止

• RestartQの新しい情報

• RestartQに個々のキューに関するリスタート情報(min-LSN と max-commitなど)を保持

Page 91: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

91 © 2009 ISE Corporation

V9.7でのRestartQの内容

qRestartMsg for MAINLINE log reader.

qRestartMsg.capServer : V9DB

qRestartMsg.capSchema : ASN

qRestartMsg.qRestartsgSize : 528

Number of partition at restart: 1

restartLSN=0000:0000:0000:4037:dc0e nodeId=0

qRestartMsg.lastCommitSEQ: 4a31:d405:0000:0004:0000

qRestartMsg.lastCommitTime: 2009-06-12-14.05.25.000004

qRestartMsg.reuseSEQ: 0000:0000:0000:0000:0000

qRestartMsg.reuseTime: 2009-06-12-13.13.14

Number of send queues at restart: 2

[ 0] sendq name: Q2

sendq activation time: 1244776395

sendq next msg seq no: 0000000000000000000000000000000d

sendq lastCommitSEQ: 4a31:d405:0000:0004:0000

sendq lastCommitTime: 2009-06-12-14.05.25.000004

sendq restartLSN=0000:0000:0000:4037:dc0e nodeId=0

[ 1] sendq name: Q1

sendq activation time: 1244776395

sendq next msg seq no: 00000000000000000000000000000003

sendq lastCommitSEQ: 4a31:c7d3:0000:0005:0000

sendq lastCommitTime: 2009-06-12-13.13.23.000005

sendq restartLSN=0000:0000:0000:4010:ef6d nodeId=0

Q1はQFULLで停止状態

Q2は更新継続

Page 92: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

92 © 2009 ISE Corporation

新規コマンドおよびシグナル>>-asnqccmd--capture_server=db_name----------------------------->

>--+-----------------------+--+-chgparms--| parameters |-+-----><

'-capture_schema=schema-' +-prune--------------------+

+-qryparms-----------------+

+-reinit-------------------+

+-reinitq=send_queue-------+

+-startq-+-send_queue-+----+

| '-all--------' |

+-stopq-+-send_queue-+-----+

| '-all--------' |

+-status--+--------------+-+

| '-show details-' |

'-stop---------------------'

STARTQ

1 つまたはすべての使用不可の送信キューにメッセージを置き始めることを指定します。Q キャプチャーはキューの状態をアクティブ (A) に設定し、指定されたキューまたはすべての非アクティブなキューにメッセージを置くことを再開します。 Q キャプチャーは、すべての送信キュー内の一番古いリスタート・ポイントでログの読み取りを再開し、すべてのキューが同じリスタート・ポイントを持つようになるまで、停止したキューまで読み取ります。

SIGNAL SUBTYPE=STARTQでも同様

STOPQ

1 つまたはすべての送信キューにメッセージを置くことを停止するように指定します。Q キャプチャーはキューの状態を非アクティブ (I) に設定し、指定されたキューまたはすべてのキューにメッセージを置くことを停止します。 Q キャプチャー・プログラムは、アクティブな送信キューに関連付けられている Q サブスクリプションへの変更のパブリッシュを続行します。すべての送信キューが停止した場合、Q キャプチャーは CAPSTART などのシグナルについてのログの読み取りと、モニター表への挿入を続行し、コマンドを待機します。

SIGNAL SUBTYPE=STOPQでも同様

New

New

Page 93: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

93 © 2009 ISE Corporation

新規起動パラメーター(STARTALLQ=Y/N)<asnParmClass::printParms> ASN0529I "Q Capture" : "ASN" : "Initial" : The value of "STARTMODE" was set to "COLD" at

startup by the following method: "COMMANDLINE".

<asnParmClass::printParms> ASN0529I "Q Capture" : "ASN" : "Initial" : The value of "IGNTRIG" was set to "N" at start

up by the following method: "DEFAULT".

<asnParmClass::printParms> ASN0529I "Q Capture" : "ASN" : "Initial" : The value of "MESSAGE_PERSISTENCE" was set to

"Y" at startup by the following method: "DEFAULT".

<asnParmClass::printParms> ASN0529I "Q Capture" : "ASN" : "Initial" : The value of "STARTALLQ" was set to "Y" at sta

rtup by the following method: "DEFAULT".

<asnParmClass::printParms> ASN0529I "Q Capture" : "ASN" : "Initial" : The value of "AUTOSTOP" was set to "N" at star

tup by the following method: "PARAMETERS TABLE".

<Asnenv:setEnvIpcQRcvHdl> ASN0594I "Q Capture" : "ASN" : "Initial" The program created an IPC queue with keys "(0x30

0000e3)".

ASNMQLOD:MQCONN> ASN0585I "Q Capture" : "ASN" : "AdminThread" : The program successfully loaded the WebSphere MQ li

brary "libmqm_r.a(libmqm_r.o)". Environment variable ASNUSEMQCLIENT is set to "".

<handleLogrdInitMsg> ASN7108I "Q Capture" : "ASN" : "WorkerThread" : At program initialization, the highest log sequ

ence number of a successfully processed transaction is "0000:0000:0000:0000:0000" and the lowest log sequence number of a transaction still to be committed is "0000:0000:0000:400F:9F28".

<handleLogrdInitMsg> ASN7155i "Q Capture" : "ASN" : "WorkerThread" : The Q Capture program started processing log re

cords in log file "/testfs/db2v95/NODE0000/S0000257.LOG".

startallq=y/n Q

キャプチャー・プログラムが開始時にすべての送信キューをアクティブ化するかどうかを指定します。

このパラメーターを使用して、使用不可の送信キューを非アクティブにしておくことができます。

y (デフォルト) Q キャプチャー・プログラムが開始するときに、まだアクティブ (A) 状態ではないすべて

の送信キューをアクティブ化します。

n Q キャプチャー・プログラムが開始するときに、非アクティブ (I) 状態の送信キューを

アクティブ化しません。

New

Page 94: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

94 © 2009 ISE Corporation

ConcurrentAccessResolution for LoadConcurrentAccessResolution for Load

Page 95: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

95 © 2009 ISE Corporation

ConcurrentAccessResolution for Load

目的目的目的目的

DB2 V9.7新機能新機能新機能新機能のののの1111つのつのつのつのCurrently CommitedによってによってによってによってFullrefresh中中中中にににに更新更新更新更新がががが実行中実行中実行中実行中のののの場合場合場合場合、、、、QapplyややややSQL Applyにおいてにおいてにおいてにおいてデータロスデータロスデータロスデータロスがががが発生発生発生発生することがすることがすることがすることが判明判明判明判明、、、、DB CFG構成構成構成構成ののののCUR_COMMIT=ONををををAVAILABLEまたはまたはまたはまたはOFFにににに変更変更変更変更せずせずせずせずQapply、、、、SQL ApplyががががData Lossをををを発生発生発生発生させないさせないさせないさせない方法方法方法方法をををを考案考案考案考案するするするする必要必要必要必要があったがあったがあったがあった。。。。

方法方法方法方法としてとしてとしてとしてQAPPLYややややSQL APPLYがががが使用使用使用使用するするするするEXPORTやややや独自独自独自独自ののののPACKAGEををををWAIT FOR OUTCOMEででででバインバインバインバインドドドドしししし、、、、QAPPLYととととSQL APPLYからからからからEXEC SQL SET CURRENT PACKAGESET = ‘ASN’をををを指定指定指定指定しそのしそのしそのしそのPACKAGEのみをのみをのみをのみを使用使用使用使用するするするする方法方法方法方法がががが採用採用採用採用されたされたされたされた(EXPORTののののケースケースケースケース)))). CURSOR LOADにににに関関関関してはしてはしてはしてはFEDERATION SERVERオプションオプションオプションオプションににににCONCURRENT_ACCESS_RESOLUTION=Wをををを指定指定指定指定しししし特定特定特定特定ののののパッケージパッケージパッケージパッケージをををを使用使用使用使用するするするする

使用方法使用方法使用方法使用方法とととと変更点変更点変更点変更点

CUR_COMMIT=ON環境下環境下環境下環境下でのでのでのでのWAIT FOR OUTCOME オプションオプションオプションオプションのののの自動自動自動自動PACKAGE生成生成生成生成

新規新規新規新規サーバーオプションサーバーオプションサーバーオプションサーバーオプションCONCURRENT_ACCESS_RESOLUTION=W

DOWNLEVEL CLIENTからのからのからのからのGENERICバインドバインドバインドバインド

Z/OS, iSeriesクライアントクライアントクライアントクライアントからのからのからのからの指定方法指定方法指定方法指定方法

使用可能使用可能使用可能使用可能ななななレベルレベルレベルレベル

IRS V9.7 GA ~~~~ またはまたはまたはまたは V95 FP5

対象対象対象対象プラットフォームプラットフォームプラットフォームプラットフォーム

Linux, Unix, Windows

当機能の目的と使用方法

Page 96: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

96 © 2009 ISE Corporation

DB2_SKIPINSERTED, DB2_SKIPDELETEDがある場合の注意点

Log

Log

Log

Insert

Commit

CAPSTART

DB2_SKIPINSERTED=YES DB2_SKIPDELETED=YES

Log

Log

Log

Delete

Commit

CAPSTART

Capstartの前からInsertのトランザクションが実行されCapstart後にCommitされた場合Captureによって変更収集されず、かつCommit前のFull refresh時のfetchで(CS iolation)でInsertされたデータは拾うことができないため不整合

Full refresh の実行時にはこれらのRegistryは使用しないように!!

Capstartの前後には関係なく、Delete実行中にFull

refreshが実行されそのトランザクションがCommit

された場合にFull refreshではそれらが反映されない

ため不整合

※DB2_SKIPINSERTED, DB2_SKIPDELETEDは、DB2 for LUW V8.2 フィックスパック2からの機能です

Page 97: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

97 © 2009 ISE Corporation

参考:関連Technote

http://www-01.ibm.com/support/docview.wss?rs=3572&uid=swg21330335&loc=en_US&cs=utf-8&lang=en

Linux,Unix,Windowsの記述間違いです。(修正依頼済み)

Page 98: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

98 © 2009 ISE Corporation

TRN2

SELECT

TRN1

DB2 (V9.5以前)の読み取り一貫性

• DB2はははは最新最新最新最新ののののデータデータデータデータをををを読読読読むむむむ

• 参照処理は、更新処理がコミットされるまで待つ

E

F

D

C

B

A

UPDATE

UPDATE

C’

D’

TRN2は、TRN1がCOMMITするまで

WAIT

読読読読むむむむデータデータデータデータはははは常常常常にににに最新最新最新最新だがだがだがだが、、、、参照処理参照処理参照処理参照処理ががががロックロックロックロック待機待機待機待機するするするする可能性可能性可能性可能性ありありありあり

COMMIT

Page 99: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

99 © 2009 ISE Corporation

TRN1 TRN2

Oracleの読み取り一貫性 (Read Committed)

• マルチマルチマルチマルチ・・・・バージョンバージョンバージョンバージョン一貫性制御一貫性制御一貫性制御一貫性制御 (Multi-Version Concurrency Control)

• 更新処理により、更新前イメージが専用の領域へ書き出される

• 参照処理はコミットを待たずに更新前イメージを読む

• Select発行時点でコミット済みのデータを読む

• 下記の例では、UPDATEがCOMMITされていたとしてもTRN2は更新前データを読む

E

F

D

C

B

A

SELECT

UNDOセグメント

UPDATE

UPDATE

C

D

C’

D’

読読読読んだんだんだんだデータデータデータデータがががが最新最新最新最新とはとはとはとは限限限限らないがらないがらないがらないが、、、、参照処理参照処理参照処理参照処理ははははロックロックロックロック待機待機待機待機しないしないしないしない

SCN=100SCN=10

SCN=110

SCN=98

SCN=29

Page 100: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

100 © 2009 ISE Corporation

TRN1 TRN2

DB2 (DB2 V9.7)の読み取り一貫性 (Currently Committed)

• 未未未未コミットコミットコミットコミットのののの更新更新更新更新があってもがあってもがあってもがあってもロックロックロックロック待機待機待機待機をしないをしないをしないをしない

• 参照処理は、更新処理に伴うロックの開放を待たず、更新前のデータ(コミット済みの最新データ)をログ(ログバッファー)から読む

• 常に最新のコミット済みデータを読む

E

F

D

C

B

A

SELECT

トランザクションログ(ログバッファー)

UPDATE

UPDATE

C

D

C’

D’

参照処理参照処理参照処理参照処理ははははロックロックロックロック待機待機待機待機せずせずせずせず、、、、かつかつかつかつコミットコミットコミットコミット済済済済みのみのみのみの最新最新最新最新データデータデータデータをををを読読読読むむむむ

Page 101: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

101 © 2009 ISE Corporation

Currently Committedの有効化

• CUR_COMMIT DB構成構成構成構成パラメーターパラメーターパラメーターパラメーター

• ON : 新規作成DBのデフォルト (分離レベルCSはCurrently Committedとして挙動)

• AVAILABLE: アプリケーションから明示的に指定された場合にCurrently Committed有効

• DISABLED : Currently Committed無効 (V9.5以前からMigrationされたDBでのデフォルト)

• BIND コマンド

>--+-------------------------------------------------------------+-->

'--CONCURRENTACCESSRESOLUTION--+--USE CURRENTLY COMMITTED--+--'

'--WAIT FOR OUTCOME---------'

• アプリからの指定

• Java

• concurrentAccessResolution (Connection/DataSourceプロパティ)

• setDBConcurrentAccessResolution (DB2Connectionのメソッド)

• CLIや.NetからもCurrently Committedの指定可能

Page 102: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

102 © 2009 ISE Corporation

Currently Committedが有効にならないケース

• カタログ表のアクセス

• RCT(Range Clustered Table)のアクセス

• 参照制約の適用

• Long Varchar/Vargraphic列を持った表のアクセス

• 表レベル/Blockレベルのロック競合

• Update/Deleteに伴う表アクセス、更新可能Cursor

• 「未コミットInsert行のスキップ」はWrite処理対象表であっても有効

DD803

EE804

CC802

BB801

AA800

COL2

COL1

T1表表表表 ((((索引無索引無索引無索引無しししし))))

APL1APL1APL1APL1INSERT VALUESINSERT VALUESINSERT VALUESINSERT VALUES(803,(803,(803,(803,’’’’DDDDDDDD’’’’))))

X

APL2APL2APL2APL2UPDATE T1UPDATE T1UPDATE T1UPDATE T1SET COL2=SET COL2=SET COL2=SET COL2=‘‘‘‘ZZZZZZZZ’’’’

ZZ

ZZ

ZZ

ZZ

X

X

X

X

Page 103: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

103 © 2009 ISE Corporation

V97 Fullrefresh 問題点

• 新規新規新規新規DataBase((((CURR_COMMIT=ON)からのからのからのからのReplicationではではではではdata漏漏漏漏れのれのれのれの可可可可

能性能性能性能性

• DB2 V97 Server – DB2 V97 Client

• DB2 V97 Server – DB2 V95 Client

• DB2 V97 Server – DB2 z/OS Client ( z/OS開発と交渉中)

TRN1 TRN2

E

F

D

C

B

A

QAPPLY

SELECT

トランザクションログ(ログバッファー)

INSERT

UPDATE D

X’

D’

COMMIT

CAPSTART

Page 104: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

104 © 2009 ISE Corporation

解決策

回避策回避策回避策回避策なしなしなしなしQAPPLY

SQL APPLY

Load from Cursor without Nickname

ASNAFET.SQCののののプリコンパイルオプションプリコンパイルオプションプリコンパイルオプションプリコンパイルオプション変更変更変更変更SQL APPLYSELECT/INSERT

DRDA WRAPPER CLI Setting変更

CLIのSQLSetConnectAttr SQL_WAIT_FOR_OUTCOME使用

ALTER SERVER <Server_NAME> Options

CONCURRENT_ACCESS_RESOLUTION ‘W’)

Apply実行時実行時実行時実行時ににににSERVER_OPTIONののののCheck(ASN7532E)

*Downlevel Clientからは特になし, CUR_COMMIT=AVAILABLEを推奨

QAPPLY

SQL APPLY

Load from Cursor using Nickname

Data漏漏漏漏れれれれ解決策解決策解決策解決策Programs

データデータデータデータ移動方法別解決策移動方法別解決策移動方法別解決策移動方法別解決策

DB2Export API WFO Bindを使用、QAPPLYからは EXEC SQL SET

CURRENT PACKAGESET=‘ASN’(PackageはAUTOBIND)

*Downlevel ClientからはGENERIC Bind Option使用

QAPPLY

SQL APPLY

Export/Import or Load

Page 105: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

105 © 2009 ISE Corporation

CURSOR LOADをSERVER_OPTIONなしで実行した場合 (QREPL)2009-04-14-12.26.27.448321 ASN7613I "Q Apply" : "ASN" : "BR00000" : Start processing queue (receive queue "Q1", replication

queue map "MYQMAP1"), application single byte codepage "943", double byte codepage "941", source codepage "943", endian conversion required "0", float conversion "0".2009-04-14-12.26.27.449211 ASN8999D Browser for queue 'Q1' received a 'ASNMQ_SUBSCHEMA_MSG' message.2009-04-14-12.26.27.833369 ASN8999D agent 1001 started for queue "Q1" for sub "SUB1"2009-04-14-12.26.27.949055 ASN8999D The server option CONCURRENT_ACCESS_RESOLUTION was not set in SYSCAT.SERVEROPTIONS for the servername ""2009-04-14-12.26.27.949268 ASN7532EASN7532EASN7532EASN7532E "Q Apply" : "ASN" : "BR00000SP001" : The Q Apply program could not select the "LOAD from CURSOR" load utility for the Q subscription "SUB1" (receive queue "Q1", replication queue map "MYQMAP1"). Reason code: "9".Reason code: "9".Reason code: "9".Reason code: "9".2009-04-14-12.26.27.949696 ASN0589I "Q Apply" : "ASN" : "BR00000SP001" The program received an unexpected return code "821" from routine "QAsub::callLoader".2009-04-14-12.26.27.975638 ASN7597E "Q Apply" : "ASN" : "BR00000SP001" : The Q subscription "SUB1" (receive queue "Q1", replication queue map "MYQMAP1“) is about to be disabled because of the conflict action or error action. Future transaction row changes to this Q subscription will be skipped.2009-04-14-12.26.30.249581 ASN7019I "Q Capture" : "ASN" : "WorkerThread" : "CAPSTOP" signal was received and will be processed.2009-04-14-12.26.30.279051 ASN7013I "Q Capture" : "ASN" : "WorkerThread" : The publication or Q subscription "SUB1" was deactivated.2009-04-14-12.26.30.457181 ASN8999D Browser for queue 'Q1' received a 'ASNMQ_SUBDEACTIVATED' message.2009-04-14-12.26.30.457372 ASN7595W "Q Apply" : "ASN" : "BR00000" : The Q Apply program received a Q subscription deactivate message, but the SUB_ID "1" (receive queue "Q1", replication queue map"MYQMAP1") cannot be found or the Q subscription is in theinactive state.2009-04-14-12.26.30.470475 ASN8999D spillQ 'IBMQREP.SPILL.MODELQ.0.1.2' for sub 'SUB1' successfully deleted2009-04-14-12.26.30.475274 ASN7133I "Q Capture" :"ASN" : "WorkerThread" : The publication or Q subscription "SUB1" was stopped.

ASN7532E RC=9

The target is Version 8 or later of DB2 UDB for Linux, UNIX, or Windows; and the source nickname is defined but does not use server option

SQL_USE_CURRENTLY_COMMITTED=W, which is required to select LOAD FROM CURSOR. That server option is required to ensure that

LOAD FROM CURSOR waits until all in-progress transactions that modify the source table are completed before beginning the export. If you

need to use this utility, you must update the federated server options using the following command:

db2 alter server <server name> OPTIONS(ADD CONCURRENT_ACCESS_RESOLUTION 'W');

Page 106: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

106 © 2009 ISE Corporation

CURSOR LOADをSERVER_OPTIONなしで実行した場合 (SQL)

-------------------------Compiled(A) at 00:05:13 on Apr 20 2009 (Level 80127g_97)UTGP: Commit1 okUSRX: child process createdUSRX: ASNLOAD normal termination.

2009-04-22-19.08.29.236823 ASN1053E APPLY "QUAL1" : "WorkerThread". The execution of the ASNLOAD exit routine failed. The return code is "112". The NLS msg is ASN1053E APPLY "QUAL1" : "WorkerThread". The execution of the ASNLOAD exit routine failed. The return code is "112".

USRX: ASNLOAD failed, exit status = 112.APPCHG: ROLLBACK member 0

PSET: ROLLBACKPSET: success is 0PSET: connect to NEWDB; rc = 1PSET: connect to V9DB; rc = 1CLOS: setRepeatCopy is 0CPCLOS: success is 0. retcode is 0.CLOS: activate = 1CLOS: status = -1CLOS: lastrun = 2009-04-22-19.08.28.564972CLOS: lastsuccess is nullCLOS: synchpoint is nullCLOS: synchtime is nullCLOS: apply_qual = QUAL1CLOS: set_name = SET1

Page 107: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

107 © 2009 ISE Corporation

CURSOR LOADをSERVER_OPTIONなしで実行した場合 (SQL)SERVERTYPE is DB2/AIX and SERVERVERSION is 9.7.

Checking for CONCURRENT_ACCESS_RESOLUTION support

Exiting checkServTypeAndVersAllowsCAR with TRUEERR: The federated server supports option

CONCURRENT_ACCESS_RESOLUTION, but thatoption does not seem to be enabled.This option must be set for servers for UDBdatabases of version 9.7 or higher.

Exiting checkSrcNickUsesWFO with srcNickUsesWFO 0Getting the configuration for the Sourceserver (get_cfg_values): NEWDBConnecting (connect_db):CONNECT TO NEWDBINF: CONNECT to server NEWDB successful.

Exiting connect_db with return code 0Configuration for Sourceserver 'NEWDB':DB2 Type : SQLDB2 LUW : TRUEVersion : 9Release : 7Local : FALSETable is nick : FALSENicknametype :Loadx_src_n_owner: DB2V97Loadx_src_n_table: T1NK

Exiting get_cfg_values with return code 0ERR: Cannot use Crossloader because the option

CONCURRENT_ACCESS_RESOLUTION='W' was not set for theserver mapping for this nickname

Exiting runapplychecks unsuccessfully with return code 112***

Exiting ASNLOAD : Return Code is: 112

asnloadQUAL1.trc

Page 108: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

108 © 2009 ISE Corporation

QAPPLYからCollection ASNでBindされたExport Utility Package

==> db2 -vtf selpkg10.sql

select substr(pkgschema,1,8) as pkgschema, substr(pkgname,1,8) as pkgname, substr(CONCURRENTACCESSRESOLUTION,1,1) as CONCURRENTACCESSRESOLUTION,

LAST_BIND_TIME,PKGID from syscat.packages where pkgname like 'SQLUBH05%'

PKGSCHEMA PKGNAME CONCURRENTACCESSRESOLUTION LAST_BIND_TIME PKGID

--------- -------- -------------------------- -------------------------- --------------------

NULLID SQLUBH05 - 2009-04-13-15.53.04.560330 292

ASN SQLUBH05 W 2009-04-13-15.52.20.461318 359

2 record(s) selected.

Export UtilityをQapplyが実行時にCollection ‘ASN’ WFOでAutobind

Page 109: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

109 © 2009 ISE Corporation

Server_optionなしでLOAD_TYPE=0が選択された場合のWarning 2009-04-14-12.56.37.603658 ASN8999D Browser for queue 'Q1' received a 'ASNMQ_SUBDEACTIVATED' message.

2009-04-14-12.56.37.603975 ASN8999D spillQ 'IBMQREP.SPILL.MODELQ.0.1.2' for sub 'SUB1' was not found2009-04-14-12.56.37.624250 ASN8999D Browser for queue 'Q1' received a 'ASNMQ_SUBSCHEMA_MSG' message.2009-04-14-12.56.37.777105 ASN8999D agent 1001 started for queue "Q1" for sub "SUB1"2009-04-14-12.56.37.881039 ASN8999D The server option CONCURRENT_ACCESS_RESOLUTION was not set in SYSCAT.SERVEROPTIONS for the servername ""2009-04-14-12.56.37.881250 ASN7531IASN7531IASN7531IASN7531I "Q Apply" : "ASN" : "BR00000SP001" : The load utility "EXPORT/LOAD" was selected by the Q Apply program for Q subscription "SUB1" (receive queue "Q1", replication queue map "MYQMAP1"). Reason code: "9".Reason code: "9".Reason code: "9".Reason code: "9".2009-04-14-12.56.37.882275 ASN7528I "Q Apply" : "ASN" : "BR00000SP001" : The Q Apply program for the Q subscription "SUB1" (receive queue "Q1", replication queue map "MYQMAP1") will use the "EXPORT" utility to load table "DB2V97.T1".2009-04-14-12.56.38.402666 ASN7529I "Q Apply" : "ASN" : "BR00000SP001" : The "EXPORT" utility for table "DB2V97.T1" completed successfully forthe Q subscription "SUB1" (receive queue "Q1", replication queue map "MYQMAP1"). The message from the utility is "Rows exported: 102".2009-04-14-12.56.38.413499 ASN7528I "Q Apply" : "ASN" : "BR00000SP001" : The Q Apply program for the Q subscription "SUB1" (receive queue "Q1", replication queue map "MYQMAP1") will use the "LOAD" utility to load table "DB2V97.T1_COPY".2009-04-14-12.56.39.578647 ASN7529I "Q Apply" : "ASN" : "BR00000SP001" : The "LOAD" utility for table "DB2V97.T1_COPY" completed successfully for the Q subscription "SUB1" (receive queue "Q1", replication queue map "MYQMAP1"). The message from the utility is "Rows loaded: 102, Rows rejected: 0, Rows skipped: 0, Rows deleted: 0".

ASN7531I

// Reason code: <reason_code>.

9 The target is Version 8 or later of DB2 UDB for Linux, UNIX, or Windows; and the source nickname is defined but does not use server option

SQL_USE_CURRENTLY_COMMITTED=W, which is required to select LOAD FROM CURSOR. That server option is required to ensure that

LOAD FROM CURSOR waits until all in-progress transactions that modify the source table are completed before beginning the export. The utility

selected was the next best alternative.

Page 110: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

110 © 2009 ISE Corporation

ブランクブランクブランクブランク・・・・ページページページページ

Page 111: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

111 © 2009 ISE Corporation

XML列のTransformationサポートXML列のTransformationサポート

Page 112: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

112 © 2009 ISE Corporation

XML列のTransformationサポート

目的目的目的目的

XML列列列列ののののExpressionををををサポートサポートサポートサポート

使用方法使用方法使用方法使用方法とととと変更点変更点変更点変更点

asnclp, replication centerででででXML関数関数関数関数をををを指定指定指定指定するするするする

使用可能使用可能使用可能使用可能ななななレベルレベルレベルレベル

IRS V9.7 GA ~~~~ またはまたはまたはまたは DB2 for z/OS V9

対象対象対象対象プラットフォームプラットフォームプラットフォームプラットフォーム

Linux, Unix, Windows, z/OS

当機能の目的と使用方法

Page 113: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

113 © 2009 ISE Corporation

XML列のTransformation

• V9.7からからからからXML列列列列のののの変換変換変換変換がががが可能可能可能可能

• キー列以外の変換が可能

TARGET1

Capture Apply

SOURCE1

DB2Log

自動自動自動自動LOAD時時時時

ソースDBに対するSELECT

差分差分差分差分コピーコピーコピーコピー時時時時

キー列が含まれない場合

エージェントスレッドで変換を行いターゲットに適用

キー列が含まれる場合

ターゲットのBrowserスレッドからのSYSIBM.SYSDUMMY1に対するダミーのSELECTし、結果をアプライエージェントに渡す

各行毎

考慮点考慮点考慮点考慮点

ソースとターゲットで動きが異なる関数を指定すると不整合が発生する

フルリフレッシュフルリフレッシュフルリフレッシュフルリフレッシュ

差分コピーはアプライで変換が実施される。

ターゲット側で実施される。

自動LOADはソース表からSELECTする時

に変換が適用される。

ソース側で実施される。

変換変換変換変換変換変換変換変換

Page 114: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

114 © 2009 ISE Corporation

XML列のTransformationで使用可能なXML関数

• XML列列列列ののののTransformation内内内内でででで使用可能使用可能使用可能使用可能なななな関数関数関数関数

• サポートされているXML関数

• XMLATTRIBUTES

• XMLCOMMENT

• XMLCAST

• XMLCONCAT

• XMLDOCUMENT

• XMLELEMENT

• XMLFOREST

• XMLNAMESPACES

• XMLPARSE

• XMLPI

• XMLQUERY

• XMLROW -

• XMLSERIALIZE

• XMLTEXT

• XMLVALIDATE

• サポートされていないXML関数

• PARAMETER

• XMLAGG

• XMLEXISTS

• XMLGROUP

• XMLTABLE

• XMLXSROBJECTID

• XSLTRANSFORM

Page 115: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

115 © 2009 ISE Corporation

使用例1

• 以下以下以下以下のようなのようなのようなのようなレプリケーションレプリケーションレプリケーションレプリケーションをををを定義定義定義定義

• XMLQUERY関数でソース側のXMLデータに<root>ノードを追加してレプリケーションを行う

ソース側データターゲット側データ

XMLDOCUMENT(XMLQUERY(

'<root>{$a }</root>' passing :c2 as "a"

))

変換変換変換変換

2

1

C2((((XML))))

C1((((INT))))

<a>aa</a>

<b>aa</b> 2

1

C2((((XML))))

C1((((INT))))

<root><a>aa</a>

</root>

<root><b>aa</b>

</root>

Page 116: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

116 © 2009 ISE Corporation

使用例1

• ソースソースソースソース表表表表ととととターゲットターゲットターゲットターゲットのののの定義定義定義定義をををを行行行行いいいい、、、、ASNCLPででででサブスクリプションサブスクリプションサブスクリプションサブスクリプションをををを作成作成作成作成

• XML変換列変換列変換列変換列ののののマッピングマッピングマッピングマッピング

• XML->XML

C:¥work¥asnclp>db2 -tvf crttab.sqldrop table t1DB20000I SQL コマンドが正常に完了しました。

drop table t1_copyDB20000I SQL コマンドが正常に完了しました。

create table t1(c1 int not null primary key,c2 xml)DB20000I SQL コマンドが正常に完了しました。

insert into t1 values (1,'<a>aa</a>')DB20000I SQL コマンドが正常に完了しました。

create table t1_copy(c1 int not null primary key,c2 xml)DB20000I SQL コマンドが正常に完了しました。

====CMD: create qsub using replqmap qmap1 (t1 options has load phase I exist target name t1_copy type usertabletrgcols include(C1) expression expression expression expression ("XMLDOCUMENT(XMLQUERY('<root>{$a }</root>' passing :c2 ("XMLDOCUMENT(XMLQUERY('<root>{$a }</root>' passing :c2 ("XMLDOCUMENT(XMLQUERY('<root>{$a }</root>' passing :c2 ("XMLDOCUMENT(XMLQUERY('<root>{$a }</root>' passing :c2 as ""a""))" TARGET c2)as ""a""))" TARGET c2)as ""a""))" TARGET c2)as ""a""))" TARGET c2) conflict action i error action s );====

ASN1956I ASNCLP : プログラムは、現在、アクション "CREATE Q SUBSCRIPTION" を実行するためのスクリプトを生成しています。

ASN1955I ASNCLP : プログラムは次のファイルを使用します。キャプチャー SQL スクリプトとして "nul"、コントロール SQL スクリプトとして "replctl.sql"、ターゲット SQL スクリプトとして "nul"、およびログ・ファイルとして "qreplmsg.log"。

<ClpInfo2Log:: Now running SQL...>ASN1514I レプリケーション・アクションは、 "2009年4月26日 (日曜日) 0時16分04秒JST" に、"1" の成功、"0" のエラー、および"0" の警告で終了しました。

<ClpInfo2Log:: Now running SQL...>ASN1514I レプリケーション・アクションは、 "2009年4月26日 (日曜日) 0時16分04秒JST" に、"0" の成功、"0" のエラー、および"0" の警告で終了しました。

ASN1953I ASNCLP : コマンドが完了しました。

ソース表とターゲット表定義

Expression句でXML関数を使用

した変換を指定

Page 117: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

117 © 2009 ISE Corporation

使用例1

• 定義後定義後定義後定義後、、、、キャプチャキャプチャキャプチャキャプチャ、、、、アプライアプライアプライアプライをををを起動起動起動起動してしてしてしてレプリケーションレプリケーションレプリケーションレプリケーションをををを開始開始開始開始

C:¥work¥asnclp>db2 select c1,xmlserialize(c2 as char(50)) from t1

C1 2----------- --------------------------------------------------

1 <a>aa</a>

1 レコードが選択されました。

C:¥work¥asnclp>db2 select c1,xmlserialize(c2 as char(50)) from t1_copy

C1 2----------- --------------------------------------------------

1 <root><a>aa</a></root>

1 レコードが選択されました。

C:¥work¥asnclp>db2 "insert into t1 values (2,'<b>bb</b>')"DB20000I SQL コマンドが正常に完了しました。

C:¥work¥asnclp>db2 select c1,xmlserialize(c2 as char(50)) from t1

C1 2----------- --------------------------------------------------

1 <a>aa</a>2 <b>bb</b>

2 レコードが選択されました。

C:¥work¥asnclp>db2 select c1,xmlserialize(c2 as char(50)) from t1_copy

C1 2----------- --------------------------------------------------

1 <root><a>aa</a></root>2 <root><b>bb</b></root>

2 レコードが選択されました。

C:¥work¥asnclp>db2 "insert into t1 values (3,'<b>あいうえお</b>')"DB20000I SQL コマンドが正常に完了しました。

C:¥work¥asnclp>db2 select c1,xmlserialize(c2 as char(50)) from t1

C1 2----------- --------------------------------------------------

1 <a>aa</a>2 <b>bb</b>3 <b>あいうえお</b>

3 レコードが選択されました。

C:¥work¥asnclp>db2 select c1,xmlserialize(c2 as char(50)) from t1_copy

C1 2----------- --------------------------------------------------

1 <root><a>aa</a></root>2 <root><b>bb</b></root>3 <root><b>あいうえお</b></root>

3 レコードが選択されました。

フルリフレッシュ後のソース表とターゲット表のデータ

ソース表更新

変換が行われてレプリケーションされています。

日本語も問題なくレプリケーションされています。

Page 118: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

118 © 2009 ISE Corporation

ブランクブランクブランクブランク・・・・ページページページページ

Page 119: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

119 © 2009 ISE Corporation

フェデレーテッド・クエリーのキャンセルサポートフェデレーテッド・クエリーのキャンセルサポート

Page 120: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

120 © 2009 ISE Corporation

フェデレーテッド・クエリーのキャンセルサポート

目的目的目的目的

アプリケーションアプリケーションアプリケーションアプリケーションからからからからデータソースデータソースデータソースデータソースでででで実行中実行中実行中実行中ののののクエリクエリクエリクエリををををキャンセルキャンセルキャンセルキャンセルできるできるできるできる

使用方法使用方法使用方法使用方法とととと変更点変更点変更点変更点

アプリケーションアプリケーションアプリケーションアプリケーションからからからからキャンセルキャンセルキャンセルキャンセルをををを発行発行発行発行するするするする。。。。

以前以前以前以前ののののバージョンバージョンバージョンバージョンではではではでは、、、、データソースデータソースデータソースデータソースでででで実行中実行中実行中実行中ののののクエリクエリクエリクエリまでまでまでまでキャンセルキャンセルキャンセルキャンセルするこするこするこすることはできなかったとはできなかったとはできなかったとはできなかった。。。。

使用可能使用可能使用可能使用可能ななななレベルレベルレベルレベル

IRS V9.7 GA ~~~~

対象対象対象対象プラットフォームプラットフォームプラットフォームプラットフォーム

(データソースデータソースデータソースデータソースがががが)Linux, Unix, Windows

当機能の目的と使用方法

Page 121: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

121 © 2009 ISE Corporation

キャンセル発行時の動作(V9.5とV9.7の比較)

V9.5までの場合

IFSIFS データソースデータソースデータソースデータソースデータソースデータソースデータソースデータソースアプリケーション

V9.7の場合

IFSIFS データソースデータソースデータソースデータソースデータソースデータソースデータソースデータソースアプリケーション

※ 実機で確認したところ、データソースはホストでもキャンセル可

ニックネームSQL発行

リモートSQL発行

キャンセルキャンセルキャンセルキャンセル

結果転送

データソースからの結果が返ってくるまで待ちになる

ニックネームSQL発行

キャンセルキャンセルキャンセルキャンセル

リモートSQL発行

キャンセルキャンセルキャンセルキャンセルデータソースデータソースデータソースデータソースへへへへキャンキャンキャンキャンセルセルセルセルをををを発行発行発行発行するするするする

Page 122: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

122 © 2009 ISE Corporation

$ db2 “ select * from loopview”

force applicationによるクエリのキャンセル

$ db2 “force application (19)“

DB20000I The FORCE APPLICATION command completed successfully.

DB21024I This command is asynchronous and may not be effective immediately.

## クエリが実行中になる ##

## クエリクエリクエリクエリはははは切断切断切断切断されないされないされないされない##

V9.5V9.5V9.5V9.5

←クライアントからニックネームSQLを発行フェデレーション・サーバーからデータソースへリモートSQLが発行される

$ db2 "list applications show detail“|grep db2bpNOG95 db2bp 17842 *LOCAL.nog95.090414102544 00004 1 0 7253 Federated request pendingFederated request pendingFederated request pendingFederated request pending

フェデレーション・サーバーでlist applicationsを確認

フェデレーションフェデレーションフェデレーションフェデレーション・・・・サーバーサーバーサーバーサーバーででででforce applicationsforce applicationsforce applicationsforce applicationsをををを発行発行発行発行

$ db2 "list applications show detail“|grep db2agentNOG95 db2agent (FEDDB95) 0 17851 *LOCAL.nog95.090414102724 00001 1 0 5374 UOW ExecutingUOW ExecutingUOW ExecutingUOW Executing

データソースでlist applicationsを確認

$ db2 "list applications show detail“|grep db2bpNOG95 db2bp 17842 *LOCAL.nog95.090414102544 00004 1 0 7253 Federated request pendingFederated request pendingFederated request pendingFederated request pending

$ db2 "list applications show detail“|grep db2agentNOG95 db2agent (FEDDB95) 0 17851 *LOCAL.nog95.090414102724 00001 1 0 5374 UOW ExecutingUOW ExecutingUOW ExecutingUOW Executing

データソースでlist applicationsを確認⇒アプリケーションは切断されていない

フェデレーション・サーバーでlist applicationsを確認⇒アプリケーションは切断されていない

Page 123: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

123 © 2009 ISE Corporation

$ db2 “ select * from loopview”

force applicationによるクエリのキャンセル

$ db2 “force application (8114)“

DB20000I The FORCE APPLICATION command completed successfully.

DB21024I This command is asynchronous and may not be effective immediately.

## クエリが実行中になる ##

←クライアントからニックネームSQLを発行フェデレーション・サーバーからデータソースへリモートSQLが発行される

$ db2 "list applications show detail“|grep db2bpNOG97 db2bp 8114 *LOCAL.nog97.090414103831 00001 1 0 5631 Federated request pendingFederated request pendingFederated request pendingFederated request pending

フェデレーション・サーバーでlist applicationsを確認

フェデレーションフェデレーションフェデレーションフェデレーション・・・・サーバーサーバーサーバーサーバーででででforce applicationsforce applicationsforce applicationsforce applicationsをををを発行発行発行発行

$ db2 "list applications show detail“|grep db2agentNOG97 db2agent (FEDDB97) 0 8125 *LOCAL.nog97.090414103848 00001 1 0 7258 UOW ExecutingUOW ExecutingUOW ExecutingUOW Executing

データソースでlist applicationsを確認

$ db2 "list applications show detail“|grep db2bpNOG95 db2bp 17842 *LOCAL.nog95.090414102544 00004 1 0 7253 UOW WaitingUOW WaitingUOW WaitingUOW Waiting

$ db2 "list applications show detail“|grep db2agentNOG95 db2agent (FEDDB95) 0 17851 *LOCAL.nog95.090414102724 00001 1 0 5374 UOW WaitingUOW WaitingUOW WaitingUOW Waiting

データソースでlist applicationsを確認⇒UOW Waitingになっている

フェデレーション・サーバーでlist applicationsを確認⇒UOW Waitingになっている

V9.7V9.7V9.7V9.7

## クエリクエリクエリクエリががががキャンセルキャンセルキャンセルキャンセルされされされされ、、、、クライアントクライアントクライアントクライアントににににメッセージメッセージメッセージメッセージがががが表示表示表示表示されるされるされるされる ##

SQL1224N The database manager is not able to accept new requests, has

terminated all requests in progress, or has terminated the specified request

because of an error or a forced interrupt. SQLSTATE=55032

Page 124: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

124 © 2009 ISE Corporation

フェデレーション・サーバーがHADR構成の時のテークオーバー時の動き

$ db2 “start hadr on db feddb95 as primary”

$ db2 “connect to feddb95”

$ db2 “select * from nickstaff”

## ## ## ## ニックネームニックネームニックネームニックネーム経由経由経由経由ででででデータソースデータソースデータソースデータソースののののstaffstaffstaffstaff表表表表ににににアクセスアクセスアクセスアクセスするがするがするがするが、、、、ロッロッロッロックククク待待待待ちになるちになるちになるちになる ########

SQL1224N The database manager is not able to accept new requests, has terminated all requests in progress, or has terminated the specified request

because of an error or a forced interrupt. SQLSTATE=55032

## ## ## ## stastastastaffffffff表表表表へのへのへのへのアクセスアクセスアクセスアクセスがががが可能可能可能可能になったがになったがになったがになったが、、、、HADRHADRHADRHADRによりによりによりによりアプリケーアプリケーアプリケーアプリケーションションションションがががが切断切断切断切断されるされるされるされる########

$ db2 “start hadr on db feddb95 as standby”

$ db2 “takeover hadr on db feddb95”

## ## ## ## ニックネームニックネームニックネームニックネーム経由経由経由経由ののののSQLSQLSQLSQLをををを実行中実行中実行中実行中なのでなのでなのでなので、、、、アプリケーションアプリケーションアプリケーションアプリケーションをををを切断切断切断切断できずできずできずできず、、、、takeovertakeovertakeovertakeoverがががが待待待待たされるたされるたされるたされる

DB20000I The TAKEOVER HADR ON DATABASE command completed successfully.

## takeoverが成功する ##

フェデレーションフェデレーションフェデレーションフェデレーション・・・・サーバーサーバーサーバーサーバー:HADR primary フェデレーションフェデレーションフェデレーションフェデレーション・・・・サーバーサーバーサーバーサーバー:HADR standby

$ db2 “connect to sample”

$ db2 +c “lock table staff in exclusive mode”

## staff## staff## staff## staff表表表表ががががロックロックロックロックされるされるされるされる ########

データソース

$ db2 “rollback”

## staff## staff## staff## staff表表表表へのへのへのへのロックロックロックロックがががが解放解放解放解放されるされるされるされる ########

データソース

V9.5V9.5V9.5V9.5

wait

Page 125: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

125 © 2009 ISE Corporation

フェデレーション・サーバーがHADR構成の時のテークオーバー時の動き

$ db2 “start hadr on db feddb95 as primary”

$ db2 “connect to feddb95”

$ db2 “select * from nickstaff”

## ## ## ## ニックネームニックネームニックネームニックネーム経由経由経由経由ででででデータソースデータソースデータソースデータソースののののstaffstaffstaffstaff表表表表ににににアクセスアクセスアクセスアクセスするがするがするがするが、、、、ロッロッロッロックククク待待待待ちになるちになるちになるちになる ########

SQL1224N The database manager is not able to accept new requests, has

terminated all requests in progress, or has terminated the specified request

because of an error or a forced interrupt. SQLSTATE=55032

## HADR## HADR## HADR## HADRによりによりによりによりアプリケーションアプリケーションアプリケーションアプリケーションがががが切断切断切断切断されるされるされるされる########

$ db2 “start hadr on db feddb95 as standby”

$ db2 “takeover hadr on db feddb95”

DB20000I The TAKEOVER HADR ON DATABASE command completed successfully.

## takeoverが成功する ##

$ db2 “connect to sample”

$ db2 +c “lock table staff in exclusive mode”

## staff## staff## staff## staff表表表表ががががロックロックロックロックされるされるされるされる ########

データソース

V9.7V9.7V9.7V9.7

cancel

フェデレーションフェデレーションフェデレーションフェデレーション・・・・サーバーサーバーサーバーサーバー:HADR primary フェデレーションフェデレーションフェデレーションフェデレーション・・・・サーバーサーバーサーバーサーバー:HADR standby

Page 126: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

126 © 2009 ISE Corporation

CLIトレース(V9.7)

## 略 ###SQLBindCol( )

<--- SQL_SUCCESS Time elapsed - +2.090000E-004 seconds

SQLExecute( hStmt=1:1 )---> Time elapsed - +2.900000E-005 seconds

[ Process: 954618, Thread: 12081 ][ Date & Time: 2009-04-06 17:21:31.450105 ][ Product: QDB2/AIX64 DB2 v9.7.0.0 ][ Level Identifier: 08010107 ][ CLI Driver Version: 09.02.0000 ][ Informational Tokens: "DB2 v9.7.0.0","s090315","AIX6497","Fixpack 0" ][ Install Path: /opt/IBM/db2/DB2 V9.7_beta/db2 ][ db2cli.ini Location: /home/nog97/sqllib/cfg/db2cli.ini ][ CLI Driver Type: IBM DB2 Application Runtime Client ]

SQLCancelSQLCancelSQLCancelSQLCancel( ( ( ( hStmthStmthStmthStmt=1:1 )=1:1 )=1:1 )=1:1 )------------> Time elapsed > Time elapsed > Time elapsed > Time elapsed ---- 0 seconds0 seconds0 seconds0 seconds

SQLCancelSQLCancelSQLCancelSQLCancel( )( )( )( )<<<<------------ SQL_SUCCESS Time elapsed SQL_SUCCESS Time elapsed SQL_SUCCESS Time elapsed SQL_SUCCESS Time elapsed ---- +1.404000E+1.404000E+1.404000E+1.404000E----003 seconds003 seconds003 seconds003 seconds

( Requested Cursor Attributes=x'00000000' )( Reply Cursor Attributes=x'00000000' )( Actual Cursor Attributes=x'00000000' )

SQLExecute( )<--- SQL_SUCCESS Time elapsed - +2.847533E+000 seconds

SQLCloseCursor( hStmt=1:1 )---> Time elapsed - +7.200000E-005 seconds

## 略 ##

←キャンセルが発行されている

←Ctrl + Cでクエリをキャンセル

Page 127: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

127 © 2009 ISE Corporation

CLIトレース(V9.5)

## 略 ##

SQLBindCol( )

<--- SQL_SUCCESS Time elapsed - +2.070000E-004 seconds

SQLExecute( hStmt=1:1 )

---> Time elapsed - +2.700000E-005 seconds

( Requested Cursor Attributes=134217729 )

( Reply Cursor Attributes=134742024 )

( Actual Cursor Attributes=134742025 )

SQLExecute( )

<--- SQL_SUCCESS Time elapsed - +6.673885E+001 seconds

SQLCloseCursor( hStmt=1:1 )

---> Time elapsed - +8.000000E-005 seconds

( TERMINATE REPLY RECEIVED=1 )

←キャンセルの発行はない

←Ctrl + Cでクエリをキャンセル

Page 128: DB2 V9.7 新機能ワークショップ - ibm.com · asnqcap capture_server=QREPDB capture_schema=QREP3 ASN0600I "Q Capture" : "" : "Initial" : プログラム "mqpub 9.7.4"

128 © 2009 ISE Corporation

Summary

• Range partition表表表表ののののサポートサポートサポートサポート

• Compression表表表表ののののサポートサポートサポートサポート

• Option to replicate Loadののののサポートサポートサポートサポート

• Multiple Restart Queue ののののサポートサポートサポートサポート

• ConcurrentAccessResolution for Load

• XML列列列列ののののTransformationサポートサポートサポートサポート

• フェデレーテッドフェデレーテッドフェデレーテッドフェデレーテッド・・・・クエリークエリークエリークエリーののののキャンセルキャンセルキャンセルキャンセルサポートサポートサポートサポート

• Summary