Під час тестування деяких сценаріїв міграції з копією виробничих даних (сценарії справні із даними про розробку) я виявив цікаву ситуацію. CONSTRAINT змінився, тому я видаю команди 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;
Команда DROP спрацювала нормально, але додавання не вдалося. Тепер я перебуваю в порочному колі. Я не можу скинути обмеження, оскільки воно не існує (початкове падіння працювало як очікувалося):
ORA-02443: Неможливо скинути обмеження - неіснуюче обмеження
І я не можу створити його, оскільки ім'я вже існує:
ORA-00955: ім'я вже використовується існуючим об'єктом
Я A_DUP_CALLE_UK1
набираю поле пошуку для розробника SQL і ... ось воно! Власник, ім'я таблиці, Tablescape ... все збігається: це не інший об'єкт з тим же ім'ям, що це моє первинне обмеження. Таблиця відображається в деталях обмеження, але обмеження не відображається в деталях таблиці.
Мої запитання:
- Яке пояснення цьому?
- Як я можу впевнитись, що цього не відбудеться, коли я здійснять реальне оновлення на живому сервері?
(Сервер 10g XE, мені не вистачає репутації для створення тегу.)