制約違反のチェックのタイミング
即時/遅延可能
-
NOT DEFERRABLE : 即時(デフォルト) : DML文を実行した直後
-
DEFERRABLE : 遅延可能 : コミット時
遅延可能な場合の初期状態
-
INITIALLY IMMEDIATE : 即時制約として開始(デフォルト)
-
INITIALLY DEFERRABLE : 遅延制約として開始
制約の使用禁止
ALTER TABLE 表名
DISABLE {CONSTRAINT 制約名
| PRIMARY KEY
| UNIQUE (列名)}
[CASCADE];
-
使用禁止状態の制約を妥当性検査済み使用可能状態に変更すると、表がロックされ、すべてのデータの制約違反がチェックされる
-
大量データのロード時、更新時、削除時には制約を一時的に使用禁止にし、作業終了後に制約を使用可能にするとよい
-
主キー制約や一意制約を使用禁止状態にすると、その制約のもととなる一意索引は削除される
制約をENABLE VALIDATE状態に移行
-
exceptions表を作成する (utlexcpt.sql)
-
EXCEPTIONS句付きのALTER TABLE文を実行
ALTER TABLE 表名
ENABLE VALIDATE {CONSTRAINTS 制約名
| PRIMARY KEY
| UNIQUE (列名)}
EXCEPTIONS INTO 例外表名;
-
exceptioons表を問い合わせて違反データを確認、修正
-
制約を有効にする
ALTER TABLE 表名
ENABLE VALIDATE {CONSTRAINTS 制約名
| PRIMARY KEY
| UNIQUE (列名)};
制約の削除
ALTER TABLE 表名
DROP CONSTRAINT 制約名;
制約に関する情報の取得
-
DBA_CONSTRAINTS
-
CONSTRAINT_TYPE列
-
P:プライマリキー
-
R:参照整合性制約
-
C:チェックまたはNOT NULL
-
U:ユニーク
最終更新:2008年03月12日 01:17