13.13.11 参照制約及び検査制約を使用している場合の運用
(1) 被参照表に対して分割格納条件を変更する場合
分割格納条件の変更時は,表のデータが削除されることがあります。このため,被参照表の分割格納条件を変更した場合は,被参照表と参照表の整合性が保証されません。
分割時のWITHOUT PURGEが適用できる場合に限り,表のデータは削除されません。しかし,「分割後の格納条件に合わないデータが残った場合の回復手順」で示したとおり,分割格納条件の変更後に格納条件に合わないデータがあった場合,そのデータは検索できなくなり,参照表のデータと不整合が発生します。例を次に示します。
- 〔説明〕
-
-
被参照表のR03に「2004-12-30」のデータがあり,参照表にも「2004-12-30」のデータがあるとします。この場合,参照制約の整合性はとれています。
-
WITHOUT PURGEを指定した場合,「2001-12-31〜2002-12-31」のデータを格納するR03に「2004-12-30」のデータが残った状態となります。この場合,被参照表の「2004-12-30」のデータは検索できなくなり,参照制約の整合性はとれなくなります。
-
システム定義のpd_check_pending=USE指定時に,被参照表に対して分割格納条件の変更をした場合,WITHOUT PURGEの指定に関係なく,参照表はすべて検査保留状態となります。また,pd_check_pending=NOUSE指定時には,参照表は非検査保留状態となります。そのため,分割格納条件の変更後は,表の整合性を確認し,検査保留状態を解除する必要があります。詳細については,マニュアル「HiRDB システム導入・設計ガイド」を参照してください。
(2) 参照表に対して分割格納条件を変更する場合
参照表に対して分割格納条件を変更する場合の運用について説明します。
-
システム定義でpd_check_pending=USEを指定している場合
参照表に対して分割格納条件を変更した場合,表のデータが削除されたRDエリアは非検査保留状態となります。これに伴って,該当表を格納している全RDエリアが非検査保留状態となる場合,該当表の検査保留状態は解除されます(SQL_TABLES表のCHECK_PEND列,及びSQL_REFERENTIAL_CONSTRAINTS表のCHECK_PEND列の値がナル値になります)。
-
システム定義でpd_check_pending=NOUSEを指定している場合
参照表に対して分割格納条件を変更した場合,表のデータが削除されたRDエリアは非検査保留状態となります。
(3) 検査制約を定義した表に対して分割格納条件を変更する場合
検査制約を定義した表に対して分割格納条件を変更する場合の運用について説明します。
-
システム定義でpd_check_pending=USEを指定している場合
検査制約を定義した表に対して分割格納条件を変更した場合,表のデータが削除されたRDエリアは非検査保留状態となります。これに伴って,該当表を格納している全RDエリアが非検査保留状態となる場合,該当表の検査保留状態は解除されます(SQL_TABLES表のCHECK_PEND2列,及びSQL_CHECKS表のCHECK_PEND2列の値がナル値になります)。
-
システム定義でpd_check_pending=NOUSEを指定している場合
検査制約を定義した表に対して分割格納条件を変更した場合,表のデータが削除されたRDエリアは非検査保留状態となります。