Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Oracle löscht Daten aus der entfernten SQL Server-Tabelle

Ich denke, die bessere Frage ist:Was ist der beste Weg, um Daten von SQL Server nach Oracle zu verschieben, das jede erfolgreich gelieferte Zeile aus MSSS löscht?

Sie tun dies in einer Schleife, um sicherzustellen, dass Sie beim Hinzufügen von Elementen aus dem anderen löschen.

Wenn bei der Einfügung ein unbekannter Zufallsfehler auftritt, vermeiden Sie das Entfernen des Quelldatensatzes.

Das ist das Wesentliche, richtig?

Es gibt viel bessere Möglichkeiten, diese Art von Datenbewegungen zu handhaben, als nach jeder verteilten Transaktionsschleife zum Einfügen/Löschen festzuschreiben.

Zunächst einmal ist ein Commit mitten in einer Schleife einfach schlecht. In Oracle ist dies eine gute Möglichkeit, andere Sitzungen dazu zu bringen, ORA-01555-Fehler zu erhalten. Also das würde ich nach Möglichkeit vermeiden.

Zweitens sollten Sie unbedingt wissen, was die möglichen Ursachen für vernünftige Fehler beim Einfügen sind. Sie verletzen eine Spaltenlänge, ein FK, ein UK ... es gibt eine endliche Liste dessen, was beim Einfügen kaputt gehen könnte. Große, haarige Fehler wie Unable to extend tablespace SOLLTEN dazu führen, dass das System zum Erliegen kommt. Dafür braucht man keine Falle. Aber Anwendungsprobleme, wie ich sie erwähnt habe, sind einfach zu handhaben.

Wenn ich dies schreiben würde, würde ich alle Zeilen mit Oracles LOG massenweise einfügen FEHLER IN um ein vollständiges ROLLBACK zu vermeiden, wenn nur eine/wenige Zeile(n) fehlschlagen.

Jetzt haben Sie eine Tabelle, die jede fehlerhafte Zeile und den Grund für den Fehler enthält. Jetzt können Sie auf der SQL Server-Seite alle Zeilen löschen, die NICHT IN der Liste der fehlerhaften IDs enthalten sind.

Sie haben dasselbe erreicht, aber mit mengenbasierten Operationen anstelle von SLOW-BY-SLOW, hoppla, ich meine Reihe für Reihe.