12.20.3 検査保留状態
ユティリティの実行などでデータの整合性を保証できなくなった場合,HiRDBは検査制約表に対するデータ操作を制限します。このように,整合性を保証できないためにデータ操作を制限された状態を検査保留状態といいます。検査制約表を検査保留状態にして,データ操作を制限するためには,pd_check_pendingオペランドにUSEを指定するか,又はオペランドの指定を省略する必要があります。検査保留状態の表は,整合性チェックユティリティ(pdconstck)を使用して検査保留状態を解除します。整合性チェックユティリティを使用して,強制的に検査保留状態に設定することもできます。
pd_check_pendingオペランドにNOUSEを指定していると,データの整合性を保証できない場合でもデータ操作を制限しません。そのため,整合性が保証できなくなるユティリティを実行した場合は,整合性チェックユティリティで強制的に検査保留状態に設定してから,整合性を確認してください。
整合性が保証できなくなる操作については「データ操作と整合性」を,整合性の確認手順は「表の整合性確認手順」を参照してください。
(1) 検査保留状態の管理
検査保留状態はディクショナリ表と,表が格納されたRDエリアの表情報で管理しています。ディクショナリ表では表単位,及び制約単位に検査保留状態を管理し,表情報では分割表の場合はRDエリア単位に,分割表ではない場合は表単位に検査保留状態を管理します。
検査保留状態の情報が格納されている場所と内容を次の表に示します。
格納場所 |
格納されている情報 |
||
---|---|---|---|
ディクショナリ表 |
SQL_TABLES表 |
CHECK_PEND2列 |
表単位の検査制約の検査保留状態 |
SQL_CHECKS表 |
CHECK_PEND2列 |
制約単位の検査制約の検査保留状態 |
|
RDエリアの表情報 |
分割していない表の場合 |
表単位の参照制約又は検査制約の検査保留状態 |
|
分割表の場合 |
RDエリア単位の参照制約又は検査制約の検査保留状態 |
(2) 検査保留状態の表に対して制限される操作
参照制約の場合と同じです。「検査保留状態の表に対して制限される操作」を参照してください。
(3) 分割表又はインナレプリカ機能を使用している場合
参照制約の場合と同じです。「分割表又はインナレプリカ機能を使用している場合」を参照してください。ただし,「参照表」を「検査制約表」に読み替えてください。
(4) 検査保留状態を使用する場合の注意
-
pd_check_pendingオペランドの指定値をNOUSEからUSEに変更した場合,整合性チェックユティリティを使用して,検査制約表の整合性を確認する必要があります。確認手順については,「表の整合性確認手順」を参照してください。
-
pd_check_pendingオペランドにUSEを指定する場合,検査保留状態に設定される参照表及びRDエリアに対して排他が掛かるため,ユティリティ及びSQL実行時の排他資源が検査保留状態を使用しない場合とは異なります。