テーブルには複数の参照制約を定義できます。 そのようなテーブルが復元される場合には、参照制約は不整合とマークされます。 REVALIDATE REFERENCES FORは、ターゲット テーブルに対する不整合な制約を検証します。
REVALIDATE REFERENCES FORを実行しても不整合制約が残るなら、SQL文のALTER TABLE DROP INCONSISTENT REFERENCESを使用して不整合制約を除去しなければなりません。RESTOREを参照してください。
REVALIDATE REFERENCES FORは、参照制約のチェックをパスしなかったデータ行についての情報を含むエラー テーブルを作成します。
対応する参照インデックスが再び有効になった場合には、各参照制約に1つのエラー テーブルが作成されます。各エラー テーブルの名前は、参照する側(子)のテーブルの名前に参照インデックス番号を付加したものとなります。各エラー テーブルには、対応する参照する側(子)のテーブルと同じフィールド定義が格納されます。エラー テーブルに格納される行は、参照する側のテーブルで参照制約違反を引き起こした行そのもののコピーです。
REVALIDATE REFERENCES FORは、次の処理を行なって、不整合な参照インデックスを検証することができます。
- ターゲット テーブルおよびその親/子テーブルの不整合な参照インデックスを検証する
- エラー テーブルを作成する
- 参照インデックスによって指定された参照制約に失敗した行をエラー テーブルに挿入する
不整合な参照を検証することができない場合には、参照インデックスはスキップされて操作の終了時にメッセージが報告されます。
参照整合性の詳細については、<SQL基礎、B035-1141>を参照してください。
例
Employeeテーブルが復元されて、2つの不整合な参照がそのテーブルに定義されたと仮定します。 一方はEmployeeテーブルがDepartmentテーブルを参照することを示し、他方はEmployeeテーブルがProjectテーブルを参照することを示しています。
Projectテーブルは復元操作の前に除去されていて、次の文が実行要求されました。
REVALIDATE REFERENCES FOR (Employee);
EmployeeがDepartmentを参照すると指定した参照制約には、参照インデックス番号4が付いていると仮定します。次の処理が実行されます。
- エラー テーブルEmployee_4が作成され、Departmentを参照しているEmployeeのデータ行についての情報が示されます。
- EmployeeテーブルがProjectテーブルを参照していると指定している参照インデックスが、検証されます。
- EmployeeテーブルがProjectテーブルを参照していると指定している参照インデックスは、不整合のままです。 メッセージには、Employeeテーブルが不整合な参照インデックスをまだ含んでいることが報告されます。
- 次のSQL文を実行します。
ALTER TABLE EMPLOYEE DROP INCONSISTENT REFERENCES;
- エラーテーブルEmployee_4に問合わせて、Employeeテーブルのデータ行を訂正します。