Trong khi thử nghiệm một số tập lệnh di chuyển với một bản sao của dữ liệu sản xuất (tập lệnh chạy tốt với dữ liệu phát triển) tôi thấy một tình huống tò mò. CONSTRAINT đã thay đổi nên tôi đang phát lệnh 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;
Lệnh DROP hoạt động tốt nhưng THÊM thất bại. Bây giờ, tôi vào một vòng luẩn quẩn. Tôi không thể loại bỏ các ràng buộc vì nó không tồn tại (thả ban đầu hoạt động như mong đợi):
ORA-02443: Không thể thả ràng buộc - ràng buộc không tồn tại
Và tôi không thể tạo nó vì tên đã tồn tại:
ORA-00955: tên đã được sử dụng bởi một đối tượng hiện có
Tôi gõ A_DUP_CALLE_UK1
vào hộp Tìm kiếm của Nhà phát triển SQL và ... nó đây rồi! Chủ sở hữu, tên bảng, cảnh bảng ... mọi thứ đều khớp: đó không phải là một đối tượng khác có cùng tên, đó là ràng buộc ban đầu của tôi. Bảng xuất hiện trong các chi tiết ràng buộc nhưng ràng buộc không xuất hiện trong các chi tiết của bảng.
Những câu hỏi của tôi:
- Giải thích cho điều này là gì?
- Làm cách nào tôi có thể đảm bảo điều đó sẽ không xảy ra khi tôi thực hiện nâng cấp thực sự trên máy chủ trực tiếp?
(Máy chủ là 10g XE, tôi không có đủ danh tiếng để tạo thẻ.)