Mientras probaba algunos scripts de migración con una copia de los datos de producción (los scripts funcionan bien con los datos de desarrollo), encontré una situación curiosa. Una CONSTRAINT ha cambiado, así que estoy emitiendo comandos DROP + ADD:
ALTER TABLE A_DUP_CALLE
DROP CONSTRAINT A_DUP_CALLE_UK1;
ALTER TABLE A_DUP_CALLE
ADD CONSTRAINT A_DUP_CALLE_UK1 UNIQUE (
CONTROL_ID,
CALLE_AYTO_DUPL
)
ENABLE;
El comando DROP funcionó bien pero el ADD falló. Ahora estoy en un círculo vicioso. No puedo descartar la restricción porque no existe (la caída inicial funcionó como se esperaba):
ORA-02443: No se puede eliminar la restricción: restricción inexistente
Y no puedo crearlo porque el nombre ya existe:
ORA-00955: el nombre ya lo utiliza un objeto existente
Escribo A_DUP_CALLE_UK1
en el cuadro de búsqueda del desarrollador SQL y ... ¡ahí está! Propietario, nombre de la tabla, tablescape ... todo coincide: no es un objeto diferente con el mismo nombre, es mi restricción original. La tabla aparece en los detalles de la restricción, pero la restricción no aparece en los detalles de la tabla.
Mis preguntas:
- ¿Cuál es la explicación de esto?
- ¿Cómo puedo asegurarme de que no sucederá cuando realizo la actualización real en el servidor en vivo?
(El servidor es 10g XE, no tengo suficiente reputación para crear la etiqueta).