13.2.2 検査保留状態の強制変更機能
(1) 機能概要
検査保留状態の強制変更機能は,参照制約又は検査制約の整合性を検査しないで,検査保留状態を強制的に変更する機能です。検査保留状態の強制変更機能には,検査保留状態の強制設定,又は強制解除の二つがあります。
- 検査保留状態の強制設定
-
検査保留状態の強制設定は,表の検査保留状態を強制的に検査保留状態に設定する機能です。この機能を使用する場合は,-k setを指定します。
検査保留状態の強制設定は,次の場合に適用します。
-
システム定義のpd_check_pendingオペランドの指定値をNOUSEからUSEに変更した場合,参照制約又は検査制約の制約の整合性が不明確なとき。
-
システム定義のpd_check_pendingオペランドを指定していないシステムで,バージョン07-03以降のHiRDBにバージョンアップした場合に,参照制約又は検査制約の整合性が不明確なとき。
-
一時的に,ユーザが表を操作できないように規制する場合。
-
整合性チェックの結果,制約違反があった場合に,検査保留状態の強制解除で検査保留状態を解除して,SQLで制約違反となったデータを修正した後,再度整合性チェックをするとき。
-
- 検査保留状態の強制解除
-
検査保留状態の強制解除は,表の検査保留状態を強制的に非検査保留状態に設定する(検査保留状態を解除する)機能です。この機能を使用する場合は,-k releaseを指定します。
検査保留状態の強制解除は,次の場合に適用します。
-
ユーザ側で制約の整合性を確認できていて,整合性チェックが不要な場合など,強制的に検査保留状態を解除し運用する場合。
-
参照制約で違反した行を,SQLで参照表の外部キーの更新又は削除によって修正する場合。
-
検査制約で違反した行をSQLで修正する場合。
-
(2) 検査保留状態の強制変更機能の実行単位
検査保留状態の強制変更は,表に定義された参照制約及び検査制約のすべての制約を更新対象とする「表単位」,又は一つの制約だけを更新対象とする「制約単位」に実行できます。なお,インナレプリカ機能を使用して表単位に実行する場合,オリジナルRDエリア及びレプリカRDエリアを作成したすべての世代を対象とする「全世代単位」,一つの世代だけを対象とする「世代単位」,及びカレントRDエリアの世代を対象とする「カレントRDエリアの世代単位」に実行できます。なお,制約単位で実行する場合は,全世代単位で実行します。
検査保留状態の強制変更を実行すると,ディクショナリ表の検査保留状態の情報が変更されます。ディクショナリ表の検査保留状態の変更箇所を次の表に示します。
実行単位 |
-cオプションの指定 |
表の制約 |
ディクショナリ表の検査保留状態の変更箇所 |
||||
---|---|---|---|---|---|---|---|
参照制約 |
検査制約 |
SQL_TABLES表 |
SQL_REFERENTIAL_CONSTRAINTS表 |
SQL_CHEKS表 |
|||
CHECK_PEND列 |
CHECK_PEND2列 |
CHECK_PEND列 |
CHECK_PEND2列 |
||||
表単位 |
該当しません |
なし |
あり |
− |
○ |
− |
○※1 |
あり |
なし |
○ |
− |
○※1 |
− |
||
あり |
あり |
○ |
○ |
○※1 |
○※1 |
||
制約単位 |
参照制約 |
あり |
なし |
○ |
− |
○※2 |
− |
あり |
あり |
○ |
− |
○※2 |
− |
||
検査制約 |
なし |
あり |
− |
○ |
− |
○※2 |
|
あり |
あり |
− |
○ |
− |
○※2 |
実行単位 |
-cオプションの指定 |
表の制約 |
ディクショナリ表の検査保留状態の変更箇所 |
||||
---|---|---|---|---|---|---|---|
参照制約 |
検査制約 |
SQL_TABLES表 |
SQL_REFERENTIAL_CONSTRAINTS表 |
SQL_CHEKS表 |
|||
CHECK_PEND列 |
CHECK_PEND2列 |
CHECK_PEND列 |
CHECK_PEND2列 |
||||
全世代単位,世代単位,又はカレントRDエリアの世代単位 |
該当しません |
なし |
あり |
− |
○ |
− |
○※1 |
あり |
なし |
○ |
− |
○※1 |
− |
||
あり |
あり |
○ |
○ |
○※1 |
○※1 |
||
制約単位 |
参照制約 |
あり |
なし |
○ |
− |
○※2 |
− |
あり |
あり |
○ |
− |
○※2 |
− |
||
検査制約 |
なし |
あり |
− |
○ |
− |
○※2 |
|
あり |
あり |
− |
○ |
− |
○※2 |
RDエリア中の表情報の検査保留状態の変更箇所を次の表に示します。
実行単位 |
-cオプションの指定 |
表の制約 |
RDエリア中の表情報の検査保留状態の変更箇所 |
||
---|---|---|---|---|---|
参照制約 |
検査制約 |
参照制約の状態 |
検査制約の状態 |
||
表単位 |
該当しません |
なし |
あり |
− |
○ |
あり |
なし |
○ |
− |
||
あり |
あり |
○ |
○ |
||
制約単位 |
参照制約 |
あり |
なし |
○ |
− |
あり |
あり |
○ |
− |
||
検査制約 |
なし |
あり |
− |
○ |
|
あり |
あり |
− |
○ |
実行単位 |
-cオプション指定制約 |
表の制約 |
RDエリア中の表情報の検査保留状態の変更箇所※2 |
||||||
---|---|---|---|---|---|---|---|---|---|
参照制約 |
検査制約 |
世代0(オリジナルRDエリア) |
世代1(レプリカRDエリア) |
世代n(レプリカRDエリア) |
|||||
参照制約の状態 |
検査制約の状態 |
参照制約の状態 |
検査制約の状態 |
参照制約の状態 |
検査制約の状態 |
||||
全世代単位 |
該当しません |
なし |
あり |
− |
○ |
− |
○ |
− |
○ |
あり |
なし |
○ |
− |
○ |
− |
○ |
− |
||
あり |
あり |
○ |
○ |
○ |
○ |
○ |
○ |
||
世代単位※1 |
該当しません |
なし |
あり |
− |
− |
− |
○ |
− |
− |
あり |
なし |
− |
− |
○ |
− |
− |
− |
||
あり |
あり |
− |
− |
○ |
○ |
− |
− |
||
カレントRDエリアの世代 |
該当しません |
なし |
あり |
− |
− |
− |
− |
− |
○ |
あり |
なし |
− |
− |
− |
− |
○ |
− |
||
あり |
あり |
− |
− |
− |
− |
○ |
○ |
||
制約単位 |
参照制約 |
あり |
なし |
○ |
− |
○ |
− |
○ |
− |
あり |
あり |
○ |
− |
○ |
− |
○ |
− |
||
検査制約 |
なし |
あり |
− |
○ |
− |
○ |
− |
○ |
|
あり |
あり |
− |
○ |
− |
○ |
− |
○ |
(a) 表単位
表単位の場合,定義された参照制約又は検査制約のすべてを変更対象とします。表単位で実行する場合は,-tオプションを指定します。
表単位は次の場合に適用します。
-
表に定義された参照制約及び検査制約のすべての制約について,1回のpdconstckで検査保留状態を変更する場合。
インナレプリカ機能使用時に表単位で実行する場合は,更に次の単位でも実行できます。
- 全世代単位
-
表に定義された参照制約又は検査制約すべての制約について,表を格納するオリジナルRDエリア,及びレプリカRDエリアを作成したすべての世代を変更対象とします。適用基準は表単位と同じです。全世代単位に実行する場合は,-q allを指定します。
- 世代単位
-
表に定義された参照制約又は検査制約すべての制約について,制約ごとに,-qオプションで指定した世代を変更対象とします。世代単位に実行する場合は,-qオプションで世代番号を指定します。
世代単位は,特定の世代だけ検査保留状態を変更する場合に適用します。
- カレントRDエリアの世代単位
-
表に定義された参照制約又は検査制約すべての制約について,制約ごとに,カレントRDエリアの世代を変更対象とします。カレントRDエリアの世代単位に実行する場合は,-qオプションを省略してください。
カレントRDエリアの世代単位は,pdloadなどをカレントRDエリアの世代に対して実行し,表が検査保留状態となった場合,カレント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エリアの検査保留状態
表の検査保留状態
制約の検査保留状態
検査保留状態の世代あり
遷移なし
遷移なし
すべての世代が非検査保留状態
非検査保留状態
非検査保留状態
- 制約単位での検査保留状態の強制解除
-
制約単位(全世代単位)の場合は,インナレプリカ機能を使用しない場合と同様です。