web-dev-qa-db-ja.com

一意でないインデックスを一意のインデックスに変更する

一意の制約に変更したい非一意の制約がいくつかあります(データモデルが作成されてからビジネスルールが変更されました)。一意の制約としてドロップして再作成せずにそれを行う方法はありますか? alter constraintコマンドにオプションがあると思っていましたが、何も見つかりませんでした。

ありがとう!

13
jworrin

制約を削除して再作成することしかできないように制約を変更することはできません。ダウンタイムなしでこれを実行したい場合は、 DBMS_REDEFINITION パッケージを調べてください。

3
John Doyle

一意でないインデックスを一意のインデックスに変換することはできません。

(何ができないかを言うのは難しいです。この答えは、SQL言語リファレンスの ALTER INDEX ページを見て、Word UNIQUEを検索し、関連するヒントが見つからないことに基づいています。I 10gではなく11gを調べましたが、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;
5
Jon Heller

私の場合は、インデックスを削除して再作成するだけです。

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