11.20.5 表の整合性確認手順
データの整合性確認手順の概要を次の図に示します。
pd_check_pendingオペランドの指定値がUSE又は省略の場合
-
検査保留状態の表の特定
ディクショナリ表のSQL_TABLES表を検索して,検査保留状態の表名を検出します。
SELECT TABLE_SCHEMA, TABLE_NAME FROM MASTER.SQL_TABLES WHERE CHECK_PEND = 'C' OR CHECK_PEND2 = 'C'
検索結果には,検査保留状態の表の所有者と検査保留状態の表名が返されます。検索結果が0行の場合,検査保留状態の表はありません。
なお,インナレプリカ機能使用時に,各世代の表が検査保留状態かどうかを確認するためには,状態解析ユティリティ(pddbst)を使用します。
-
整合性チェックユティリティを使用した整合性チェック
整合性チェックユティリティで表単位の整合性チェックを実行し,制約違反データがあれば修正します。検査保留状態の表がなくなるまで整合性チェックを繰り返し,なくなれば終了です。整合性チェックユティリティを使用した整合性確認手順については,「検査保留状態を使用する場合の整合性確認手順(検査制約)」を参照してください。
pd_check_pendingオペランドの指定値がNOUSEの場合
-
整合性チェックをする表を特定し,強制的に検査保留状態に設定
整合性チェックをする表を特定するために,整合性を保証できなくなる操作をした表に検査照制約が定義されているかどうかを確認します。これを確認するSQLの実行例を次に示します。
SELECT N_CHECK FROM MASTER.SQL_TABLES WHERE TABLE_SCHEMA = '対象表の所有者名' AND TABLE_NAME = '対象表の表名'
次の検索結果が返されます。
-
検査制約の定義数
N_CHECKがナル値の場合,対象表に検査制約は定義されていません。
表を特定したら,整合性チェックユティリティを使用して,その表を強制的に検査保留状態に設定します(検査保留状態でない表は,整合性チェックユティリティでチェックできません)。
-
-
整合性チェックユティリティを使用した整合性チェック
pd_check_pendingオペランドの指定値がUSE又は省略の場合の手順2.と同じです。整合性チェックユティリティを使用した整合性確認手順は,参照制約の場合と同じのため,「検査保留状態を使用しない場合の整合性確認手順」を参照してください。
- 〈この項の構成〉
(1) 検査保留状態を使用する場合の整合性確認手順(検査制約)
pd_check_pendingオペランドの指定値がUSE又は省略の場合の,整合性チェックユティリティを使用した整合性確認手順を次の図に示します。
-
確認する表の整合性チェック
表単位,又は制約単位に整合性チェックをします。
インナレプリカ機能を使用している場合,確認する表の世代番号を指定します。インナレプリカ機能を使用していない場合,又は全世代に整合性チェックを実行する場合,世代番号の指定は不要です。
-
制約違反有無判定
手順1.の整合性チェック結果で,制約違反データの有無を判定します。
-
違反データの修正方法
違反データの修正をユティリティで行うか,SQLで行うかを選択します。ユティリティで行う場合,手順6.へ進んでください。
-
確認する表の操作抑止
整合性が保証できない表を使用する業務の運用を停止します。
-
確認する表の検査保留状態を強制解除
制約違反の対策をするため,検査保留状態を強制解除します。
-
制約違反の対策
- ユティリティで修正する場合
-
対策方法を次に示します。対策後,手順1.に戻り,整合性チェックを実行し,違反データがないことを確認し,終了します。
条件
対策方法
検査制約の定義で指定した探索条件を修正する場合
手順を次に示します。
-
表のデータをすべてアンロードします。
-
DROP TABLEで表の定義を削除します。
-
CREATE TABLEで表を再定義します。このとき,検査制約の定義に正しい探索条件を指定します。
-
1.でアンロードしたデータをロードします。
表に制約違反データがある場合
-
データベース作成ユティリティ(pdload)の作成モードで正しいデータをロードします。
-
データベース再編成ユティリティ(pdrorg)のUOCを使用した削除で不要なデータを削除します。
-
- SQLで修正する場合
-
対策方法を次に示します。対策後,手順7.に進みます。
条件
対策方法
検査制約の定義で指定した探索条件を修正する場合
ユティリティで修正する場合と同じです。
表に制約違反データがある場合
制約違反データをDELETE文で削除,又は,UPDATE文で正しい値に更新します※。
- 注※
-
対策する表を被参照表とする参照表が存在する場合,修正順序に注意が必要です。例えば,次のような関係があるとします。
●CHK1の制約違反の対策をする場合の注意
表T1のデータをDELETE文で修正する場合,REF1でON DELETE RESTRICTを指定しているときは,対応する表T2のデータを先に削除後,表T1のデータを削除してください。また,UPDATE文で修正する場合,REF1でON UPDATE RESTRICTを指定しているときは,更新前のデータに対応する表T2のデータを削除後,表T1のデータを更新してください。
-
違反があった制約を強制的に検査保留状態に設定
整合性チェックユティリティを制約単位で実行し,対策をした制約を強制的に検査保留状態に設定します。
-
確認する表の操作抑止解除
運用を停止していた業務を再開します。手順1.に戻り,整合性チェックを実行し,違反データがないことを確認します。
-
確認する世代の有無
複数世代のレプリカRDエリアを作成している場合,又は世代単位の整合性チェックを実行した場合,手順1.に戻り,各世代で整合性チェックを実行します。