2012-01-18 21 views
13

Tengo algunas restricciones no exclusivas que deseo modificar en restricciones únicas (las reglas comerciales han cambiado desde que se hizo el modelo de datos). ¿Hay alguna manera de hacerlo sin dejar caer y recrear como una restricción única? Estaba pensando que habría una opción en el comando alter constraint, pero no encontré nada.Alterar un índice no único en un índice único

Gracias!

Respuesta

2

No puede modificar una restricción en la forma en que desea que solo pueda soltarla y volver a crearla. Si desea hacer esto sin tiempo de inactividad, consulte el paquete DBMS_REDEFINITION.

5

No puede convertir un índice no único en un índice único.

(Es difícil decir lo que no se puede hacer. Baso esta respuesta al mirar la página ALTER INDEX de la Referencia del lenguaje SQL, buscando la palabra ÚNICO y sin encontrar ninguna pista relevante. Miré 11g en su lugar de 10g, pero probablemente sea mejor en este caso porque hay algunas características que existen en 10g pero solo están documentadas en 11g.)

Sin embargo, puede usar un índice no exclusivo para una restricción única. Pero hay algunos performance considerations: un índice único sería más pequeño y más rápido.

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

En mi caso, simplemente quitar y volver a crear el índice:

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