13.2.2 検査保留状態の強制変更機能

<この項の構成>
(1) 機能概要
(2) 検査保留状態の強制変更機能の実行単位
(3) 検査保留状態の強制設定
(4) 検査保留状態の強制解除

(1) 機能概要

検査保留状態の強制変更機能は,参照制約又は検査制約の整合性を検査しないで,検査保留状態を強制的に変更する機能です。検査保留状態の強制変更機能には,検査保留状態の強制設定,又は強制解除の二つがあります。

検査保留状態の強制設定
検査保留状態の強制設定は,表の検査保留状態を強制的に検査保留状態に設定する機能です。この機能を使用する場合は,-k setを指定します。
検査保留状態の強制設定は,次の場合に適用します。
  • システム定義のpd_check_pendingオペランドの指定値をNOUSEからUSEに変更した場合,参照制約又は検査制約の制約の整合性が不明確なとき。
  • システム定義のpd_check_pendingオペランドを指定していないシステムで,バージョン07-03以降のHiRDBにバージョンアップした場合に,参照制約又は検査制約の整合性が不明確なとき。
  • 一時的に,ユーザが表を操作できないように規制する場合。
  • 整合性チェックの結果,制約違反があった場合に,検査保留状態の強制解除で検査保留状態を解除して,SQLで制約違反となったデータを修正した後,再度整合性チェックをするとき。
検査保留状態の強制解除
検査保留状態の強制解除は,表の検査保留状態を強制的に非検査保留状態に設定する(検査保留状態を解除する)機能です。この機能を使用する場合は,-k releaseを指定します。
検査保留状態の強制解除は,次の場合に適用します。
  • ユーザ側で制約の整合性を確認できていて,整合性チェックが不要な場合など,強制的に検査保留状態を解除し運用する場合。
  • 参照制約で違反した行を,SQLで参照表の外部キーの更新又は削除によって修正する場合。
  • 検査制約で違反した行をSQLで修正する場合。

(2) 検査保留状態の強制変更機能の実行単位

検査保留状態の強制変更は,表に定義された参照制約及び検査制約のすべての制約を更新対象とする「表単位」,又は一つの制約だけを更新対象とする「制約単位」に実行できます。なお,インナレプリカ機能を使用して表単位に実行する場合,オリジナルRDエリア及びレプリカRDエリアを作成したすべての世代を対象とする「全世代単位」,一つの世代だけを対象とする「世代単位」,及びカレントRDエリアの世代を対象とする「カレントRDエリアの世代単位」に実行できます。なお,制約単位で実行する場合は,全世代単位で実行します。

検査保留状態の強制変更を実行すると,ディクショナリ表の検査保留状態の情報が変更されます。ディクショナリ表の検査保留状態の変更箇所を表13-21及び表13-22に示します。

表13-21 ディクショナリ表の検査保留状態の変更箇所(インナレプリカ機能を使用しない場合)

実行単位-cオプションの指定表の制約ディクショナリ表の検査保留状態の変更箇所
参照制約検査制約SQL_TABLES表SQL_REFERENTIAL_CONSTRAINTS表SQL_CHEKS表
CHECK_PEND列CHECK_PEND2列CHECK_PEND列CHECK_PEND2列
表単位該当しませんなしあり1
ありなし1
ありあり11
制約単位参照制約ありなし2
ありあり2
検査制約なしあり2
ありあり2
(凡例)
○:検査保留状態を変更します。
-:検査保留状態を変更しません(現在の状態を維持します)。
注※1 
表に定義されたすべての参照制約又は検査制約の検査保留状態を変更します。
注※2 
-cオプションに指定した制約だけ検査保留状態を変更します。

表13-22 ディクショナリ表の検査保留状態の変更箇所(インナレプリカ機能を使用する場合)

実行単位-cオプションの指定表の制約ディクショナリ表の検査保留状態の変更箇所
参照制約検査制約SQL_TABLES表SQL_REFERENTIAL_CONSTRAINTS表SQL_CHEKS表
CHECK_PEND列CHECK_PEND2列CHECK_PEND列CHECK_PEND2列
全世代単位,世代単位,又はカレントRDエリアの世代単位該当しませんなしあり1
ありなし1
ありあり11
制約単位参照制約ありなし2
ありあり2
検査制約なしあり2
ありあり2
(凡例)
○:検査保留状態を変更します。
-:検査保留状態を変更しません(現在の状態を維持します)。
※1 
表に定義されたすべての参照制約又は検査制約の検査保留状態を変更します。
※2 
-cオプションに指定した制約だけ検査保留状態を変更します。

RDエリア中の表情報の検査保留状態の変更箇所を表13-23及び表13-24に示します。

表13-23 RDエリア中の表情報の検査保留状態の変更箇所(インナレプリカ機能を使用しない場合)

実行単位-cオプションの指定表の制約RDエリア中の表情報の検査保留状態の変更箇所
参照制約検査制約参照制約の状態検査制約の状態
表単位該当しませんなしあり
ありなし
ありあり
制約単位参照制約ありなし
ありあり
検査制約なしあり
ありあり
(凡例)
○:検査保留状態を変更します。なお,対象となるレプリカRDエリアがない場合は「-」となります。
-:検査保留状態を変更しません(現在の状態を維持します)。

表13-24 RDエリア中の表情報の検査保留状態の変更箇所(インナレプリカ機能を使用する場合)

