Durante il test di alcuni script di migrazione con una copia dei dati di produzione (gli script funzionano bene con i dati di sviluppo) ho trovato una situazione curiosa. Un VINCITORE è cambiato, quindi sto inviando i comandi 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;
Il comando DROP ha funzionato bene ma quello ADD non è riuscito. Ora sono in un circolo vizioso. Non riesco a eliminare il vincolo perché non esiste (il rilascio iniziale ha funzionato come previsto):
ORA-02443: Impossibile eliminare il vincolo - vincolo inesistente
E non posso crearlo perché il nome esiste già:
ORA-00955: il nome è già utilizzato da un oggetto esistente
I tipo A_DUP_CALLE_UK1
in SQL Developer di ricerca scatola e ... eccolo! Proprietario, nome tabella, tablescape ... tutto corrisponde: non è un oggetto diverso con lo stesso nome, è il mio vincolo originale. La tabella viene visualizzata nei dettagli del vincolo ma il vincolo non viene visualizzato nei dettagli della tabella.
Le mie domande:
- Qual è la spiegazione per questo?
- Come posso assicurarmi che non accada quando eseguo il vero aggiornamento nel server live?
(Il server è 10g XE, non ho abbastanza reputazione per creare il tag.)