アットウィキロゴ

整合性制約の管理

制約違反のチェックのタイミング

即時/遅延可能

  • NOT DEFERRABLE : 即時(デフォルト) : DML文を実行した直後
  • DEFERRABLE : 遅延可能 : コミット時

遅延可能な場合の初期状態

  • INITIALLY IMMEDIATE : 即時制約として開始(デフォルト)
  • INITIALLY DEFERRABLE : 遅延制約として開始

制約の使用禁止

ALTER TABLE 表名
DISABLE {CONSTRAINT 制約名
          | PRIMARY KEY
        | UNIQUE (列名)}
[CASCADE];   
  • 使用禁止状態の制約を妥当性検査済み使用可能状態に変更すると、表がロックされ、すべてのデータの制約違反がチェックされる
  • 大量データのロード時、更新時、削除時には制約を一時的に使用禁止にし、作業終了後に制約を使用可能にするとよい
  • 主キー制約や一意制約を使用禁止状態にすると、その制約のもととなる一意索引は削除される

制約をENABLE VALIDATE状態に移行

  1. exceptions表を作成する (utlexcpt.sql)
  2. EXCEPTIONS句付きのALTER TABLE文を実行
    ALTER TABLE 表名
    ENABLE VALIDATE {CONSTRAINTS 制約名
                       | PRIMARY KEY
                    | UNIQUE (列名)}
    EXCEPTIONS INTO 例外表名;
    
  3. exceptioons表を問い合わせて違反データを確認、修正
  4. 制約を有効にする
    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