Oracle約束enable validate時資料檢查
Oracle約束按約束狀態又可分為disable novalidate,disable validate,enable novalidate,enable validate. 其中disable/enable代表是否啟用約束,validate/novalidate代表啟用約束時是否對錶中原有資料作檢查。
這裡模擬生產環境中的情況,先建一張沒有約束的表,等有一定資料後建立enable novalidate約束,進而執行enable validate來規範表中所有資料,具體如下:
1. 建立原始表及資料
SQL> create table t1(
2 id number,
3 name varchar2(20));
SQL> insert into t1 values(1,'A');
SQL> insert into t1 values(1,'B');
SQL> insert into t1 values(2,'C');
SQL> insert into t1 values(3,'D');
SQL> insert into t1 values(3,'E');
SQL> insert into t1 values(4,'F');
2. 在表上建立enable novalidate主鍵
SQL> alter table t1 add constraint pk_t1 primary key (id)
2 deferrable enable novalidate;
此時主鍵已經生效,但源表中包含不符合約束的資料
3. 嘗試將約束狀態更改為 enable validate,卻發現原有資料有問題
SQL> alter table t1 enable validate constraint pk_t1;
alter table t1 enable validate constraint pk_t1
*
第 1 行出現錯誤:
ORA-02437: 無法驗證 (SCOTT.PK_T1) - 違反主鍵
4. 找出違反約束的資料,這裡採用Exceptions表儲存異常資料
SQL>@$ORACLE_HOME/rdbms/admin/utlexpt1.sql ------ 建立異常資料儲存表
SQL>alter table t1 enable validate constraint pk_t1 exceptions into exceptions; ------ 將異常資料裝入異常表
5. 根據異常表,找出對應源表中的異常資料
SQL> select id,name from t1 where rowid in(
2 select row_id from exceptions);
ID NAME
---------- --------------------
1 A
1 B
3 D
3 E
6. 修正異常資料後,將索引生效。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/21584437/viewspace-715963/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle 約束 enable validate 檢查Oracle
- oracle學習(2)-Oracle約束的關鍵字Enable/Disable/Validate/NovalidateOracle
- 修改外來鍵為validate時需要驗證資料是否符合外來鍵約束
- 使用validate驗證資料檢查資料壞塊
- 主鍵約束設定Enable Novalidate時報錯
- Oracle約束Oracle
- oracle 約束Oracle
- 【從零開始學習Oracle資料庫】(5)約束檢視與索引Oracle資料庫索引
- 資料庫常用約束資料庫
- sql: 查詢約束SQL
- Oracle資料庫開發——表(資料完整性約束)Oracle資料庫
- Oracle定義約束 外來鍵約束Oracle
- 通過大容量匯入操作控制約束檢查
- MySQL——表的約束,資料型別,增刪查改MySql資料型別
- 啟用約束時使用exceptions表來跟蹤不符合約束的資料並修正Exception
- oracle中的約束Oracle
- oracle 約束詳解Oracle
- Oracle約束簡介Oracle
- oracle鍵約束控制Oracle
- oracle 安裝資料庫時 檢查 nobody 使用者Oracle資料庫
- 查詢oracle表的資訊(表,欄位,約束,索引)Oracle索引
- oracle資料庫巡檢(二)全面檢查Oracle資料庫
- disable/enable validate/novalidate 的區別
- 【SQL】15 SQL 約束(Constraints)、NOT NULL 約束、UNIQUE 約束、PRIMARY KEY 約束、FOREIGN KEY 約束、CHECK 約束、DEFAULT約束SQLAINull
- oracle 註釋和約束Oracle
- 新增/刪除約束(Oracle)Oracle
- oracle的延遲約束Oracle
- 約束:確保資料的完整性(主鍵,唯一,檢查,預設,非空,外來鍵)
- 南大通用GBase 8s資料庫的約束查詢資料庫
- Constraint State(disable/enable validate/noalidate)AI
- 漫談Oracle資料庫健康檢查Oracle資料庫
- Oracle資料庫健康檢查常用SQLOracle資料庫SQL
- Oracle資料庫中Constraint約束的四對屬性Oracle資料庫AI
- 【從零開始學習 MySql 資料庫】(5) 約束檢視與索引MySql資料庫索引
- Oracle 11g系列:約束Oracle
- 修改oracle的約束欄位Oracle
- 資料庫中欄位資料型別以及約束資料庫資料型別
- 暑期自學 Day 11 | 資料庫 (四)- 約束資料庫