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