Ao testar alguns scripts de migração com uma cópia dos dados de produção (os scripts funcionam bem com os dados de desenvolvimento), encontrei uma situação curiosa. Um CONSTRAINT mudou, por isso estou emitindo comandos 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;
O comando DROP funcionou bem, mas o comando ADD falhou. Agora, estou em um círculo vicioso. Não consigo descartar a restrição porque ela não existe (a queda inicial funcionou conforme o esperado):
ORA-02443: Não é possível eliminar a restrição - restrição inexistente
E não posso criá-lo porque o nome já existe:
ORA-00955: nome já é usado por um objeto existente
Digito A_DUP_CALLE_UK1
na caixa de pesquisa do desenvolvedor SQL e ... aí está! Proprietário, nome da tabela, paisagem da tabela ... tudo corresponde: não é um objeto diferente com o mesmo nome, é a minha restrição original. A tabela aparece nos detalhes da restrição, mas a restrição não aparece nos detalhes da tabela.
Minhas perguntas:
- Qual a explicação para isso?
- Como garantir que isso não aconteça quando eu fizer a atualização real no servidor ativo?
(O servidor é 10g XE, não tenho reputação suficiente para criar a tag.)