2014-05-21 46 views
2

在Oracle 11g中,當一個創建一個唯一約束:如何導入Oracle數據庫與維護索引約束關係

alter table abc add constraint uk_name unique (name); 

隨後也對該列創建唯一索引。當出現這種約束時:

alter table abc drop constraint uk_name; 

然後也丟棄相應的索引。但是,如果在約束之前單獨創建索引,並且稍後創建約束 - 約束將正常工作,並使用預先存在的索引,但是,如上所述刪除約束時,索引不會被刪除。

現在,當執行數據庫導入時,索引會在約束之前創建,所以在刪除約束之後,相應的索引不會被刪除 - 這會導致數據庫的狀態不同,如果有人編寫了一些遷移腳本,他們將離開未刪除的索引,這可能會導致錯誤。有一種可能的解決方法,而不是:

alter table abc drop constraint uk_name; 

寫:

alter table abc drop constraint uk_name keep index; 
drop index uk_name; 

,但我想知道,如果有可能,以及如何執行與維護這一約束指數關係數據庫導入?所以如果在數據庫A上它認爲在刪除約束之後索引將被刪除,然後在導入到數據庫B之後應該保持相同。 Oracle數據庫是如此成熟的技術,應該是可能的,並且不需要討厭的解決方法,是的?

編輯:

我發現的,而不是

alter table abc drop constraint uk_name keep index; 
drop index uk_name; 

一個可以只寫:

alter table abc drop constraint uk_name drop index; 

這是mutch不太難看的解決方法..

回答