付録B インナレプリカ機能使用時の定義系SQL

インナレプリカ機能を使用する場合の定義系SQLを実行するための条件と,注意事項について説明します。

<この節の構成>
(1) 定義系SQLを実行するための条件
(2) インナレプリカ機能を使用中に定義系SQLを実行する場合の注意事項
(3) KFPH22032-Wメッセージの出力と対処

(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エリアの状態を確認します。
  1. pdrdreflsコマンドに-tオプションを指定し,対象の表に関連するRDエリアを調べます。
    インデクスの定義を変更する場合は,インデクスを定義している表を指定します。なお,pdrdreflsコマンドで表示される関連RDエリアは,対象の表またはインデクス格納RDエリアにほかの表またはインデクスが定義されている場合,それらの情報も表示するため,実際に定義SQL文が対象とする関連RDエリアよりも範囲が広い場合があります。-aオプション指定で表示される表またはインデクス名称から対象RDエリアを判断してください。
  2. 1.で調べたRDエリアで,すべてのオリジナルRDエリアが更新可能状態であることをpddblsコマンドで確認します。
  3. 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 HASHFIXハッシュ分割表のハッシュ関数を変更×
ALTER TABLE DROP実表の列を削除×
GRANT RDAREARDエリア利用権限の付与××
ALTER TABLE CHANGE RDAREA分割表の境界値指定を変更
ALTER TABLE CHANGE COLUMNLOB列,LOB属性のログ取得種別を変更
(凡例)
○:チェックします。
×:チェックしません。

(2) インナレプリカ機能を使用中に定義系SQLを実行する場合の注意事項

定義系SQLを発行するときは,次の点に注意してインナレプリカの運用方法を決定してください。

注※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エリアの内容と表やインデクスの定義情報を一致させてください。