Oracle
 sql >> Database >  >> RDS >> Oracle

Oracle elimina i dati dalla tabella remota di SQL Server

Penso che la domanda migliore sia:qual è il modo migliore per spostare i dati da SQL Server a Oracle che elimina da MSSS ogni riga consegnata correttamente?

Fai questi in un ciclo per assicurarti che quando aggiungi a uno, elimini dall'altro.

Se si verifica un errore casuale sconosciuto nell'inserto, eviterai di rimuovere il record di origine.

Questo è il succo, giusto?

Esistono modi molto migliori per gestire questo tipo di movimento di dati rispetto al commit dopo ogni ciclo di transazione distribuita di inserimento/eliminazione.

Prima di tutto un commit nel mezzo di un ciclo è semplicemente negativo. In Oracle è un buon modo per far sì che altre sessioni ottengano errori ORA-01555. Quindi lo eviterei se possibile.

In secondo luogo dovresti assolutamente sapere quali sono le possibili cause di errori ragionevoli sull'inserimento. Violi la lunghezza di una colonna, un FK, un Regno Unito... c'è un elenco limitato di ciò che potrebbe interrompersi nell'inserto. Grandi interruzioni pelose come Incapace di estendere il tablespace DOVREBBE causare l'arresto del sistema. Non c'è bisogno di intrappolare per quello. Ma i problemi delle applicazioni come ho menzionato sono facili da gestire.

Se dovessi scrivere questo, inserirei in blocco tutte le righe utilizzando LOG di Oracle ERRORI IN per evitare un ROLLBACK completo quando solo una o poche righe falliscono.

Ora hai una tabella che contiene ogni riga non riuscita e il motivo per cui non è riuscita. Ora puoi sul lato SQL Server, eliminare tutte le righe NON NELL'elenco degli ID non riusciti.

Hai ottenuto la stessa cosa ma con operazioni basate su Set invece di SLOW-BY-SLOW, ooops, intendo riga per riga.