付録B インナレプリカ機能使用時の定義系SQL
(1) 定義系SQLを実行するための条件
インナレプリカ機能を使用している場合,定義系SQLはオリジナルRDエリアとレプリカRDエリアの対象の表に関連するすべてのRDエリア(インデクス,LOB列,BLOB属性,およびプラグインインデクス)に対して処理を行います。
定義系SQLを実行するためには,次に示す幾つかの条件を満たしている必要があります。(b)および(c)の条件を満たしていない場合,定義系SQLはエラーになります。
- (a) 格納RDエリア名
- 指定された格納RDエリアがオリジナルRDエリアかどうか。
- (b) 対象の表と関連RDエリアのレプリカRDエリアの複製定義
- 対象の表と関連するRDエリアが複数になる場合,次の条件を満たすかどうか。
- 各RDエリアのレプリカRDエリアの定義数が同じ
- 各RDエリアのレプリカRDエリアを定義した世代が同じ
- (c) RDエリアの状態
- 対象の表と関連するRDエリアが,すべての世代(オリジナルRDエリアも含む)で定義系SQLを実行できる状態か。
- RDエリアの状態の確認手順とRDエリアの状態ごとの定義系SQLの実行可否を次に示します。
- RDエリアの状態の確認手順
- 定義系SQLを実行する前に,次の手順に従ってRDエリアの状態を確認します。
- pdrdreflsコマンドに-tオプションを指定し,対象の表に関連するRDエリアを調べます。
インデクスの定義を変更する場合は,インデクスを定義している表を指定します。なお,pdrdreflsコマンドで表示される関連RDエリアは,対象の表またはインデクス格納RDエリアにほかの表またはインデクスが定義されている場合,それらの情報も表示するため,実際に定義SQL文が対象とする関連RDエリアよりも範囲が広い場合があります。-aオプション指定で表示される表またはインデクス名称から対象RDエリアを判断してください。
- 1.で調べたRDエリアで,すべてのオリジナルRDエリアが更新可能状態であることをpddblsコマンドで確認します。
- 1.で調べたRDエリアで,レプリカRDエリアの状態をpddblsコマンドで確認します。定義系SQLを実行できる条件を次に示します。
<オリジナルRDエリアがすべてカレントRDエリアである場合>
すべてのレプリカRDエリアが,各世代内で次のどちらかの状態で統一されていること。
・更新可能な状態
・コマンド閉塞かつクローズ状態で定義処理をスキップする状態※
<オリジナルRDエリアがカレントRDエリアでない場合>
(i)pddblsコマンドに-Cオプションを指定し,1.で調べたオリジナルRDエリアののレプリカRDエリアを調べます。
(ii)pddblsコマンドの-qオプションに(i)のカレントRDエリアの世代番号を指定し,すべてのRDエリアが更新可能状態であることを確認します。
(iii)上記以外のレプリカRDエリアが,各世代内で次のどちらかの状態で統一されていること。
・更新可能な状態
・コマンド閉塞かつクローズ状態で定義処理をスキップする状態※
注※
世代の処理対象となる表に関連するすべてのRDエリアがコマンド閉塞かつクローズ状態の場合は,定義処理がスキップされます。定義処理をスキップした場合,KFPH22032-Wメッセージが出力されます。定義系SQLが正常に完了し,KFPH22032-Wメッセージが出力されている場合は,スキップした世代のRDエリアはデータディクショナリ用RDエリアの定義情報と不整合です。閉塞を解除する前にRDエリアの再作成が必要になります。詳細は「(3)KFPH22032-Wメッセージの出力と対処」を参照してください。
- RDエリアの状態ごとの定義系SQLの実行可否
- RDエリアの状態ごとの定義系SQLの実行可否を,表B-1および表B-2に示します。
表B-1 RDエリア状態ごとの定義系SQLの実行可否(オープン契機がINITIALの場合)
定義系SQL | オリジナル世代または カレントRDエリアの世代 | 左記以外のレプリカRDエリアの世代 |
---|
閉塞なし | オープン | ○ | ○ |
クローズ | × | × |
コマンド閉塞 | オープン | × | × |
クローズ | × | ○※1 |
参照可能閉塞 | オープン | × | × |
クローズ | × | × |
参照可能バックアップ閉塞 | オープン | × | × |
クローズ | × | × |
更新可能バックアップ閉塞 | オープン | ○ | ○ |
クローズ | - | - |
障害閉塞 | オープン | × | × |
クローズ | × | × |
ログレス閉塞 | オープン | × | × |
クローズ | × | × |
同期化閉塞 | オープン | ○※2 | ○※2 |
クローズ | × | × |
オン中再編成閉塞 | オープン | × | × |
クローズ | × | × |
- (凡例)
- ○:実行できます。
- ×:実行できません。
- -:該当しません。
- 注※1
- 世代の処理対象となる表に関連するすべてのRDエリアがコマンド閉塞かつクローズ状態の場合は,定義処理がスキップされます。この場合,KFPH22032-Wメッセージが出力され,閉塞を解除する前にRDエリアを再作成する必要があります。詳細は「(3)KFPH22032-Wメッセージの出力と対処」を参照してください。
- 注※2
- 排他待ちになります。
表B-2 RDエリア状態ごとの定義系SQLの実行可否(オープン契機がDEFERまたはSCHEDULEの場合)
定義系SQL | オリジナル世代または カレントRDエリアの世代 | 左記以外のレプリカRDエリアの世代 |
---|
閉塞なし | オープン | ○ | ○ |
クローズ | ○ | ○ |
コマンド閉塞 | オープン | × | × |
クローズ | × | ○※1 |
参照可能閉塞 | オープン | × | × |
クローズ | × | × |
参照可能バックアップ閉塞 | オープン | × | × |
クローズ | × | × |
更新可能バックアップ閉塞 | オープン | ○ | ○ |
クローズ | ○ | ○ |
障害閉塞 | オープン | × | × |
クローズ | × | × |
ログレス閉塞 | オープン | × | × |
クローズ | × | × |
同期化閉塞 | オープン | ○※2 | ○※2 |
クローズ | ○※2 | ○※2 |
オン中再編成閉塞 | オープン | × | × |
クローズ | × | × |
- (凡例)
- ○:実行できます。
- ×:実行できません。
- 注※1
- 世代の処理対象となる表に関連するすべてのRDエリアがコマンド閉塞かつクローズ状態の場合は,定義処理がスキップされます。この場合,KFPH22032-Wメッセージが出力され,閉塞を解除する前にRDエリアを再作成する必要があります。詳細は「(3)KFPH22032-Wメッセージの出力と対処」を参照してください。
- 注※2
- 排他待ちになります。
-
一部の定義系SQLは,それぞれのRDエリアに対してこれらの条件のどれかをチェックしてから処理を行います。チェックが発生する定義系SQLの一覧とそのチェック内容を次の表に示します。
表B-3 チェックが発生する定義系SQLの一覧とそのチェック内容
SQL文 | 内容 | チェック内容 |
---|
(a) | (b) | (c) |
---|
CREATE TABLE | 表定義 | ○ | ○ | ○ |
CREATE INDEX | インデクス定義 | ○ | ○ | ○ |
DROP INDEX | インデクス削除 | × | ○ | ○ |
DROP SCHEMA | スキーマ削除 | × | ○ | ○ |
ALTER TABLE ADD 列 | LOB列,BLOB属性を含む抽象データ型列の列追加 | ○ | ○ | ○ |
ALTER TABLE CHANGE SEGMENT REUSE | 空き領域再利用機能の適用を変更 | × | ○ | ○ |
DROP TABLE | 表削除 | × | ○ | ○ |
ALTER TABLE ADD RDAREA | ハッシュ関数によって横分割している表に対して,表格納用RDエリアを追加 | ○ | ○ | ○ |
ALTER TABLE ADD 列 | FIX表の列,NOT NULL列追加 DEFAULT句指定列追加 | × | ○ | ○ |
ALTER TABLE CHANGE [NO SPLIT | SPLIT] | 可変長文字データの格納方式を変更 | × | ○ | ○ |
ALTER TABLE CHANGE CLUSTER KEY | 実表のクラスタキーの一意性制約を変更 | × | ○ | ○ |
ALTER TABLE CHANGE HASH | FIXハッシュ分割表のハッシュ関数を変更 | × | ○ | ○ |
ALTER TABLE DROP | 実表の列を削除 | × | ○ | ○ |
GRANT RDAREA | RDエリア利用権限の付与 | ○ | × | × |
ALTER TABLE CHANGE RDAREA | 分割表の境界値指定を変更 | ○ | ○ | ○ |
ALTER TABLE CHANGE COLUMN | LOB列,LOB属性のログ取得種別を変更 | ○ | ○ | ○ |
- (凡例)
- ○:チェックします。
- ×:チェックしません。
(2) インナレプリカ機能を使用中に定義系SQLを実行する場合の注意事項
定義系SQLを発行するときは,次の点に注意してインナレプリカの運用方法を決定してください。
- 対象の表に関連するすべてのRDエリア※1は,複製定義数を一致させ,レプリカRDエリアの世代番号※2をすべてそろえて運用してください。ただし,HiRDB/パラレルサーバで表のサーバ間分割をしている場合は,複製定義数または世代番号はサーバ内でそろっていれば問題ありません。
- RDエリア内に複数の表またはインデクスがある場合は,すべての表に関連する格納RDエリアを一組にして運用してください。
- 複数の世代に定義系SQLを実行する場合は,世代数分の処理時間と排他資源が必要になります。
- レプリカRDエリアの実体がオリジナルRDエリアと別になっている状態でKFPH22032-Wメッセージが出力された場合,レプリカRDエリアの再作成が必要です。詳細は「(3)KFPH22032-Wメッセージの出力と対処」を参照してください。
- 注※1
- 関連するRDエリアの確認には,pdrdreflsコマンドを使用します。
- 注※2
- レプリカRDエリアの定義数または世代番号の確認には,pddblsコマンドを使用します。
(3) KFPH22032-Wメッセージの出力と対処
- ●出力
RDエリアがコマンド閉塞かつクローズ状態のため,定義処理をスキップするとKFPH22032-Wメッセージが出力されます。KFPH22032-Wメッセージは,一つの定義系SQL(DROP SCHEMA以外)で,該当する世代のサーバで1回出力されます。DROP SCHEMAのように複数の表を対象とする定義系SQLは,個々の表について該当する世代のサーバで1回出力します。
- ●対処
コマンド閉塞かつクローズ状態のため処理をスキップしたRDエリアは,RDエリア内の定義情報を変更していません。ペアを分離しているなど,オリジナルRDエリアの更新が自動でレプリカRDエリアに反映される状態でない場合,RDエリアの内容は,データディクショナリ用RDエリアにある表やインデクスの定義情報と不整合です。この状態でレプリカRDエリアの閉塞を解除して使用すると,SQLがエラーとなったり,RDエリアが障害閉塞したりします。
RDエリアの閉塞を解除する前に次のどちらかの方法で,RDエリアの内容と表やインデクスの定義情報を一致させてください。
- 該当するRDエリアにオリジナルRDエリア,またはカレントRDエリアをコピーし,レプリカデータベースを再作成します。この場合,コピー元とコピー先のRDエリアの構成情報(構成ファイル数,ページ長,セグメントサイズ,およびセグメント数)が不一致のときはデータベース構成変更ユティリティ(pdmod)のRDエリアの構成情報複写で実体に合わせてRDエリアの定義情報もコピーします。
- データベース構成変更ユティリティ(pdmod)で該当するRDエリアを再初期化します。再初期化するとRDエリアのデータはすべて削除されるため,データを再度登録します。