Ich habe eine Oracle-Datenbank und eine SQL Server-Datenbank. Es gibt eine Tabelle, die Inventory
enthält, die Millionen von Zeilen in beiden Datenbanktabellen enthält und weiter wächst.
Ich möchte die Oracle-Tabellendaten mit den SQL Server-Daten vergleichen, um herauszufinden, welche Datensätze in der SQL Server-Tabelle täglich fehlen.
Was ist der beste Ansatz dafür?
Ich möchte weniger Ressourcen verbrauchen, um diese Funktionalität zu erreichen, die weniger Zeit und Ressourcen benötigt.
ZB: 18 Millionen Datensätze in Oracle und 16/17 Millionen in SQL Server
Diese Situation von zwei verschiedenen Datenbanken entstehen, weil zwei verschiedene Anwendungen online und offline
BEARBEITEN : Wie wäre es, SQL Server von Oracle über Oracle Gateway mit SQL Server zu verbinden
1) Direktabfrage von Oracle an den SQL-Server, um den fehlenden Datensatz im SQL-Server zum ersten Mal zu aktualisieren.
2) Erstellen Sie einen Trigger für Oracle, der ausgeführt wird, wenn der Datensatz von Oracle gelöscht wird und gelöschter Datensatz in die neue Oracle-Tabelle eingefügt wird.
3) Erstellen Sie das SSIS-Paket, um die neu erstellte Oracle-Tabelle mit SQL Server zuzuordnen, um den SQL Server-Datensatz zu aktualisieren. Auf diese Weise müssen nur wenige Datensätze täglich über SSIS verarbeitet werden.
Was halten Sie von diesem Ansatz?
Ich würde ein SSIS-Paket erstellen und die Daten aus der Oracle-Tabelle mithilfe einer Datenfluss- / OLE DB-Datenquelle laden. Wenn Sie SQL Enterprise haben, sind die Attunity Connectors etwas schneller.
Dann würde ich den Schlüssel aus der SQL Server-Tabelle in eine Lookup-Umwandlung laden, wo ich die 2 Quellen des Schlüssels abgleichen und die nicht übereinstimmenden Zeilen in eine separate Ausgabe leiten würde.
Schließlich würde ich die Ausgabe der nicht übereinstimmenden Zeilen an einen OLE DB-Befehl leiten, um die SQL Server-Tabelle zu aktualisieren.
Dieses SSIS-Paket benötigt viel Speicher, aber da das Matching im Speicher mit minimalem IO erfolgt, wird es wahrscheinlich schneller als andere Lösungen sein. Es benötigt genügend freien Speicher, um alle Schlüssel aus der SQL Server-Tabelle zwischenzuspeichern.
SSIS hat auch den Vorteil, dass es viele andere Transformationsfunktionen zur Verfügung stellt, wenn Sie sie später brauchen.
Was Sie im Grunde tun möchten, ist die Replikation von Oracle zu SQL Server.
Sie können dies in SSIS, einem Windows-Dienst oder einer Vielzahl von Plattformen tun. Der wahre Trick ist die Verwendung des richtigen Entwurfsmusters.
Es gibt zwei allgemeine Entwurfsmuster
Sie nehmen alle Datensätze von beiden Systemen und vergleichen sie irgendwo (bisher haben wir Vorschläge zum Vergleichen in SSIS oder Vergleichen auf Oracle, aber noch keinen Vorschlag zum Vergleichen auf SQL Server, obwohl dies gültig ist )
Sie vergleichen hier 18 Millionen Datensätze, das ist eine Menge Arbeit
Sie erfassen die Änderungen im Verleger (d. h. Oracle) seit der letzten Replikation, dann übernehmen Sie diese Änderungen für den Abonnenten (d. h. SQL Server)
Sie können dies manuell tun, indem Sie Trigger und Protokolltabellen auf der Oracle-Seite implementieren und dann einen regulären ETL-Prozess (SSIS, Befehlszeilentools, Textdateien usw.) verwenden, der wahrscheinlich im SQL-Agent geplant ist, um diese auf den SQL Server anzuwenden .
Alternativ können Sie die Replikationsfunktion verwenden, um Oracle als Publisher und SQL als Abonnenten einzurichten: Ссылка
Sie müssen einige davon ausprobieren und sehen, was für Sie funktioniert.
Angesichts dieses Ziels:
Ich möchte weniger Ressourcen verbrauchen, um diese Funktionalität zu erreichen, die weniger Zeit und weniger Ressourcen benötigt
Transaktionsreplikation ist viel effizienter, aber kompliziert. Zu Wartungszwecken, mit welchen Plattformen (.Net, SSIS, Python usw.) sind Sie am besten vertraut?
Andere Alternativen:
Wenn Sie das Oracle-Gateway für SQL Server verwenden können, müssen Sie keine Daten übertragen und können die Abfrage direkt durchführen.
Wenn Sie das Oracle-Gateway nicht verwenden können, können Sie die Pentaho-Datenintegration oder ein anderes ETL-Tool verwenden, um Tabellen zu vergleichen und Ergebnisse zu erhalten. Ist einfach zu bedienen.
Ich denke, der beste Ansatz ist die Verwendung von Oracle Gateway. Folgen Sie einfach den Schritten. Ich habe ähnliche Erfahrung.
Sie können diese Anweisung beispielsweise in Ihrer Prozedur verwenden.
%Vor%Wenn beide Datenbanken online sind, werden fehlende Datensätze in den SQL-Server eingefügt. Andernfalls schlägt der Scheduler fehl oder Sie können die Prozedur manuell ausführen. Es braucht minimale Ressourcen.
Ich werde vorschlagen, eine hausgemachte ETL-Lösung zu haben.
Tags und Links sql-server database oracle ssis