2016-07-29 6 views
0

Ich habe eine Oracle Datawarehouse, die eine große Menge an Daten enthält (rund 11 Millionen Zeilen) und möchten diese Daten täglich in SQL Server-Datenbank extrahieren.Importieren von Daten von Oracle Datawarehouse zu SQL Server über SSIS 2008

SSIS Package

Ich habe ein Paket zu importierenden Daten von Oracle SQL Server erstellt langsam ändernden Dimensionen unter Verwendung aber es um 600 Zeilen pro Sekunde verarbeitet.

Ich brauche mein Paket, um nur neue Datensätze einzufügen, ohne zu aktualisieren oder etwas zu alten Aufzeichnungen zu tun, da die Daten riesig sind.

Gibt es eine Möglichkeit, dies sehr schnell mit anderen Datenflusselementen zu tun?

+0

Wir verwenden Attunity-Oracle-Konnektoren für SSIS anstelle von Standard OleDb. Versuchen Sie sie und sehen Sie, ob die Leistung gesteigert wird: https: //www.microsoft.com/en-us/download/details.aspx? Id = 44582 – vercelli

+0

vielleicht sollten Sie eine Suche in der MSSQL-Zieltabelle versuchen und die nicht übereinstimmenden Zeilen zur Zieltabelle umleiten. – vercelli

+0

Oder Sie können alle Zeilen von Oracle in eine Staging-Tabelle in MSSQL kopieren und aus dieser Staging-Tabelle einfügen. – vercelli

Antwort

0

Sie könnten versuchen, einen Merge-Join in SSIS zu verwenden, dies sollte einen Vergleich ermöglichen, bei dem nur neue Datensätze eingefügt werden. Außerdem mag ich es nicht, nur datetime zu verwenden, wenn ich festlege, welche Daten eingefügt werden und was nicht, ich denke, das hängt von den Quelldaten ab. Klingt, als gäbe es kein sequenzielles ID-Feld für die Oracle-Quelldaten? Wenn ja, würde ich das und datetime in Kombination dafür verwenden, welche Daten eingefügt werden sollen. Dies könnte in SQL oder SSIS erfolgen.

+0

Ja, ich habe eine Schlüsselspalte, die ein Primärschlüssel und einzigartig ist, bitte einige Schritte zur Verfügung stellen –

0

600/Sek. Ist in Ihrem Fall nicht schlecht. Wenn man davon ausgeht, dass diese 11 Millionen während nur 1 Jahr gesammelt wurden. Das bedeutet, dass die Anzahl der neuen Datensätze nur 30 K pro Tag beträgt. Das ist etwa 1 Minute zu laufen.

Das größte Problem besteht darin, Datensätze zum Einfügen zu identifizieren.
Wenn Sie Timestamp oder sequenzielle ID benötigen, um die zuletzt eingefügten Datensätze zu identifizieren.

Falls Ihre ID nicht sequentiell ist, können Sie versuchen, das SSIS ONLY ID-Feld aus der Oracle-Tabelle zu extrahieren und es mit dem vorhandenen Dataset zu vergleichen und dann von Oracle nur die neuesten Datensätze anzufordern.

Wenn Sie diese Felder nicht haben, können Sie alle 11 Millionen Datensätze extrahieren, dann Hash auf beiden Seiten generieren und diese Hashwerte vergleichen, um zu wissen, welche neuen Werte eingefügt werden sollen.

+0

Ich habe einen Zeitstempel auf der Quellseite abgelegt, also muss ich nach dem erstmaligen Laden eine Abfrage schreiben, um bestimmte Daten zu ziehen? –

+0

Sie müssen den MAX-Zeitstempelwert jedes Mal extrahieren, wenn Sie Daten hochladen möchten, und dann nur Datensätze zwischen alten und neuen Werten extrahieren. Speichern Sie dann den neuen Wert für das nächste Mal. –