2012-01-18 13 views
13

Mam kilka nieunikalnych ograniczeń, które chcę zmienić w unikalne ograniczenia (reguły biznesowe zmieniły się od czasu utworzenia modelu danych). Czy istnieje sposób, aby zrobić to bez upuszczania i odtwarzania jako wyjątkowego ograniczenia? Myślałem, że będzie opcja w poleceniu alter constraint, ale nic nie znalazłem.Zmienianie nieunikalnego indeksu na unikalny indeks

Dzięki!

Odpowiedz

2

Nie można modyfikować ograniczenia w taki sposób, w jaki tylko chcesz, możesz go upuścić i ponownie utworzyć. Jeśli chcesz to zrobić bez przestojów, spójrz na pakiet DBMS_REDEFINITION.

5

Nie można skonwertować nieunikalnego indeksu do unikalnego indeksu.

(Trudno powiedzieć, czego nie można zrobić. Opieram tę odpowiedź na stronie ALTER INDEX w podręczniku SQL Language Reference, szukając słowa UNIQUE i nie znajdując żadnych istotnych wskazówek. 10 g, ale to jest prawdopodobnie lepsze w tym przypadku, ponieważ istnieje kilka funkcji, które istnieją w 10g, ale są udokumentowane tylko w 11g.)

Można jednak użyć nieunikalnego indeksu dla unikalnego ograniczenia. Ale istnieje kilka performance considerations: unikalny indeks będzie mniejszy i szybszy.

create table my_table(a number); 

create index my_table_index on my_table(a); 

alter table my_table add constraint my_table_unique unique (a) 
    using index my_table_index; 
2

W moim przypadku, po prostu nie spaść i ponownie utworzyć indeks:

DROP INDEX index_name; 
CREATE UNIQUE INDEX index_name ON table_name (col01,col02) TABLESPACE indx; 
Powiązane problemy