En testant certains scripts de migration avec une copie des données de production (les scripts fonctionnent bien avec les données de développement), j'ai trouvé une situation curieuse. UNE CONTRAINTE a changé, donc j'émets des commandes 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;
La commande DROP a bien fonctionné mais celle ADD a échoué. Maintenant, je suis dans un cercle vicieux. Je ne peux pas supprimer la contrainte car elle n'existe pas (la suppression initiale a fonctionné comme prévu):
ORA-02443: Impossible de supprimer la contrainte - contrainte inexistante
Et je ne peux pas le créer car le nom existe déjà:
ORA-00955: le nom est déjà utilisé par un objet existant
Je tape A_DUP_CALLE_UK1
dans la boîte de recherche du développeur SQL et ... le voilà ! Propriétaire, nom de la table, tablescape ... tout matches: il n'est pas un objet différent avec le même nom, il est ma contrainte d' origine. Le tableau apparaît dans les détails de la contrainte mais la contrainte n'apparaît pas dans les détails du tableau.
Mes questions:
- Quelle en est l'explication?
- Comment puis-je m'assurer que cela ne se produira pas lorsque je ferai la mise à niveau réelle sur le serveur en direct?
(Le serveur est 10g XE, je n'ai pas assez de réputation pour créer le tag.)