2012-08-16 3 views
1

Je comprends que je ne peux pas le faire facilement en étudiant des questions similaires sur stackoverflow et d'autres sites.Base de données Oracle, conversion d'un index unique en un non-unique

Cependant, je dois le faire et je suis prêt à aller avec des solutions de contournement.

J'ai essayé de créer un index non unique avec online et parallel, puis de supprimer l'ancien index unique. Cependant, il échoue en disant ORA-01408: such column list already indexed.

Comment convertir un index unique en un index non unique?

+0

Vous devrez supprimer l'ancien index puis créer le nouveau. –

+0

@BobJarvis Comment cela aura-t-il un impact sur les performances? – Haozhun

Répondre

3

Si vous ne voulez pas laisser tomber l'ancien index avant de créer le nouveau, vous pouvez tricher un peu en créant le nouvel indice avec une somme supplémentaire de colonne inutile, par exemple:

En supposant une table avec la configuration suivante :

create table mytable (id number); 

create unique index myunique on mytable (id); 

pour convertir l'index non unique:

create index temp on mytable (id, 1); 

drop index myunique; 

create index mynonunique on mytable (id); 

drop index temp; 

Dans la pratique, je ne sais pas comment cela est nécessaire - en général, je voudrais juste et recréez l'indice dans une période de faible activité, de préférence prendre l'application vers le bas.

+0

Merci pour votre réponse et votre suggestion. – Haozhun

Questions connexes