付録B.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エリアの再作成が必要になります。詳細は「KFPH22032-Wメッセージの出力と対処」を参照してください。
-
- RDエリアの状態ごとの定義系SQLの実行可否
-
RDエリアの状態ごとの定義系SQLの実行可否を,表「RDエリア状態ごとの定義系SQLの実行可否(オープン契機がINITIALの場合)」および表「RDエリア状態ごとの定義系SQLの実行可否(オープン契機がDEFERまたはSCHEDULEの場合)」に示します。
表B‒1 RDエリア状態ごとの定義系SQLの実行可否(オープン契機がINITIALの場合) 定義系SQL
オリジナル世代または
カレントRDエリアの世代
左記以外のレプリカRDエリアの世代
閉塞なし
オープン
○
○
クローズ
×
×
コマンド閉塞
オープン
×
×
クローズ
×
○※1
参照可能閉塞
オープン
×
×
クローズ
×
×
参照可能バックアップ閉塞
オープン
×
×
クローズ
×
×
更新可能バックアップ閉塞
オープン
○
○
クローズ
−
−
障害閉塞
オープン
×
×
クローズ
×
×
ログレス閉塞
オープン
×
×
クローズ
×
×
同期化閉塞
オープン
○※2
○※2
クローズ
×
×
オンライン再編成閉塞
オープン
×
×
クローズ
×
×
表B‒2 RDエリア状態ごとの定義系SQLの実行可否(オープン契機がDEFERまたはSCHEDULEの場合) 定義系SQL
オリジナル世代または
カレントRDエリアの世代
左記以外のレプリカRDエリアの世代
閉塞なし
オープン
○
○
クローズ
○
○
コマンド閉塞
オープン
×
×
クローズ
×
○※1
参照可能閉塞
オープン
×
×
クローズ
×
×
参照可能バックアップ閉塞
オープン
×
×
クローズ
×
×
更新可能バックアップ閉塞
オープン
○
○
クローズ
○
○
障害閉塞
オープン
×
×
クローズ
×
×
ログレス閉塞
オープン
×
×
クローズ
×
×
同期化閉塞
オープン
○※2
○※2
クローズ
○※2
○※2
オンライン再編成閉塞
オープン
×
×
クローズ
×
×
一部の定義系SQLは,それぞれのRDエリアに対してこれらの条件のどれかをチェックしてから処理を行います。チェックが発生する定義系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属性のログ取得種別を変更 |
○ |
○ |
○ |