Beim Testen einiger Migrationsskripte mit einer Kopie der Produktionsdaten (Skripte funktionieren einwandfrei mit Entwicklungsdaten) stieß ich auf eine merkwürdige Situation. Ein CONSTRAINT hat sich geändert, daher gebe ich DROP + ADD-Befehle aus:
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;
Der DROP-Befehl hat gut funktioniert, aber der ADD-Befehl ist fehlgeschlagen. Jetzt bin ich in einem Teufelskreis. Ich kann die Einschränkung nicht löschen, da sie nicht vorhanden ist (anfängliches Löschen hat wie erwartet funktioniert):
ORA-02443 - Einschränkung kann nicht gelöscht werden - Nicht vorhandene Einschränkung
Und ich kann es nicht erstellen, weil der Name bereits existiert:
ORA-00955: Name wird bereits von einem vorhandenen Objekt verwendet
Ich tippe A_DUP_CALLE_UK1
in dem SQL Developer Suchfeld und ... da ist es! Eigentümer, Tabellenname, Tabellenumfeld ... alles passt zusammen: Es ist kein anderes Objekt mit demselben Namen, es ist meine ursprüngliche Einschränkung. Die Tabelle wird in den Details der Einschränkung angezeigt, aber die Einschränkung wird nicht in den Details der Tabelle angezeigt.
Meine Fragen:
- Was ist die Erklärung dafür?
- Wie kann ich sicherstellen, dass dies nicht passiert, wenn ich ein echtes Upgrade in Live Server durchführe?
(Server ist 10g XE, ich habe nicht genug Reputation, um das Tag zu erstellen.)