Подтвердить что ты не робот

Измените ненулевой индекс на уникальный индекс

У меня есть несколько неединственных ограничений, которые я хочу изменить в уникальные ограничения (с момента создания модели данных изменились бизнес-правила). Есть ли способ сделать это без выпадения и воссоздания в качестве уникального ограничения? Я думал, что в команде alter constraint будет опция, но я ничего не нашел.

Спасибо!!

4b9b3361

Ответ 1

Вы не можете изменить ограничение так, как вы хотите, чтобы его можно было только сбросить и воссоздать. Если вы хотите сделать это без простоя, загляните в пакет DBMS_REDEFINITION.

Ответ 2

Вы не можете преобразовать неидеальный индекс в уникальный индекс.

(Трудно сказать, что не может быть сделано. Я основываю этот ответ на просмотре страницы ALTER INDEX справочника SQL, поиск слова UNIQUE и не поиск соответствующих советов. Я посмотрел 11g вместо 10g, но это, вероятно, лучше в этом случае, потому что есть несколько функций, которые существуют в 10g, но только задокументированы в 11g.)

Однако для уникального ограничения можно использовать уникальный код. Но есть некоторые соображения производительности: уникальный индекс будет меньше и быстрее.

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;

Ответ 3

В моем случае просто снимите и заново создайте индекс:

DROP INDEX index_name;
CREATE UNIQUE INDEX index_name ON table_name (col01,col02) TABLESPACE indx;