...

DB2 V9.7新機能ワークショップ Replication/Federation機能強化

by user

on
Category: Documents
879

views

Report

Comments

Transcript

DB2 V9.7新機能ワークショップ Replication/Federation機能強化
DB2 V9.7新機能ワークショップ
<第1.00版 2009年 7月>
Replication/Federation機能強化
本書に含まれている情報は、正式なIBMのテストを受けていません。また、明記にしろ、暗黙的にしろ、なんらの保証もなしに配布されるものです。
この情報の使用またはこれらの技術の実施は、いずれも、使用先の責任において行われるべきものであり、それらを評価し、実際に使用する環境に統合する
使用先の判断に依存しています。それぞれの項目は、ある特定の状態において正確であることがIBMによって調べられていますが、他のところで同じまたは同
様の結果が得られる保証はありません。これらの技術を自身の環境に適用することを試みる使用先は、自己の責任において行う必要があります。
© Copyright IBM Japan Systems Engineering Co., Ltd. 2009
目次
• Range partition表
表のサポート
• Compression表
表のサポート
• Option to replicate Loadの
のサポート
• Multiple Restart Queue のサポート
• ConcurrentAccessResolution for Load
• XML列
列のTransformationサポート
サポート
• フェデレーテッド・
フェデレーテッド・クエリーの
クエリーのキャンセルサポート
キャンセルサポート
• 全体まとめ
全体まとめ
2
© 2009 ISE Corporation
Range partition表のサポート
partition表のサポート
Range
3
© 2009 ISE Corporation
Range partition表のサポート
当機能の目的と使用方法
目的
Range partition表
表をソースとした
ソースとした差分
とした差分レプリケーション
差分レプリケーションの
レプリケーションのサポート
使用方法と
使用方法と変更点
Qcaptureが
が自動的に
自動的に使用
DB2の
のLOG read APIの
の機能拡張による
機能拡張による
使用可能な
使用可能なレベル
IRS V9.7 GA ~
対象プラットフォーム
対象プラットフォーム
Linux, Unix, Windows
4
© 2009 ISE Corporation
Range Partition表(テーブル・パーティショニング)
V9からの機能
• データの
データの範囲によって
範囲によって、
によって、ひとつの表
ひとつの表を複数の
複数のパーティションに
パーティションに
物理的に
物理的に分割して
分割して保存
して保存
• 新しいパーティション
しいパーティションの
パーティションのアタッチ/デタッチ
アタッチ デタッチが
デタッチが可能
履歴表A
履歴表
JAN01
JAN02
JAN03
JAN04
JAN05
区分の
区分の
アタッチ
区分の
区分の
デタッチ
JAN01
5
JAN05
© 2009 ISE Corporation
Range Partition表のメリット
•
①保存期間を
保存期間を過ぎた行
ぎた行の高速な
高速な削除
• 従来はDELETEによる大量行の削除
•
低速、大量のログを発生、表の再編成必要
•
②新しいデータ
しいデータの
データのオンラインでの
オンラインでの高速
での高速ロード
高速ロード
• LOAD済みの表をアタッチする
• 読み書き不能になるのはアタッチ処理の瞬間的時点のみ
•
③データアクセスの
データアクセスの性能向上
• 指定された条件によって、特定パーティションのみアクセス
•
④故障範囲の
故障範囲の局所化
•
•
V9からの機能
①
②
ある表スペースがアクセス不能になっても、その他の表スペースに配
置されたパーティションへのアクセスは可能
⑤バックアップ性能
バックアップ性能の
性能の向上
•
複数の表スペースに分割配置し、並列バックアップ可能
•
BACKUPコマンドのPARALLELISMオプション
④
③
6
⑤
© 2009 ISE Corporation
新機能(
新機能(LUW)
Range Partition表サポート
• V9.7より
よりRange
Partition表
表をソース表
より
ソース表としたレプリケーション
としたレプリケーション
が可能
• 従来までは、Range Partition表を使用できたのはターゲット表
の場合のみ
DB2 ログ
履歴表A
履歴表
INSERT
UPDATE
JAN01
JAN02
・・・・
JAN05
DELETE
Log Read API
SQLCapture
7
QCapture
© 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)されない
• ターゲット表に手動でデータを挿入、あるいは同じデータが入った表をアタッチして
おく必要あり
• ソース表からパーティションをデタッチしても、そのデータは自動的には削
除されない
• ターゲット表からも削除したい場合は、手動でデータを削除、あるいは同じレンジ
のデータが入ったパーティションをデタッチしておく必要あり
8
© 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)
Low Value
----------- - ------------------------------0 Y 0
1 Y 100
2 Y 200
PartitionId PartitionName
----------0
1
2
9
Inclusive (y/n)
High Value
- ------------------------------N 100
N 200
Y 299
TableSpId
PartObjId
------------------------------- ----------- ----------P0
2
4
P1
2
5
P2
2
6
IndexTblSpId LongTblSpId AccessMode
Status
------------ ----------- - -----2
2 F
2
2 F
2
2 F
© 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 レコードが選択されました。
10
© 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 “Q Capture”
Capture” : “QREP3”
QREP3” : “WorkerThread”
WorkerThread” : プログラムは
プログラムは、ソース表
ソース表 “MANA.PARTTAB”
MANA.PARTTAB” の発行または
発行または
Q サブスクリプション “PARTTAB0001”
PARTTAB0001” (送信キュー
送信キュー “Q3”
Q3”、発行または
発行またはレプリケーション
またはレプリケーション・
レプリケーション・キュー・
キュー・マップ
"QREPDB_QREP3_T_QREPDB_QREP3") を正常に
正常に活動化しました
活動化しました。
しました。
ASN7000I
"Q Capture" : "QREP3" : "WorkerThread" : "1" サブスクリプションがアクティブです。 "
“ サブスクリプションは非アクティブです。新しい ”0“ サブスクリプションは、正常に活動化されました。
新しい "0" サブスクリプションは、活動化できず非アクティブになっています。
ASN0572I
"Q Capture" : "QREP3" : "WorkerThread" : "mqpub 9.7.4" プログラムは正常に初期化され
ました。
11
© 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 サブスクリプション "PARTTAB0001" (受信
(受信キュー
受信キュー "Q3"、
"Q3"、レプリケー
ション・
ション・キュー・
キュー・マップ "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") がアクティブです。
12
© 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 レコードが選択されました。
13
© 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” was
stopped.
ASN7006E "Q Capture" : "QREP3" : "WorkerThread" : The publication or Q subscription "PARTTAB0001" was
deactivated due to an error.
IBMQREP_SUBS表のSTATE
14
N(新規登録) => I(非活動)
© 2009 ISE Corporation
検証: ATTACH Partitionの確認
•
新しいパーティション
しいパーティションの
パーティションのアタッチ
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 PARTITION p3 STARTING (300) ENDING (399) FROM WORKTAB;
=> SQL3601W
ステートメントにより 1 つ以上の表が自動的に SET INTEGRITY
ペンディング状態になりました。
SQLSTATE=01586
Qcaptureが
がパーティションの
パーティションのアタッチを
アタッチを検知
•
(Qcaptureが停止していた場合は、次回のWARMスタート時に検知する)
ASN7184W
“Q Capture” : “QREP3” : “WorkerThread” : ソース表 “MANA.PARTTAB” にデータ・パーティション
"3" がアタッチ
アタッチされました
アタッチされました。
されました
しかし、
しかし、アタッチした
アタッチした表
した表にデータが
データが入っていても、
っていても、それはレプリケーション
それはレプリケーションされない
レプリケーションされない
•
>db2 select * from tg_parttab
PK
RK
----------- ----------1
1
100
100
2 レコードが選択されました。
15
© 2009 ISE Corporation
検証: ATTACH Partitionの確認
•
アタッチした
とレプリケーションの
アタッチしたパーティション
したパーティションに
パーティションに含まれる行
まれる行のINSERTと
レプリケーションの確認
set integrity ペンディ
ング状態のため、新し
い行の追加不可
>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 コマンドが正常に完了しました。
set integrityの実行
>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
----------- ----------パーティションをアタッチ後に挿入した行(350) は、レ
1
1
プリケーションされたが、アタッチ前に既存であった行
100
100
(300)は、自動的にはレプリケーションされていない
350
350
3 レコードが選択されました。
16
© 2009 ISE Corporation
検証: ADD Partitionの確認
• 新しいパーティション
しいパーティションの
パーティションの追加(
追加(ADD)
• パーティション表はATTACHの検証時と同じPARTTAB
ALTER TABLE PARTTAB ADD PARTITION p3 STARTING (300) ENDING (399)
Qcaptureが
がパーティションの
パーティションの追加を
追加を検知
•
(Qcaptureが停止していた場合は、次回のWARMスタート時に検知する)
ASN7184W
“Q Capture” : “QREP3” : “WorkerThread” : ソース表 “MANA.PARTTAB” にデータ・パーティション
“3” が追加
追加されました
追加されました。
されました
•
パーティションの
パーティションの追加は
追加は、データの
データの追加を
追加を伴わないので、
わないので、ソース表
ソース表、ターゲット表
ターゲット表とも変化
とも変化なし
変化なし
>db2 select * from parttab
PK
RK
----------- ----------1
1
100
100
2 レコードが選択されました。
17
>db2 select * from tg_parttab
PK
RK
----------- ----------1
1
100
100
2 レコードが選択されました。
© 2009 ISE Corporation
検証: ADD Partitionの確認
•
追加した
とレプリケーションを
追加したパーティション
したパーティションに
パーティションに含まれるデータ
まれるデータの
データのINSERTと
レプリケーションを確認
ADDの場合は、set
integrityの実行は不要
のため、すぐにデータ
挿入可能
>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 レコードが選択されました。
18
© 2009 ISE Corporation
検証: DETACH Partitionの確認
• パーティションの
パーティションのデタッチ
• パーティション表はADDの検証後の状態のPARTTAB(P3のパーティションが追加済み)
ALTER TABLE PARTTAB DETACH PARTITION p3 INTO WORKTAB2
Qcaptureが
がパーティションの
パーティションのデタッチを
デタッチを検知
•
(Qcaptureが停止していた場合は、次回のWARMスタート時に検知する)
ASN7184W
“Q Capture” : “QREP3” : “WorkerThread” : ソース表 “MANA.PARTTAB” からデータ・パーティション
“3” がデタッチ
デタッチされました
デタッチされました。
されました
•
ソース表
の行が見えなくなる (デタッチは
は不要)
ソース表は、p3に
、p に入っていた350の
っていた
デタッチはset integrityは
不要)
>db2 select * from parttab
PK
RK
----------- ----------1
1
100
100
350
350
3 レコードが選択されました。
19
p3のDETACH
>db2 select * from parttab
PK
RK
----------- ----------1
1
100
100
2 レコードが選択されました。
© 2009 ISE Corporation
検証: DETACH Partitionの確認
• デタッチで
デタッチで見えなくなった行
えなくなった行は、ターゲット表
ターゲット表の方はそのまま残
はそのまま残る
>db2 select * from parttab
PK
RK
----------- ----------1
1
100
100
350
350
3 レコードが選択されました。
20
ソース表の
p3のDETACH
変化なし
>db2 select * from tg_parttab
PK
RK
----------- ----------1
1
100
100
350
350
3 レコードが選択されました。
© 2009 ISE Corporation
運用上の考慮点
• ATTACH
• データの入った表をアタッチする場合は、ターゲット表にも同じデー
タを挿入するか、ターゲット表もパーティション表の場合は同じように
アタッチしてからレプリケーションを再開
• ADD
• ターゲット表がパーティション表の場合は、同じレンジのパーティショ
ンをADDしてからレプリケーションを再開
• DETACH
• ターゲット表からもデータを削除したい場合は、手動で削除するか、
ターゲット表もパーティション表の場合は同じようにデタッチしてから
レプリケーションを再開
• ターゲット表は履歴としてデータを残しておきたい場合は、そのまま
でよい
21
© 2009 ISE Corporation
ATTACHの場合の注意事項
• ATTACHする
する表
Capture Changes (DCC)の
の付加は
する表へのData
への
付加は、
ATTACHの
の直前に
直前に行うこと
• 即ち、DCCの付加とATTACHの
の間にデータの
データの更新が
更新が発生しないよう
発生しないよう
にすること!
• DCCをつけてからATTACHするまでにデータの挿入や更新があると、そ
の変更がATTACH後にレプリケーションされてしまうことがある
• レプリケーションされる条件
• Capture停止中
停止中に、DCCがついている表のデータの更新し、ATTACHを実行
停止中
• その後
その後Captureを開始
• Capture起動時にATTACHを検知するが、Capture停止中の更新も収集
対象の更新として扱ってしまう
• Capture起動後にATTACHが発行された場合は、収集しない
• DETACHに
に関してもDELETEおよび
およびDETACHを
をCapture停止中
停止中に
しても
および
停止中に
実施すると
が収集されない
検討
実施するとDELETEが
すると
収集されない問題
されない問題がある
問題がある(WARNING検討
がある
中)
22
© 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);
Data Capture Changesを
Alter table temp data capture changes;
Attachの直前に実行
alter table test_source attach partition part4 starting (41) ending (50) from temp;
23
© 2009 ISE Corporation
Range partition表のサポートはBiDir、P2Pでも使用可能
• BiDir、
、P2Pの
の双方向レプリケーション
双方向レプリケーションでも
レプリケーションでも、
でも、 Range
partition表
表をサポート
• ただし、
の場合は
ただし、P2Pの
場合は以下の
以下の考慮点あり
考慮点あり
• ATTACHの場合、P2P用の追加列とデフォルト値を含む
表を作成して、ATTACHする必要がある
• IBMQREPVERTIME
• TIMESTAMP NOT NULL WITH DEFAULT '0001-01-0100.00.00.000000‘
• IBMQREPVERNODE
• SMALLINT NOT NULL WITH DEFAULT 0
24
© 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)
Low Value
----------- - ------------------------------0 Y 0
1 Y 100
2 Y 200
PartitionId PartitionName
----------0
1
2
25
Inclusive (y/n)
High Value
- ------------------------------N 100
N 200
Y 299
TableSpId
PartObjId
------------------------------- ----------- ----------P0
2
19
P1
2
281
P2
2
512
IndexTblSpId LongTblSpId AccessMode
Status
------------ ----------- - -----2
2 F
2
2 F
2
2 F
© 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)
Low Value
----------- - ------------------------------0 Y 0
1 Y 100
2 Y 200
PartitionId PartitionName
----------0
1
2
26
Inclusive (y/n)
High Value
- ------------------------------N 100
N 200
Y 299
TableSpId
PartObjId
------------------------------- ----------- ----------P0
2
18
P1
2
280
P2
2
281
IndexTblSpId LongTblSpId AccessMode
Status
------------ ----------- - -----2
2 F
2
2 F
2
2 F
© 2009 ISE Corporation
検証: 差分レプリケーションの確認
ASNCLPで
で定義すると
、IBMQREPVERNODEをそれぞれの
をそれぞれの表
定義すると IBMQREPVERTIME、
をそれぞれの表に追加
•
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
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
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.
27
© 2009 ISE Corporation
検証: 差分レプリケーションの確認
• PARTTAB2表
表へのINSERTと
とレプリケーションの
への
レプリケーションの確認
>db2 insert into parttab2(pk,rk) values (100,100)
DB20000I
SQL コマンドが正常に完了しました。
>select * from parttab2
PK
RK
----------- ----------1
1
100
100
IBMQREPVERTIME
IBMQREPVERNODE
-------------------------- -------------0001-01-01-00.00.00.000000
0
2009-04-30-02.37.48.402853
4
2 record(s) selected.
>select * from tg_parttab2
PK
RK
----------- ----------1
1
100
100
IBMQREPVERNODE=0:
フルリフレッシュ時に挿入
IBMQREPVERNODE=4:
差分レプリケーションの確認
IBMQREPVERTIME
IBMQREPVERNODE
-------------------------- -------------0001-01-01-00.00.00.000000
0
2009-04-30-02.37.48.402853
4
2 record(s) selected.
28
© 2009 ISE Corporation
検証: ATTACH Partitionの確認
新しいパーティション
しいパーティションの
パーティションのアタッチ
•
Attatchする表に、P2P用の列
を作成することを忘れずに!
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 PARTITION p3 STARTING (300) ENDING (399) FROM WORKTAB;
=> SQL3601W The statement caused one or more tables to automatically be placed
in the Set Integrity Pending state. SQLSTATE=01586
Qcaptureが
がパーティションの
パーティションのアタッチを
アタッチを検知
•
2009-04-30-11.40.12.935445 ASN7184W "Q Capture" : "QREP1" : "WorkerThread" :
Data partition "3" was attached to the source table "YANAV97.PARTTAB2".
SET INTEGRITY を実行
•
set integrity を忘れずに!
>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.
29
© 2009 ISE Corporation
検証: ATTACH Partitionの確認
•
片方の
片方の表にも新
にも新しいパーティション
しいパーティションの
パーティションのアタッチ
Attatchする表に、P2P用の列
を作成することを忘れずに!
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 PARTITION p3 STARTING (300) ENDING (399) FROM WORKTAB;
=> SQL3601W The statement caused one or more tables to automatically be placed
in the Set Integrity Pending state. SQLSTATE=01586
Qcaptureが
がパーティションの
パーティションのアタッチを
アタッチを検知
•
2009-04-30-11.47.13.250920 ASN7184W “Q Capture” : “QREP2” : “WorkerThread” :
Data partition "3" was attached to the source table "YANAV97.TG_PARTTAB2"
•
SET INTEGRITY を実行
set integrity を忘れずに!
>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.
30
© 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.
31
© 2009 ISE Corporation
検証: ADD Partitionの確認
• 新しいパーティション
しいパーティションの
パーティションの追加(
追加(ADD)
• パーティション表はATTACHの検証時と同じPARTTAB2
ALTER TABLE PARTTAB2 ADD PARTITION p3 STARTING (300) ENDING (399)
Qcaptureが
がパーティションの
パーティションの追加を
追加を検知
•
2009-05-01-10.45.54.365061 ASN7183W
"Q Capture" : "QREP1" : "WorkerThread" :
Data partition "3" was added to the source table "YANAV97.PARTTAB2".
•
同様にもう
同様にもう片方
にもう片方の
片方の表に対してもパーティション
してもパーティションを
パーティションをADD
ALTER TABLE TG_PARTTAB2 ADD PARTITION p3 STARTING (300) ENDING (399)
•
Qcaptureが
がパーティションの
パーティションの追加を
追加を検知
2009-05-01-10.47.23.380852 ASN7183W
"Q Capture" : "QREP2" : "WorkerThread" :
Data partition "3" was added to the source table "YANAV97.TG_PARTTAB2".
32
© 2009 ISE Corporation
検証: ADD Partitionの確認
•
ADDの場合は、set
integrityの実行は不要
のため、すぐにデータ
挿入可能
追加した
とレプリケーションを
追加したパーティション
したパーティションに
パーティションに含まれるデータ
まれるデータの
データの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.
33
© 2009 ISE Corporation
検証: DETACH Partitionの確認
• パーティションの
パーティションのデタッチ
• パーティション表はADDの検証後の状態のPARTTAB2(P3のパーティションが追加済み)
ALTER TABLE PARTTAB2 DETACH PARTITION p3 INTO WORKTAB2
•
Qcaptureが
がパーティションの
パーティションのデタッチを
デタッチを検知
2009-05-01-10.36.43.696422 ASN7185W
"Q Capture" : "QREP1" : "WorkerThread" :
Data partition "3" was detached from the source table "YANAV97.PARTTAB2".
34
© 2009 ISE Corporation
検証: DETACH Partitionの確認
•
PARTTAB2表
表は、p3に
、350の
の行が見えなくなる (デタッチは
は不要)
、p に入っていた300、
っていた
デタッチは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.
。
P3の Detach
>select * from parttab2
PK
RK
----------- ----------1
1
100
100
IBMQREPVERTIME
IBMQREPVERNODE
-------------------------- -------------0001-01-01-00.00.00.000000
0
2009-04-30-02.37.48.402853
4
2 record(s) selected.
35
© 2009 ISE Corporation
検証: DETACH Partitionの確認
•
同様に
同様に片方の
片方の表に対してパーティション
してパーティションを
パーティションをデタッチ
ALTER TABLE TG_PARTTAB2 DETACH PARTITION p3 INTO WORKTAB2
•
Qcaptureが
がパーティションの
パーティションのデタッチを
デタッチを検知
2009-05-01-10.43.58.314665 ASN7185W
"Q Capture" : "QREP2" : "WorkerThread" :
Data partition "3" was detached from the source table "YANAV97.TG_PARTTAB2".
36
© 2009 ISE Corporation
検証: DETACH Partitionの確認
•
TG_PARTTAB2表
表は、p3に
、350の
の行が見えなくなる (デタッチは
は不要)
、p に入っていた300、
っていた
デタッチは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.
。
P3の Detach
>select * from tg_parttab2
PK
RK
----------- ----------1
1
100
100
IBMQREPVERTIME
IBMQREPVERNODE
-------------------------- -------------0001-01-01-00.00.00.000000
0
2009-04-30-02.37.48.402853
4
2 record(s) selected.
37
© 2009 ISE Corporation
ブランク・
ブランク・ページ
38
© 2009 ISE Corporation
Compression表のサポート
Compression表のサポート
39
© 2009 ISE Corporation
Compression表のサポート
当機能の目的と使用方法
目的
Compressされた
された表
された表をソースとした
ソースとした差分
とした差分レプリケーション
差分レプリケーションの
レプリケーションのサポート
使用方法と
使用方法と変更点
Qcaptureが
が自動的に
も使用可能)
自動的に使用(
使用(SQL Captureも
使用可能
DB2の
のLOG read APIの
の機能拡張による
機能拡張による
使用可能な
使用可能なレベル
IRS V9.7 GA ~
対象プラットフォーム
対象プラットフォーム
Linux, Unix, Windows
40
© 2009 ISE Corporation
圧縮とレプリケーション
V95まではData Capture Changes属性が表に付与できない(SQL0270N)
DB2LogreadAPIは圧縮されたDataを非圧縮してCaptureへ返すことができない
DB2ReadLogAPI
V9.5
Log
V97からData Capture Changes属性が表に付与可能 (XML列の圧縮もサポート)
DB2ReadLogAPI
V9.7
Log
Dictionary
41
Compressed data
Uncompressed data
© 2009 ISE Corporation
行圧縮機能の概要(1/2)
• 辞書を
辞書を使った行
った行レベルの
レベルのデータ圧縮
データ圧縮
• 表のレコード情報から作成された辞書を使用して、実データを圧縮する機能
• 圧縮対象は、データ・ページのデータとログ・レコード
• LONG/LOB列、索引データは圧縮の対象外
• XML列は、INLINEでなくとも圧縮対象とすることが可能(V9.7で新規作成の表のみ対象)
• 辞書には、レコードにある特定のパターンが記録される
名前
部署
給与
都道府県
区・市
郵便番号
Fred
500
10000
東京都
港区
24355
John
500
20000
東京都
港区
24355
Fred
50
0
100
00
東京
都
港
区
243
55
Joh
n
50
0
200
00
東京
都
港
区
243
55
…
ディクショナリー
01 500
Fred
42
(0
1)
100
00
(02)
Joh
n
(01
)
200
00
(02)
…
02 東京都,
東京都 港
区,24355
… …
© 2009 ISE Corporation
行圧縮機能の概要(2/2)
• 辞書を
辞書を使った行
った行レベルの
レベルのデータ圧縮
データ圧縮(
圧縮(続き)
•
設定単位は、表
•
辞書の作成は、データ・パーティション単位で行なわれる
•
• パーティション・データベースでは、さらにデータベース・パーティションごとに作成
される
新機能
Data Capture Changes属性が付与された表は1世代前の辞書をKeep可能
• メリット
43
•
特に繰り返しの多いデータがある場合、データ・ページ使用量の削減が期待できる
•
ディスクI/O(読み取り量)が削減できるため、I/Oネックのシステムには効果がある
•
より多くのデータが圧縮された状態でバッファープールに乗るため、バッファープール
HIT率の向上が期待できる
•
ログ・ファイルへの書き出し量が削減される
•
Captureの処理が遅れている場合に辞書が再作成されても1世代前の辞書を使用して
新機能
変更収集を継続可能
© 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まで終了させて
おく
注意
44
© 2009 ISE Corporation
辞書の作成方法
• Shadow Copyアプローチ
アプローチによる
~)
アプローチによる表
による表の再編成(
再編成(V9.1~)
• 再編成処理の中で、辞書を作成した上で、辞書に基づいた表データの圧縮を行なう。
圧縮に使用される辞書は、既存を引き継ぐのか、新規に作成するのかを、オプション
で指定できる。
• 自動辞
、V9.5~
~)
自動辞書作成(
書作成(ADC: Automatic Dictionary Creation、
• 一定量のデータが表に格納された時点で、DB2が自動的に辞書を作成する。
• REPLACE モードによる
コマンド(
~)
モードによるLOADコマンド
による
コマンド(V9.5~)
• LOAD処理中に一定量のデータが表に格納された時点で、DB2が自動的に辞書を
作成する。辞書作成後に投入されたデータは、データ圧縮が行なわれて、表に格納
される。デフォルトでは、既存の辞書が存在する場合には、その辞書が引き継がれ
る。
• 見積もり
見積もり機能
もり機能による
機能による辞書作成
による辞書作成
• INSPECTコマンド(V9.1~)、ADMIN_GET_TAB_COMPRESS_INFO表関数
(V9.5~)
• 圧縮率の見積もりを行なう際に作成される辞書が残る
• 辞書が保持されるのは、COMPRESS属性がYES、かつ 表に既存の辞書が存在
しない場合
45
© 2009 ISE Corporation
表の再編成による表データの圧縮
•
表の再編成とあわせて
再編成とあわせて、
とあわせて、辞書の
辞書の作成よび
作成よびデータ
よびデータの
データの圧縮を
圧縮を行なうことが可能
なうことが可能
• 圧縮が行なわれるのは、表で行圧縮の設定が有効となっている場合のみ
• 他の辞書作成方法と異なり、既存の表データを圧縮することが可能
•
圧縮の
圧縮のコマンド例
コマンド例
1. ALTER TABLEステートメントで、COMPRESSオプションの変更
ALTER TABLE T2 COMPRESS YES
2. 辞書の作成、データの圧縮
REORG TABLE T2 KEEPDICTIONARY
REORG TABLE T1 RESETDICTIONARY
46
<辞書の作成、既存辞書がある場合は、
引継ぐ(デフォルトの動作)>
<辞書の作成>
© 2009 ISE Corporation
ADCによる自動辞書作成(1/3)
• 一定量の
が自動的に
一定量のデータが
データが表に格納された
格納された時点
された時点で
時点で、DB2が
自動的に辞書を
辞書を作成する
作成する
• 容量のしきい値は、約1~2MB。データをサンプリングして、辞書が作成される(しきい値は内部
的に決められている)
• 自動的に辞書作成が行われるのは、しきい値を最初に越えた時点のみ(一度のみ)
• 辞書作成後に
辞書作成後に挿入された
挿入されたデータ
されたデータが
データが、圧縮して
圧縮して格納
して格納される
格納される
• 既存データは、圧縮されない
• ADCが
が使用可能な
使用可能な条件は
条件は、以下のとおり
以下のとおり
• 表のCOMPRESS属性がYESに定義されている
• その表に辞書が作成されていない
• 辞書がすでに存在する場合、ADCは機能しない
• ADCの
のトリガーとなる
トリガーとなる操作
となる操作は
操作は、以下のとおり
以下のとおり
• INSERT
• IMPORT INSERT
• LOAD INSERT
• REDISTRIBUTE DATABASE PARTITION GROUP
47
© 2009 ISE Corporation
ADCによる自動辞書作成(2/3)
48
© 2009 ISE Corporation
ADCによる自動辞書作成(3/3)
(ADCによる
による動
による動き)
•
圧縮辞書を
圧縮辞書を持たない空
たない空の表が存在する
存在する。
する。
•
表にデータが
データが挿入される
挿入される。
される。辞書が
辞書が存在しないため
存在しないため、
しないため、データは
データは圧縮されない
圧縮されない。
されない。
•
更にデータが
データが挿入されるが
挿入されるが、
されるが、辞書が
辞書が存在しないため
存在しないため、
しないため、データは
データは圧縮されない
圧縮されない。
されない。
•
しきい値
しきい値に達すると、
すると、自動的に
自動的に辞書作成が
辞書作成が開始される
開始される(
される(COMPRESS YES
の場合のみ
場合のみ)。
のみ)。
•
圧縮辞書が
圧縮辞書が作成される
作成される(
される(既存の
既存のデータは
データは圧縮されないまま
圧縮されないまま存在
されないまま存在する
存在する)。
する)。
•
圧縮辞書が
圧縮辞書が表に付加される
付加される。
される。
•
この時点以降
この時点以降に
時点以降に挿入された
挿入されたデータ
されたデータは
データは、圧縮して
圧縮して格納
して格納される
格納される。
される。
※既存の
が必要。
既存のデータを
データを圧縮するには
圧縮するには、
するには、オフラインREORGが
オフライン
必要。
49
© 2009 ISE Corporation
XMLデータの圧縮
• DB2 V9.5では、指定したサイズ以下のXMLデータを基礎表に保持可能になった
• 基礎表に保持させたいXML列を定義する際に「INLINE LENGTH <integer>」キーワード
を付加する。
• 下記の例では、10000バイト以下のXMLデータを、ベース表に保持する。
• 基礎表に
基礎表に保持されたものが
保持されたものがV9.5
されたものがV9.5での
V9.5での圧縮対象
での圧縮対象
• DB2 V9.7では
V9.7ではXDA
ではXDAオブジェクト
XDAオブジェクトに
オブジェクトに保持された
保持されたXML
されたXMLデータ
XMLデータも
データも圧縮対象
create table dept (deptID char(8),...,doc XML inline length 10000)
データ・
データ・オブジェクト
圧縮可(
圧縮可(V9.5)
V9.5)
50
ID
…
PR27
…
PR28
…
ACC
…
索引オブジェクト
索引オブジェクト
DOC (XML)
XML記述子
記述子
Regions
Index
圧縮可(
圧縮可(DB2
V9.7)
V9.7)
XDAオブジェクト
オブジェクト(XML
Data)
オブジェクト
© 2009 ISE Corporation
「RESETDICTIONARY」 activeとHistorical Dictionary
• REORG RESETDICTIONARY
COMPRESS
辞書が存在するか
結果
Y
Y
辞書が
辞書が再作成され
再作成され、
され、行が圧縮される
圧縮される
Y
N
辞書が
辞書が新規作成され
新規作成され、
され、行が圧縮される
圧縮される
N
Y
辞書が
辞書が除去され
除去され、
され、全行圧縮解除される
全行圧縮解除される
N
N
影響なし
影響なし、
なし、全行圧縮解除される
全行圧縮解除される
•
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.
51
© 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)
begin
declare i int default 0;-while i < cnt
do
insert into t1 values (i,char(i),char(i));-if mod(i,100) = 0 then
commit;-end if;-set i = i + 1;-end while;-commit;-return 0;-end
DB20000I The SQL command completed successfully.
call ins(45000)
Return Status = 0
52
© 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
Y
TABLE GROWTH
2009-03-31-09.36.48.000000
NOT BUILT
-
20864
32768
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
Data Cpature Change属性
Change属性なしで
属性なしで
はサイズは
サイズは変化なし
変化なし
DICT_BUILD_TIMESTAMP
COMPRESS_DICT_SIZE
EXPAND_DICT_SIZE
------------- ------------------------------ -------------------------- -------------------- -------------------Y
Y
REORG
2009-03-31-09.36.57.000000
NOT BUILT
-
19712
32768
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.
53
© 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)
begin
declare i int default 0;-while i < cnt
do
insert into t1 values (i,char(i),char(i));-if mod(i,100) = 0 then
commit;-end if;-set i = i + 1;-end while;-commit;-return 0;-end
DB20000I The SQL command completed successfully.
call ins(45000)
Return Status = 0
54
© 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
Y
TABLE GROWTH
2009-03-31-09.05.03.000000
NOT BUILT
-
20864
32768
0
0
2 record(s) selected.
reorg table t1 resetdictionary
DB20000I
The REORG command completed successfully.
Data Cpature Change属性
Change属性ありで
属性ありで
はサイズは
サイズは変化あり
変化あり
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
Y
REORG
2009-03-31-09.05.09.000000
NOT BUILT
-
19712
65536
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.
55
© 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
yes
DB20000I The SQL command completed successfully.
create procedure ins(in cnt int)
begin
declare i int default 0;-while i < cnt
do
insert into t1 values (i,char(i),'<name>XML TO XML</name>');-if mod(i,100) = 0 then
commit;-end if;-set i = i + 1;-end while;-commit;-return 0;-end
DB20000I The SQL command completed successfully.
call ins(45000)
Return Status = 0
56
© 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.
XMLは
XMLはData Cpature Change属性
Change属性
ありでも
サイズは変化ない
変化ない
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.
57
© 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 read
was 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.
58
© 2009 ISE Corporation
パーティション表と行圧縮の使用例
• 新規データ
新規データの
データの追加
方法 1: ADD PARTITION + データ投入(LOAD INSERT、IMPORT、INSERTなど)
• 空のパーティションをADDする
• データ投入
• データ投入の際、ADCによって、自動的に辞書作成、データ圧縮が行なわれる
方法 2: 行圧縮された表のアタッチ
• より精度の高い辞書作成のためには、こちらの方法が推奨される
方法 1
⑤SET INTEGRITYコマンド
方法 2
履歴表A
履歴表
履歴表A
履歴表
辞書
JAN01
辞書
JAN02
辞書
JAN03
①新規パーティションの作成(ADD PARTITON)
②データ投入
辞書
JAN01
辞書
辞書
JAN02
④区分の
アタッチ
①表の作成
②データ投入
③データ圧縮(REORG TABLE)
59
JAN03
アタッチ対象表の属性がCOMPRESSION=NOの場合、
ATTACHは失敗するので注意。(SQL20307N)
辞書
JAN03
© 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.
4つの区分
つの区分で
区分で区分毎に
区分毎に2万件
==> 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
END WHILE ;
COMMIT;
end if;
COMMIT;
END
DB20000I
The SQL command completed successfully.
==> db2 "call whiled(80000)"
Return Status = 0
60
© 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
-
XML
Y
NOT BUILT
-
DATA
Y
TABLE GROWTH
2009-03-31-12.02.35.000000
XML
Y
NOT BUILT
-
DATA
Y
TABLE GROWTH
2009-03-31-12.02.58.000000
XML
Y
NOT BUILT
-
DATA
Y
TABLE GROWTH
2009-03-31-12.03.25.000000
XML
Y
NOT BUILT
-
DATA
Y
TABLE GROWTH
2009-03-31-12.03.53.000000
XML
Y
NOT BUILT
-
0
0
0
0
0
0
13312
27128
88
0
0
0
13440
27264
88
0
0
0
13440
27264
88
0
0
0
13440
27264
88
0
0
0
10 record(s) selected.
61
© 2009 ISE Corporation
Compressed表 とPartition表
==> db2 -vtf list.sql
describe data partitions for table t1 show detail
PartitionId Inclusive (y/n)
Low Value
Inclusive (y/n)
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.
62
© 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
library "libmqm_r.a(
"Q Capture" : "ASN" : "AdminThread" : The program successfully loaded the WebSphere MQ
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 transaction
still 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
unique constraint, or unique index.
"Q Capture" : "ASN" : "WorkerThread" : Source table "DB2V97.T1" does not have a primary key,
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
63
"Q Capture" : "ASN" : "WorkerThread" : The "mqpub 9.7.4" program initialized successfully.
© 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
DB20000I
DATA CAPTURE CHANGES INCLUDE LONGVAR COLUMNS
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 ASN7184W "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
64
The SQL command completed successfully.
© 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:
qTransRow.length:
0000:0000:0000:0004:ec83
58
rowheader.encodetype: COMPACT
rowheader.encodever: ASNMQ_ROW_ENCODE_V100
rowheader.operation: INSERT
65
© 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
s090219 (notcompressed)
s090219
(compressed
Changes)
Changes
Q-Capture
throughput
(rows/sec)
9909
10936
+10.3%
Q-Capture CPU
(ms/row)
0.052
0.052
+0%
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.
66
© 2009 ISE Corporation
Option to
to replicate
replicate Loadのサポート
Loadのサポート
Option
67
© 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
68
© 2009 ISE Corporation
Q Replication Full Refresh
• WebSphere MQを
を使用した
使用したレプリケーション
したレプリケーション
• 更新差分をキューにPUTしてレプリケーション
• 自動/手動
自動 手動フル
手動フル・
フル・リフレッシュ、
リフレッシュ、またフル
またフル・
フル・リフレッシュなし
リフレッシュなし、
なし、が容易に
容易に選択可能
• フル・リフレッシュ:初期データをターゲット側に転送(静止点の作成)
• 転送中のソース側更新も、後追いで適用
• 自動フル・リフレッシュでは、DB2のDRDA機能を使用
z/OS
Unix
Linux
Windows
• Load Utilityを
を変更収集できない
変更収集できない
• ただしSHRLEVEL CHANGEのLOADは収集可能(PQ52343 )
• ソース表
を検知し
を発行可能(
のみ)
ソース表のLoadを
検知しWarningを
発行可能(z/OSのみ
のみ
z/OS• ASN0196W
Unix
Linux
Control
WebSphere MQ
Windows
DB2
ストアード
プロシージャー
Control
ニックネーム経由
DB2
ソース表
Q
Capture
ログ・
ログ・ベース
69
差分コピー
差分コピー
フル・
フル・リフレッシュ
Q
Apply
agent
agent
agent
ターゲット表
NonDB2
Oracle
SQL Server
Informix
Sybase
© 2009 ISE Corporation
自動ロード機能追加オプション
• IBMQREP_SUBS
CAPTURE_LOA
D
Data Type: CHAR(1) not null with default ‘W’
W(default) : Warning Message ASN7186Wを
を出力
R(Restart the subscription) : Captureは
はWarningを
を発行後、
発行後、ス
キーマを
はLoad_Typeに
に従う
キーマを発行、
発行、Applyは
③
①
Load
②
SCHEMA Message
TEST_SOURCE
Qキャプチャー
Qアプライ
TEST_COPY
CAPTURE_LOAD=‘R’
70
© 2009 ISE Corporation
CAPTURE_LOAD=‘R’実行例
(CAPTURE_LOAD=‘R’ z/OS to z/OS)
M 4020000 ZS17PA
E
N 0200000 ZS17PA
S
N 0000000 ZS17PA
N 0020000 ZS17PA
N 4000000 ZS17PA
N FFFFFFF ZS17PA
N 4000000 ZS17PA
N C000000 ZS17PA
NC0000000 ZS17PA
SC
M 4020000 ZS17PA
D
D
E
09092 16:03:58.39 JOB00186 00000010
292 00000010
09092 16:04:12.92 JOB00188 00000010
09092
09092
09092
09092
09092
09092
09092
16:04:12.94
16:04:13.05
16:04:13.06
16:04:15.77
16:04:15.77
16:04:15.78
16:04:15.80
JOB00188
JOB00188
JOB00188
JOB00188
JOB00188
00000210
00000010
00000010
00000010
00000010
00000201
INTERNAL 00000210
09092 16:04:19.15 JOB00185 00000010
301 00000010
301 00000010
301 00000010
ASN7606I "Q Apply" : "AZUMA" : "BR00000" : Q subscription "SUB1" 292
(receive queue "Q1", replication queue map "MYQMAP1") is active.
$HASP100 LOAD1
ON INTRDR
FROM TSU00163
ADMF001
IRR010I USERID ADMF001 IS ASSIGNED TO THIS JOB.
ICH70001I ADMF001 LAST ACCESS AT 16:03:47 ON THURSDAY, APRIL 2, 2009
$HASP373 LOAD1
STARTED - INIT 3
- CLASS A - SYS STL0
SMF000I LOAD1
DSNUPROC
DSNUTILB
0000
$HASP395 LOAD1
ENDED
$HASP309 INIT 3
INACTIVE ******** C=APZRX3
SE '16.04.15 JOB00188 $HASP165 LOAD1
ENDED AT STLVM3 MAXCC=0',LOGON,
USER=(ADMF001)
ASN7186W "Q Capture" : "AZUMA" : "WorkerThread" : A load 301
operation has been detected on table "ADMF001.T1" for Q
subscription "SUB1" (receive queue "Q1.T1", replication queue
map "MYQMAP1.T1").
N 4020000 ZS17PA
09092 16:04:19.23 JOB00185 00000010 ASN7012I "Q Capture" : "AZUMA" : "WorkerThread" : The publication or Q
S
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 a
E
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" : 304
D
304 00000010 "BR00000" : Browser for queue 'Q1' received a schema for an
E
304 00000010 active subscription.
71
© 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
•
制約(
を含む)がソース表
後もCHECK Pending状態
状態になるため
制約(参照制約 RIを
ソース表にある場合
にある場合は
場合はLOAD後
状態になるため
QApplyの
のLoadが
が失敗し
は非活動化する
LUW)
失敗し、Subscriptionは
非活動化する(z/OS,
する
72
•
CHECK DATA (z/OS), SET INTEGRITY(LUW)をLOAD後に実施する必要あり
•
制約(参照制約 RIを含む)ある場合、INSERT ALLOW READ ACCESSの場合には追加されてい
ない既存のData部分のみフルレフレシュで取り込むので注意(LUWのみ)
•
制約がある場合 ALLOW NO ACCESSではソース表の読み取り不可のためSubが非活動化
(LUWのみ)
© 2009 ISE Corporation
自動ロード機能追加オプション
•
EEE環境
環境でも
環境でも有効
でも有効
•
Bidir/P2P環境
環境では
自身の
を避けるためQapplyから
からREPLICATE_LOAD
環境ではLOAD自身
では
自身の収集の
収集の無限Loopを
無限
けるため
から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’のみ
のみスキーマ
のみスキーマを
スキーマを送信する
送信する
•
73
STATE=‘L’ではasn7186wのみ出力する
© 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".
74
© 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 "1DB2V97.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
from routine "QAsub::callLoader".
"Q Apply" : "ASN" : "BR00000SP001" The program received an unexpected return code "-668"
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
deactivated.
"Q Capture" : "ASN" : "WorkerThread" : The publication or Q subscription "SUB1" was
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 the
inactive 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
exiting thread "BR00000SP001".
"Q Apply" : "ASN" : "BR00000" The thread "BR00000" received return code "2011" from the
75
© 2009 ISE Corporation
BIDIR/P2P環境でのCAPTURE_LOAD=Rと
REPLICATE_LOAD signal
• Bidir/P2P環境
Bidir/P2P環境では
環境ではLOAD
ではLOAD自身
LOAD自身の
自身の収集の
収集のを避けるためQApply
けるためQApplyから
QApplyから
REPLICATE_LOAD signal が発行
発行される
される
• SUBSCRIPTION単位のコントロール
Load
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'
76
© 2009 ISE Corporation
REPLICATE_LOADシグナル Flow
Node 1 (Initiator)
User
Capture
Node 2 (New)
Apply
Apply
Capture
LOAD
SCHEMA MSG
P2PNEW2MEMB SUB_2_1
SUB_1_2
REPLICATE_LOAD(D)
IL/E
SUB_2_1
SCHEMA MSG
IA
SUB_2_1
IA
LOADDONE SUB_1_2
SUB_1_2
LOADDONE_RCVD MSG
REPLICATE_LOAD(E)
LA
SUB_1_2
L/EA
Figure 2. 2-Node Initialization (With Load)
77
© 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が実施される
Load
Bidir
78
Uni
© 2009 ISE Corporation
EEEの環境下でも有効な例
(CAPTURE_LOAD=‘R’ under EEE + MDC + Partitioned + Compressed ( Data + XML)
$ 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
79
The SQL command completed successfully.
© 2009 ISE Corporation
EEEの環境下でも有効な例
(CAPTURE_LOAD=‘R’ under EEE + MDC + Partitioned + Compressed ( Data + XML)
$ 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
= 20000
Rows Rejected
= 0
Rows Partitioned
= 20000
Summary of LOAD Agents:
Number of rows read
Number of rows skipped
Number of rows loaded
Number of rows rejected
Number of rows deleted
Number of rows committed
80
=
=
=
=
=
=
20000
0
20000
0
0
20000
© 2009 ISE Corporation
EEEの環境下でも有効な例
(CAPTURE_LOAD=‘R’ under EEE + MDC + Partitioned + Compressed ( Data + XML)
$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 the
utility 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.
81
© 2009 ISE Corporation
3NODE以上のP2Pでは使用不可(ASN7187E)
(CAPTURE_LOAD=‘R’ under 3node P2P , Load was invoked)
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> ASN7187E "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
"6060" from the exiting thread "WorkerThread".
"Q Capture" : "ASN" : "Initial" The thread "Initial" received return code
2009-04-09-16.43.22.075518 <asnThread::stop> ASN0590I
"2001" from the exiting thread "AdminThread".
"Q Capture" : "ASN" : "Initial" The thread "Initial" received return code
2009-04-09-16.43.22.076007 <asnThread::stop> ASN0590I
"2011" from the exiting thread "PruneThread".
"Q Capture" : "ASN" : "Initial" The thread "Initial" received return code
2009-04-09-16.43.22.091785 <Asnenv:delEnvIpcQRcvHdl> ASN0595I
with keys "(0x3000020e)".
2009-04-09-16.43.33.094729 <asnqcap::main> ASN0573I
82
"Q Capture" : "ASN" : "Initial" The program removed an IPC queue
"Q Capture" : "ASN" : "Initial" : The program was stopped.
© 2009 ISE Corporation
Multiple Restart
Restart Queue
Queue
Multiple
83
© 2009 ISE Corporation
Multiple Restart Queue
(QCaptureのSTARTALLQパラメータ、STARTQ/STOPQコマンド)
当機能の目的と使用方法
目的
1つのQcaptureでの
での複数送信
エラーが
つの
での複数送信キュー
複数送信キュー使用時
キュー使用時において
使用時において、
において、一部の
一部のキューでの
キューでのMQPUTエラー
での
エラーが発生し
発生し
た場合、
自体が
場合、Qcapture自体
自体が停止するのではなく
停止するのではなく、
するのではなく、障害が
障害が発生した
発生したキュー
したキューへの
キューへの書
への書き込みのみを停止
みのみを停止す
停止す
ることによって、
ることによって、正常な
正常なキューへの
キューへの処理
への処理を
処理を継続し
継続し、全体的な
全体的なレイテンシーの
レイテンシーの悪化を
悪化を回避することが
回避することが1
することが1
つの目的
つの目的。
目的。また障害
また障害が
障害が発生した
発生したキュー
したキューの
キューの回復時に
回復時に、関連する
関連する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
84
© 2009 ISE Corporation
QサブスクリプションとQマッピング
•
Qサブスクリプション
サブスクリプション:
マップ=
サブスクリプション:Qマップ
マップ=1:1
qsub1
qsub1(Qサブスクリプション)
サブスクリプション)
•
メリット
•
ひとつのQマップがinactiveになっても、他の
Qマップに属するQサブスクリプションに影響
がない
•
デメリット
•
運用管理対象のコンポーネントが増える
•
同一の
同一のトランザクションで
トランザクションで異なるQマップ
なる マップに
マップに属
するソース
するソース表
ソース表が更新されると
更新されると、
されると、トランザクショ
ン情報が
情報が分割されてしまう
分割されてしまう
•
ほか
•
qmap1
qmap1(Qマップ)
マップ)
ソース表1
送信キュー
受信キュー
ターゲット表1
qsub2
qsub2
qmap2
qmap2(Qマップ)
マップ)
ソース表2
•
送信キュー
受信キュー
ターゲット表2
複数サイトへのレプリケーションでは、それ
ぞれのサイトに対するQマップが必要
Qサブスクリプション
サブスクリプション:
マップ=
サブスクリプション:Qマップ
マップ=2:1
qsub3
qsub3
•
メリット
•
運用管理が容易
qmap3
qmap3(Qマップ)
マップ)
ソース表3
ターゲット表3
•
qsub4
qsub4
•
送信キュー
ソース表4
デメリット
受信キュー
ターゲット表4
•
ほか
•
85
ひとつのキューがinactiveになると、その
Qマップに属するサブスクリプション全て
が実行できなくなる
APPLY側で表の従属関係を検知可能
© 2009 ISE Corporation
複数送信キューの利用
• 複数の
複数の送信キュー
送信キューを
キューを使用する
使用する目的
する目的
• 依存性のない表に対する更新を別々のキューで送信することにより、キュー
単位で開始停止が可能となり、アプリケーション単位での管理がしやすい
• 万が一キューが停止しても、他のQマップに含まれるサブスクリプションに影
響を与えないアプリケーションごとの負荷を軽減
• 1つのQcaptureで収集した更新情報を複数のリモートサイトに送信する
1つのキューで
MQPUTエラー
が発生!
送信キュー
キューが分かれていても、 Qcaptureが停止するため、
すべてのキューへのMQPUTができなくなる
送信キュー
送信キュー
86
全体的な
全体的なデータ鮮度
データ鮮度の
鮮度の悪化!
悪化!
© 2009 ISE Corporation
従来までの送信キューエラーと復旧シナリオ
QCaptureで
でMQPUTエラー
エラー発生
エラー発生
該当送信キュー
’(非活動)
停止
該当送信キューの
キューのステータスを
ステータスを‘I’
非活動)に変更し
変更し、Qcapture停止
サブスクリプションの
’(活動)
サブスクリプションのステータスは
ステータスは‘A’
活動)のまま
障害原因復旧OK
障害原因復旧
Qcaptureの
の再起動
該当キュー
であれば、
該当キューへの
キューへの書
への書き込みOKであれば
であれば、
キューの
に変更し
キューのステータスを
ステータスを’A’に
変更し、処理を
処理を継続
障害原因復旧不可
他のキューの
キューのレプリケーションを
レプリケーションを継続させる
継続させる場合
させる場合
関連する
関連するサブスクリプション
するサブスクリプションの
サブスクリプションのステータスを
ステータスを
すべて‘
’(非活動)
を発行
すべて‘I’
非活動)にするか、
にするか、CAPSTOPを
Qcaptureの
の再起動
Qrepの
の場合、
場合、関連サブスクリプション
関連サブスクリプション
QCaptureは
は停止した
の読み込み再開
停止した以降
した以降の
以降のLOGの
全てのFULLREFRESHが
が必要
ての
Event Publisherの
の場合、
場合、
レプリケーションの
レプリケーションの継続は
継続は不可
87
エラーが
エラーが発生した
発生したキュー
関連していたサブスクリプション
したキューに
キューに関連していた
していたサブスクリプションは
サブスクリプションは
障害が
障害が復旧しても
復旧しても、
しても、差分レプリケーション
差分レプリケーションの
レプリケーションの継続は
継続は不可
© 2009 ISE Corporation
Fullrefreshが必要な理由
• サブスクリプションが
が起動すると
の次回
サブスクリプションが非活動の
非活動の間にQcaptureが
起動すると、
すると、Qcaptureの
のリスタート・
リスタート・ポイント情報
ポイント情報が
情報が進む
• リスタート・ポイントは1つのQcaptureで1つ、RestartQに持つ
レプリケーションを継続させるためには
非活動の間の更新は
Fullrefreshまたは手動でソース表とターゲット表の
収集できない
同期を取る必要がある
• 現行の
の情報
現行のRestartQの
• 1つのQcaptureで1つのmin-LSN と max-commitを持つ
• min-LSN:Qcaptureが停止した時点でCOMMITまたはROLLBACKが発行されていないトラン
ザクションの開始のLSN
• max-commit: Qcaptureが停止した時点で、最後に確実にMQに書き込んだトランザクションの
COMMITのタイムスタンプ
time
Tx1
LSN = 5
QCap Stop
Tx2
MAXCMTSEQ
88
© 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
89
© 2009 ISE Corporation
新機能
目的
•
•
•
ある送信キューの障害による、全体的なレイテンシーの悪化を避ける
•
障害が発生したキューに関連する全てのサブスクリプションのター
ゲット表への再LOAD(FULLREFRESH)を回避
•
Event Publisherでは、レプリケーションの継続を可能にする
新機能の
新機能の概要
• IBMQREP_SENDQUEUSの新しいERROR_ACTIONとして「Q」が
追加
意味:キューでエラーが発生した場合は、そのキューのみ停止し、他の
キューへの処理を継続
•
•
•
RestartQの新しい情報
•
90
現行のデフォルトは「S」、この場合Qcaptureは停止
RestartQに個々のキューに関するリスタート情報(min-LSN と maxcommitなど)を保持
© 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
Q2は更新継続
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
Q1はQFULLで停止状態
sendq lastCommitTime: 2009-06-12-13.13.23.000005
sendq restartLSN=0000:0000:0000:4010:ef6d nodeId=0
91
© 2009 ISE Corporation
新規コマンドおよびシグナル
>>-asnqccmd--capture_server=db_name----------------------------->
>--+-----------------------+--+-chgparms--| parameters |-+-----><
'-capture_schema=schema-' +-prune--------------------+
+-qryparms-----------------+
+-reinit-------------------+
+-reinitq=send_queue-------+
New +-startq-+-send_queue-+----+
|
'-all--------'
|
New +-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でも同様
92
© 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
New
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) 状態の送信キューを
アクティブ化しません。
93
© 2009 ISE Corporation
ConcurrentAccessResolution for
for Load
Load
ConcurrentAccessResolution
94
© 2009 ISE Corporation
ConcurrentAccessResolution for Load
当機能の目的と使用方法
目的
DB2 V9.7新機能
新機能の
つの
Commitedによって
によってFullrefresh中
中に更新が
更新が実行中の
実行中の場合、
場合、Qapplyや
やSQL
新機能の1つのCurrently
によって
Applyにおいて
においてデータロス
構成の
をAVAILABLEまたは
または
においてデータロスが
データロスが発生することが
発生することが判明
することが判明、
判明、DB CFG構成
構成のCUR_COMMIT=ONを
OFFに
に変更せず
、SQL Applyが
がData Lossを
を発生させない
変更せずQapply、
せず
発生させない方法
させない方法を
方法を考案する
考案する必要
する必要があった
必要があった。
があった。
方法として
やSQL APPLYが
が使用する
や独自の
をWAIT FOR OUTCOMEで
でバイン
方法としてQAPPLYや
として
使用するEXPORTや
する
独自のPACKAGEを
とSQL APPLYから
からEXEC
SQL SET CURRENT PACKAGESET = ‘ASN’を
を指定しその
ドし、QAPPLYと
から
指定しその
PACKAGEのみを
のみを使用
のケース)
に関してはFEDERATION
のみを使用する
使用する方法
する方法が
方法が採用された
採用された(EXPORTの
された
ケース). CURSOR LOADに
しては
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
95
© 2009 ISE Corporation
DB2_SKIPINSERTED, DB2_SKIPDELETEDがある場合の注意点
DB2_SKIPINSERTED=YES
Insert
Delete
Log
Log
DB2_SKIPDELETED=YES
CAPSTART
Commit
Log
Log
CAPSTART
Commit
Log
Log
Capstartの前からInsertのトランザクション
が実行されCapstart後にCommitされた場合
Captureによって変更収集されず、かつ
Commit前のFull refresh時のfetchで(CS iolation)で
Insertされたデータは拾うことができないため不整合
Capstartの前後には関係なく、Delete実行中にFull
refreshが実行されそのトランザクションがCommit
された場合にFull refreshではそれらが反映されない
ため不整合
Full refresh の実行時にはこれらのRegistryは使用しないように!!
※DB2_SKIPINSERTED, DB2_SKIPDELETEDは、DB2 for LUW V8.2 フィックスパック2からの機能です
96
© 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の
記述間違いです。
(修正依頼済み)
97
© 2009 ISE Corporation
DB2 (V9.5以前)の読み取り一貫性
• DB2は
は最新の
最新のデータを
データを読む
• 参照処理は、更新処理がコミットされるまで待つ
A
B
TRN1
UPDATE
C
C’
UPDATE
COMMIT
D
D’
TRN2
TRN2は、TRN1が
COMMITするまで
WAIT
SELECT
E
F
読むデータは
データは常に最新だが
最新だが、
だが、参照処理が
参照処理がロック待機
ロック待機する
待機する可能性
する可能性あり
可能性あり
98
© 2009 ISE Corporation
Oracleの読み取り一貫性 (Read Committed)
•
マルチ・
マルチ・バージョン一貫性制御
バージョン一貫性制御 (Multi-Version Concurrency Control)
•
更新処理により、更新前イメージが専用の領域へ書き出される
•
参照処理はコミットを待たずに更新前イメージを読む
• Select発行時点でコミット済みのデータを読む
• 下記の例では、UPDATEがCOMMITされていたとしてもTRN2は更新前データを読む
SCN=10
B
TRN1
UPDATE
A
SCN=110
UPDATE
SCN=98
SCN=100
UNDOセグメント
TRN2
C
C’
C
D
D’
D
SCN=29
SELECT
E
F
読んだデータ
んだデータが
データが最新とは
最新とは限
とは限らないが、
らないが、参照処理は
参照処理はロック待機
ロック待機しない
待機しない
99
© 2009 ISE Corporation
DB2 (DB2 V9.7)の読み取り一貫性 (Currently
Committed)
•
未コミットの
コミットの更新があっても
更新があってもロック
があってもロック待機
ロック待機をしない
待機をしない
•
参照処理は、更新処理に伴うロックの開放を待たず、更新前のデータ(コミット済みの最新
データ)をログ(ログバッファー)から読む
•
常に最新のコミット済みデータを読む
A
B
トランザクションログ
(ログバッファー)
UPDATE
C
C’
C
UPDATE
D
D’
D
TRN1
TRN2
SELECT
E
F
参照処理は
参照処理はロック待機
ロック待機せず
待機せず、
せず、かつコミット
かつコミット済
コミット済みの最新
みの最新データ
最新データを
データを読む
100
© 2009 ISE Corporation
Currently Committedの有効化
•
•
CUR_COMMIT DB構成
構成パラメーター
構成パラメーター
: 新規作成DBのデフォルト (分離レベルCSはCurrently Committedとして挙動)
•
ON
•
AVAILABLE: アプリケーションから明示的に指定された場合にCurrently Committed有効
•
DISABLED : Currently Committed無効 (V9.5以前からMigrationされたDBでのデフォルト)
BIND コマンド
>--+-------------------------------------------------------------+-->
'--CONCURRENTACCESSRESOLUTION--+--USE CURRENTLY COMMITTED--+--'
'--WAIT FOR OUTCOME---------'
•
アプリからの指定
•
•
101
Java
• concurrentAccessResolution (Connection/DataSourceプロパティ)
• setDBConcurrentAccessResolution (DB2Connectionのメソッド)
CLIや.NetからもCurrently Committedの指定可能
© 2009 ISE Corporation
Currently Committedが有効にならないケース
•
カタログ表のアクセス
•
RCT(Range Clustered Table)のアクセス
•
参照制約の適用
•
Long Varchar/Vargraphic列を持った表のアクセス
•
表レベル/Blockレベルのロック競合
•
Update/Deleteに伴う表アクセス、更新可能Cursor
•
「未コミットInsert行のスキップ」はWrite処理対象表であっても有効
T1表
表 (索引無し
索引無し)
APL2
UPDATE T1
SET COL2=‘
COL2=‘ZZ’
ZZ’
X
X
102
X
X
COL
ZZ2
AA
ZZ
BB
ZZ
CC
DD
ZZ
EE
X
APL1
INSERT VALUES
(803,’
(803,’DD’
DD’)
COL1
800
801
802
803
804
© 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開発と交渉中)
A
TRN1
INSERT
UPDATE
B
トランザクションログ
(ログバッファー)
C
X’
D
D’
D
TRN2
QAPPLY
SELECT
E
COMMIT
F
CAPSTART
103
© 2009 ISE Corporation
解決策
データ移動方法別解決策
データ移動方法別解決策
Data漏
漏れ解決策
Programs
Export/Import or
Load
QAPPLY
SQL APPLY
DB2Export API WFO Bindを使用、QAPPLYからは EXEC SQL SET
CURRENT PACKAGESET=‘ASN’(PackageはAUTOBIND)
*Downlevel ClientからはGENERIC Bind Option使用
Load from Cursor
using Nickname
QAPPLY
DRDA WRAPPER CLI Setting変更
SQL APPLY
CLIのSQLSetConnectAttr SQL_WAIT_FOR_OUTCOME使用
ALTER SERVER <Server_NAME> Options
CONCURRENT_ACCESS_RESOLUTION ‘W’)
Apply実行時
実行時に
のCheck(ASN7532E)
実行時にSERVER_OPTIONの
*Downlevel Clientからは特になし, CUR_COMMIT=AVAILABLEを推奨
104
SELECT/INSERT
SQL APPLY
ASNAFET.SQCの
のプリコンパイルオプション変更
プリコンパイルオプション変更
Load from Cursor
without Nickname
QAPPLY
回避策なし
回避策なし
SQL APPLY
© 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 ASN7532E "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".
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 the
inactive state.
2009-04-14-12.26.30.470475 ASN8999D spillQ 'IBMQREP.SPILL.MODELQ.0.1.2' for sub 'SUB1' successfully deleted
2009-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');
105
© 2009 ISE Corporation
CURSOR LOADをSERVER_OPTIONなしで実行した場
合 (SQL)
------------------------Compiled(A) at 00:05:13 on Apr 20 2009 (Level 80127g_97)
UTGP: Commit1 ok
USRX: child process created
USRX: 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: ROLLBACK
PSET: success is 0
PSET: connect to NEWDB; rc = 1
PSET: connect to V9DB; rc = 1
CLOS: setRepeatCopy is 0
CPCLOS: success is 0. retcode is 0.
CLOS: activate = 1
CLOS: status
= -1
CLOS: lastrun = 2009-04-22-19.08.28.564972
CLOS: lastsuccess is null
CLOS: synchpoint is null
CLOS: synchtime is null
CLOS: apply_qual = QUAL1
CLOS: set_name = SET1
106
© 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 TRUE
ERR: The federated server supports option
CONCURRENT_ACCESS_RESOLUTION, but that
option does not seem to be enabled.
This option must be set for servers for UDB
databases of version 9.7 or higher.
Exiting checkSrcNickUsesWFO with srcNickUsesWFO 0
Getting the configuration for the Sourceserver (get_cfg_values): NEWDB
Connecting (connect_db):
CONNECT TO NEWDB
INF: CONNECT to server NEWDB successful.
Exiting connect_db with return code 0
Configuration for Sourceserver 'NEWDB':
DB2 Type
: SQL
DB2 LUW
: TRUE
Version
: 9
Release
: 7
Local
: FALSE
Table is nick : FALSE
Nicknametype
:
Loadx_src_n_owner: DB2V97
Loadx_src_n_table: T1NK
Exiting get_cfg_values with return code 0
ERR: Cannot use Crossloader because the option
CONCURRENT_ACCESS_RESOLUTION='W' was not set for the
server mapping for this nickname
Exiting runapplychecks unsuccessfully with return code 112
***
Exiting ASNLOAD : Return Code is: 112
107
asnloadQUAL1.trc
© 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
108
© 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 found
2009-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 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: "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.
109
© 2009 ISE Corporation
ブランク・
ブランク・ページ
110
© 2009 ISE Corporation
XML列のTransformationサポート
XML列のTransformationサポート
111
© 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
112
© 2009 ISE Corporation
XML列のTransformation
• V9.7から
からXML列
列の変換が
から
変換が可能
• キー列以外の変換が可能
Capture
DB2Log
Apply
変換
変換
SOURCE1
差分コピーはアプライで変換が実施される。
ターゲット側で実施される。
TARGET1
フルリフレッシュ
自動LOAD時
時
自動
ソースDBに対するSELECT
差分コピー
差分コピー時
コピー時
自動LOADはソース表からSELECTする時
に変換が適用される。
ソース側で実施される。
キー列が含まれない場合
エージェントスレッドで変換を行いターゲットに適用
キー列が含まれる場合
ターゲットのBrowserスレッドからのSYSIBM.SYSDUMMY1に対するダミーのSELECTし、結果をアプライエージェントに渡す
各行毎
考慮点
ソースとターゲットで動きが異なる関数を指定すると不整合が発生する
113
© 2009 ISE Corporation
XML列のTransformationで使用可能なXML関数
•
XML列
列のTransformation内
内で使用可能な
使用可能な関数
• サポートされているXML関数
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
サポートされていないXML関数
•
•
•
•
•
•
•
114
XMLATTRIBUTES
XMLCOMMENT
XMLCAST
XMLCONCAT
XMLDOCUMENT
XMLELEMENT
XMLFOREST
XMLNAMESPACES
XMLPARSE
XMLPI
XMLQUERY
XMLROW XMLSERIALIZE
XMLTEXT
XMLVALIDATE
PARAMETER
XMLAGG
XMLEXISTS
XMLGROUP
XMLTABLE
XMLXSROBJECTID
XSLTRANSFORM
© 2009 ISE Corporation
使用例1
• 以下のような
以下のようなレプリケーション
のようなレプリケーションを
レプリケーションを定義
• XMLQUERY関数でソース側のXMLデータに
<root>ノードを追加してレプリケーションを行う
ソース側データ
C1
C2
(INT)
) (XML)
)
1
<a>aa</a>
2
<b>aa</b>
115
変換
XMLDOCUMENT(
XMLQUERY(
'<root>{$a }</root>'
passing :c2 as "a"
)
)
ターゲット側データ
C1
(INT)
)
C2
(XML)
)
1
<root>
<a>aa</a>
</root>
2
<root>
<b>aa</b>
</root>
© 2009 ISE Corporation
使用例1
•
ソース表
ソース表とターゲットの
ターゲットの定義を
定義を行い、
ASNCLPで
でサブスクリプションを
サブスクリプションを作成
•
XML変換列
変換列の
変換列のマッピング
• XML->XML
Expression句でXML関数を使用
した変換を指定
ソース表とターゲット表定義
C:¥work¥asnclp>db2 -tvf crttab.sql
drop table t1
DB20000I SQL コマンドが正常に完了しました。
drop table t1_copy
DB20000I 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 コマンドが正常に完了しました。
116
====
CMD: create qsub using replqmap qmap1 (t1 options has
load phase I exist target name t1_copy type usertable
trgcols include(C1) expression
("XMLDOCUMENT(XMLQUERY('<root>{$a }</root>' passing :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 :
コマンドが完了しました。
© 2009 ISE Corporation
使用例1
• 定義後、
定義後、キャプチャ、
キャプチャ、アプライを
アプライを起動して
起動してレプリケーション
してレプリケーションを
レプリケーションを開始
C:¥work¥asnclp>db2 select c1,xmlserialize(c2 as char(50)) from t1
C:¥work¥asnclp>db2 "insert into t1 values (3,'<b>あいうえお</b>')"
DB20000I SQL コマンドが正常に完了しました。
C1
2
----------- -------------------------------------------------フルリフレッシュ後のソース
1 <a>aa</a>
C:¥work¥asnclp>db2 select c1,xmlserialize(c2 as char(50)) from t1
1 レコードが選択されました。
表とターゲット表のデータ
C:¥work¥asnclp>db2 select c1,xmlserialize(c2 as char(50)) from t1_copy
C1
2
----------- -------------------------------------------------1 <root><a>aa</a></root>
C1
----------1
2
3
2
-------------------------------------------------<a>aa</a>
<b>bb</b>
<b>あいうえお</b>
3 レコードが選択されました。
ソース表更新
C:¥work¥asnclp>db2 select c1,xmlserialize(c2 as char(50)) from t1_copy
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
----------1
2
2
-------------------------------------------------<a>aa</a>
<b>bb</b>
2 レコードが選択されました。
C1
----------1
2
3
2
-------------------------------------------------<root><a>aa</a></root>
<root><b>bb</b></root>
<root><b>あいうえお</b></root>
3 レコードが選択されました。
日本語も問題なくレプリケーションさ
れています。
C:¥work¥asnclp>db2 select c1,xmlserialize(c2 as char(50)) from t1_copy
C1
----------1
2
2
-------------------------------------------------<root><a>aa</a></root>
<root><b>bb</b></root>
変換が行われてレプリケーションさ
2 レコードが選択されました。
117
れています。
© 2009 ISE Corporation
ブランク・
ブランク・ページ
118
© 2009 ISE Corporation
フェデレーテッド・クエリーのキャンセルサポート
フェデレーテッド・クエリーのキャンセルサポート
119
© 2009 ISE Corporation
フェデレーテッド・クエリーのキャンセルサポート
当機能の目的と使用方法
目的
アプリケーションから
アプリケーションからデータソース
からデータソースで
データソースで実行中の
実行中のクエリを
クエリをキャンセルできる
キャンセルできる
使用方法と
使用方法と変更点
アプリケーションから
アプリケーションからキャンセル
からキャンセルを
キャンセルを発行する
発行する。
する。
以前の
以前のバージョンでは
バージョンでは、
では、データソースで
データソースで実行中の
実行中のクエリまで
クエリまでキャンセル
までキャンセルするこ
キャンセルするこ
とはできなかった。
とはできなかった。
使用可能な
使用可能なレベル
IRS V9.7 GA ~
対象プラットフォーム
対象プラットフォーム
(データソース
データソースが
データソースが)Linux, Unix, Windows
120
© 2009 ISE Corporation
キャンセル発行時の動作(V9.5とV9.7の比較)
V9.5までの場合
アプリケーション
ニックネーム
SQL発行
IFS
リモートSQL発行
データソース
キャンセル
データソースからの
結果が返ってくるま
で待ちになる
結果転送
V9.7の場合
アプリケーション
ニックネーム
SQL発行
キャンセル
IFS
データソースへ
データソースへキャン
セルを
セルを発行する
発行する
リモートSQL発行
データソース
キャンセル
※ 実機で確認したところ、データソースはホストでもキャンセル可
121
© 2009 ISE Corporation
force applicationによるクエリのキャンセル
$ db2 “ select * from loopview”
## クエリが実行中になる ##
V9.5
←クライアントからニックネームSQLを発行
フェデレーション・サーバーからデータソースへリモートSQLが発行される
フェデレーション・サーバーでlist applicationsを確認
$ db2 "list applications show detail“|grep db2bp
NOG95
db2bp
17842
*LOCAL.nog95.090414102544
00004 1
0
7253
Federated request pending
データソースでlist applicationsを確認
$ db2 "list applications show detail“|grep db2agent
NOG95
db2agent (FEDDB95) 0 17851
00001 1
0
5374
UOW Executing
*LOCAL.nog95.090414102724
フェデレーション・
フェデレーション・サーバーで
サーバーでforce applicationsを
applicationsを発行
$ db2 “force application (19)“
DB20000I The FORCE APPLICATION command completed successfully.
DB21024I This command is asynchronous and may not be effective immediately.
## クエリは
クエリは切断されない
切断されない##
されない
フェデレーション・サーバーでlist applicationsを確認⇒アプリケーションは切断されていない
$ db2 "list applications show detail“|grep db2bp
NOG95
db2bp
17842
*LOCAL.nog95.090414102544
00004 1
0
7253
Federated request pending
データソースでlist applicationsを確認⇒アプリケーションは切断されていない
$ db2 "list applications show detail“|grep db2agent
NOG95
db2agent (FEDDB95) 0 17851
00001 1
0
5374
UOW Executing
122
*LOCAL.nog95.090414102724
© 2009 ISE Corporation
force applicationによるクエリのキャンセル
$ db2 “ select * from loopview”
## クエリが実行中になる ##
V9.7
←クライアントからニックネームSQLを発行
フェデレーション・サーバーからデータソースへリモートSQLが発行される
フェデレーション・サーバーでlist applicationsを確認
$ db2 "list applications show detail“|grep db2bp
NOG97
db2bp
8114
00001 1
0
5631
Federated request pending
*LOCAL.nog97.090414103831
データソースでlist applicationsを確認
$ db2 "list applications show detail“|grep db2agent
NOG97
db2agent (FEDDB97) 0 8125
00001 1
0
7258
UOW Executing
*LOCAL.nog97.090414103848
フェデレーション・
フェデレーション・サーバーで
サーバーでforce applicationsを
applicationsを発行
$ db2 “force application (8114)“
DB20000I The FORCE APPLICATION command completed successfully.
DB21024I This command is asynchronous and may not be effective immediately.
## クエリが
クエリがキャンセルされ
キャンセルされ、
され、クライアントに
クライアントにメッセージが
メッセージが表示される
表示される ##
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
フェデレーション・サーバーでlist applicationsを確認⇒UOW Waitingになっている
$ db2 "list applications show detail“|grep db2bp
NOG95
db2bp
00004 1
0
7253
UOW Waiting
17842
*LOCAL.nog95.090414102544
データソースでlist applicationsを確認⇒UOW Waitingになっている
$ db2 "list applications show detail“|grep db2agent
NOG95
db2agent (FEDDB95) 0 17851
00001 1
0
5374
UOW Waiting
123
*LOCAL.nog95.090414102724
© 2009 ISE Corporation
フェデレーション・サーバーがHADR構成の時のテークオーバー時の動き
V9.5
フェデレーション・
standby
フェデレーション・サーバー:HADR
サーバー
フェデレーション・
primary
フェデレーション・サーバー:HADR
サーバー
$ db2 “start hadr on db feddb95 as standby”
$ db2 “start hadr on db feddb95 as primary”
データソース
$ db2 “connect to sample”
$ db2 +c “lock table staff in exclusive mode”
## staff表
staff表がロックされる
ロックされる ##
$ db2 “connect to feddb95”
$ db2 “select * from nickstaff”
## ニックネーム経由
ニックネーム経由で
経由でデータソースの
データソースのstaff表
staff表にアクセスするが
アクセスするが、
するが、ロッ
ク待ちになる ##
$ db2 “takeover hadr on db feddb95”
wait
## ニックネーム経由
ニックネーム経由の
経由のSQLを
SQLを実行中なので
実行中なので、
なので、アプリケーションを
アプリケーションを切断
できず、
できず、takeoverが
takeoverが待たされる
データソース
$ db2 “rollback”
## staff表
staff表へのロック
へのロックが
ロックが解放される
解放される ##
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
## staff
staff表
ff表へのアクセス
へのアクセスが
アクセスが可能になったが
可能になったが、
になったが、HADRにより
HADRによりアプリケー
によりアプリケー
ションが
ションが切断される
切断される##
される##
124
DB20000I The TAKEOVER HADR ON DATABASE command
completed successfully.
## takeoverが成功する ##
© 2009 ISE Corporation
フェデレーション・サーバーがHADR構成の時のテークオーバー時の動き
V9.7
フェデレーション・
standby
フェデレーション・サーバー:HADR
サーバー
フェデレーション・
primary
フェデレーション・サーバー:HADR
サーバー
$ db2 “start hadr on db feddb95 as standby”
$ db2 “start hadr on db feddb95 as primary”
データソース
$ db2 “connect to sample”
$ db2 +c “lock table staff in exclusive mode”
## staff表
staff表がロックされる
ロックされる ##
$ db2 “connect to feddb95”
$ db2 “select * from nickstaff”
## ニックネーム経由
ニックネーム経由で
経由でデータソースの
データソースのstaff表
staff表にアクセスするが
アクセスするが、
するが、ロッ
ク待ちになる ##
cancel
$ db2 “takeover hadr on db feddb95”
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
DB20000I The TAKEOVER HADR ON DATABASE command
completed successfully.
## takeoverが成功する ##
## HADRにより
HADRによりアプリケーション
によりアプリケーションが
アプリケーションが切断される
切断される##
される##
125
© 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 ]
←Ctrl + Cでクエリをキャンセル
SQLCancel(
SQLCancel( hStmt=1:1
hStmt=1:1 )
--->
---> Time elapsed - 0 seconds
SQLCancel(
SQLCancel( )
<--- SQL_SUCCESS Time elapsed - +1.404000E+1.404000E-003 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
## 略 ##
126
© 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 )
←Ctrl + Cでクエリをキャンセル
( 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 )
127
© 2009 ISE Corporation
Summary
• Range partition表
表のサポート
• Compression表
表のサポート
• Option to replicate Loadの
のサポート
• Multiple Restart Queue のサポート
• ConcurrentAccessResolution for Load
• XML列
列のTransformationサポート
サポート
• フェデレーテッド・
フェデレーテッド・クエリーの
クエリーのキャンセルサポート
キャンセルサポート
• Summary
128
© 2009 ISE Corporation
Fly UP