実行単位-cオプション指定制約表の制約RDエリア中の表情報の検査保留状態の変更箇所2
参照制約検査制約世代0(オリジナルRDエリア)世代1(レプリカRDエリア)世代n(レプリカRDエリア)
参照制約の状態検査制約の状態参照制約の状態検査制約の状態参照制約の状態検査制約の状態
全世代単位該当しませんなしあり
ありなし
ありあり
世代単位1該当しませんなしあり
ありなし
ありあり
カレントRDエリアの世代該当しませんなしあり
ありなし
ありあり
制約単位参照制約ありなし
ありあり
検査制約なしあり
ありあり
(凡例)
○:検査保留状態を変更します。なお,対象となるレプリカRDエリアがない場合は「-」となります。
-:検査保留状態を変更しません(現在の状態を維持します)。
注※1 -q 1を指定します(1世代を指定)。
注※2 表を格納するすべてのRDエリアが該当します(オリジナルRDエリア又はレプリカRDエリア)。

(a) 表単位

表単位の場合,定義された参照制約又は検査制約のすべてを変更対象とします。表単位で実行する場合は,-tオプションを指定します。

表単位は次の場合に適用します。

インナレプリカ機能使用時に表単位で実行する場合は,更に次の単位でも実行できます。

全世代単位
表に定義された参照制約又は検査制約すべての制約について,表を格納するオリジナルRDエリア,及びレプリカRDエリアを作成したすべての世代を変更対象とします。適用基準は表単位と同じです。全世代単位に実行する場合は,-q allを指定します。
世代単位
表に定義された参照制約又は検査制約すべての制約について,制約ごとに,-qオプションで指定した世代を変更対象とします。世代単位に実行する場合は,-qオプションで世代番号を指定します。
世代単位は,特定の世代だけ検査保留状態を変更する場合に適用します。
カレントRDエリアの世代単位
表に定義された参照制約又は検査制約すべての制約について,制約ごとに,カレントRDエリアの世代を変更対象とします。カレントRDエリアの世代単位に実行する場合は,-qオプションを省略してください。
カレントRDエリアの世代単位は,pdloadなどをカレントRDエリアの世代に対して実行し,表が検査保留状態となった場合,カレントRDエリアの世代だけの検査保留状態を解除するときに適用します。
(b) 制約単位

表に定義された参照制約又は検査制約のうち,一つの制約だけ変更対象とします。制約単位に実行する場合,-cオプションを指定します。また,インナレプリカ機能を使用している場合,表を格納するオリジナルRDエリア及びレプリカRDエリアを作成したすべての世代を変更対象とします。

制約単位は,個々の制約について検査保留状態を変更する場合に適用します。

(3) 検査保留状態の強制設定

表の検査保留状態,制約の検査保留状態,及びRDエリアの検査保留状態を検査保留状態に設定します。

(4) 検査保留状態の強制解除

表の検査保留状態,制約の検査保留状態,及びRDエリアの検査保留状態を非検査保留状態に設定します。なお,pdconstckの実行単位,表の検査保留状態,制約の検査保留状態,及びRDエリアの検査保留状態によって,設定内容(解除可否)が変わります。実行単位ごとの説明を次に示します。

(a) インナレプリカ機能を使用しない場合
表単位での検査保留状態の強制解除
表単位の場合,無条件に表の検査保留状態,制約の検査保留状態,及びRDエリアの検査保留状態を非検査保留状態に設定します。
制約単位での検査保留状態の強制解除
制約単位の場合,-cオプションで指定した制約の検査保留状態を非検査保留状態に設定します。また,ほかの制約の検査保留状態によって,表及びRDエリアの検査保留状態は変わらないこともあります。検査保留状態の遷移を次の表に示します。

表13-25 制約単位での検査保留状態の遷移(検査保留状態の強制解除)

条件検査保留状態(表及びRDエリア)
-cオプションに指定した制約以外の制約が定義されている場合検査保留状態の制約があるとき遷移なし
すべての制約が非検査保留状態のとき非検査保留状態
-cオプションに指定した制約だけ表に定義されている場合非検査保留状態
(b) インナレプリカ機能を使用する場合
全世代単位での検査保留状態の強制解除
全世代単位の場合,無条件に表の検査保留状態,制約の検査保留状態,及びRDエリアの検査保留状態を非検査保留状態に設定します。
世代単位又はカレントRDエリアの世代単位での検査保留状態の強制解除
世代単位又はカレントRDエリアの世代単位の場合,-qオプションに指定した世代のRDエリアの検査保留状態を,非検査保留状態に設定します。また,他世代のRDエリアの検査保留状態によって,表の検査保留状態,及び制約の検査保留状態を非検査保留状態に設定します。表の検査保留状態,及び制約の検査保留状態の遷移を次の表に示します。

表13-26 世代単位又はカレントRDエリアの世代単位の検査保留状態の遷移(検査保留状態の強制解除)

条件検査保留状態の遷移
-qオプションに指定した世代以外のRDエリアの検査保留状態表の検査保留状態制約の検査保留状態
検査保留状態の世代あり遷移なし遷移なし
すべての世代が非検査保留状態非検査保留状態非検査保留状態
制約単位での検査保留状態の強制解除
制約単位(全世代単位)の場合は,インナレプリカ機能を使用しない場合と同様です。