Podczas testowania niektórych skryptów migracji z kopią danych produkcyjnych (skrypty działają poprawnie z danymi programistycznymi) znalazłem ciekawą sytuację. CONSTRAINT zmieniło się, dlatego wydajemy polecenia 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;
Polecenie DROP działało dobrze, ale polecenie DODAJ nie powiodło się. Teraz jestem w błędnym kole. Nie mogę usunąć ograniczenia, ponieważ nie istnieje (początkowe upuszczenie działało zgodnie z oczekiwaniami):
ORA-02443: Nie można usunąć ograniczenia - nieistniejące ograniczenie
Nie mogę go utworzyć, ponieważ nazwa już istnieje:
ORA-00955: nazwa jest już używana przez istniejący obiekt
Piszę A_DUP_CALLE_UK1
w polu wyszukiwania dewelopera SQL i ... gotowe! Właściciel, nazwa tabeli, Tablescape ... wszystko mecze: nie jest inny obiekt o tej samej nazwie, to jest mój oryginalny ograniczenie. Tabela pojawia się w szczegółach ograniczenia, ale ograniczenie nie pojawia się w szczegółach tabeli.
Moje pytania:
- Jakie jest tego wytłumaczenie?
- Jak mogę się upewnić, że tak się nie stanie, gdy dokonam prawdziwej aktualizacji na serwerze na żywo?
(Serwer to 10 g XE, nie mam wystarczającej reputacji, aby utworzyć tag).