2011-01-13 4 views
2

Ich habe zwei SQL-Server: MyServer und TheirServer. Ich habe nicht die Möglichkeit, diese beiden Server zu verbinden.Tabelle kopiert von einem SQL Server zu einem anderen - Kann verknüpft sie nicht

Ich möchte alle Daten aus einer Tabelle erhalten auf TheirServer und kopieren Sie sie in MyServer auf einer täglichen Basis. Die aktuelle Anzahl der Datensätze in der Tabelle ist über 600k und wird langsam zunehmen. Die Tabellen sind identisch, Spaltennamen und Datentypen.

Mein erster Gedanke war, zu versuchen, eine Datentabelle mit einer Select * Abfrage TheirServer zu füllen, und dann versuchen, ein SQLBulkCopy in MyServer. Dies verursacht natürlich eine System.OutOfMemoryException auf dem Webserver. Mit diesem Gedankengang ist mein nächster Angriffsplan, eine SQLDataReader zu verwenden, um 50k Datensätze gleichzeitig zu ziehen, dann zu lesen und BulkCopy diese Datensätze zu spülen, zu spülen und zu wiederholen. Bevor ich das tat, dachte ich, ich würde sehen, ob ich das falsch mache.

Hinweis: Da ich nur nach einer Best Practice frage, ist es mir egal, ob der Code in C# oder VB ist oder ob überhaupt Code vorhanden ist.

Antwort

3

Die Befehlszeile (Shell) ist dein Freund. Überprüfen Sie die bcp utility.

Verwendung für Ihr Szenario ist ziemlich einfach:

bcp src-database.dbo.src-table out "c:\work\datafile.dat" -S srcSQLServerInstance -E -n 
bcp tgt-database.dbo.tgt-table int "c:\work\datafile.dat" -S tgtSQLServerInstance -E -n 

Sie werden das Ziel (Target) Tabelle vor dem Laden in den neuen Datenabfall müssen gestutzt.

Dies kann alles in einer * .cmd Batch-Datei getan und geplant werden.

Alternativ können Sie ein SSIS- oder DTS-Paket schreiben, um dasselbe zu erreichen und es in SQL Server zu planen.

Ich selbst mag es, ein Skript zu haben, das leicht debuggt/getestet werden kann.

+0

Testen Sie dies jetzt. Die bisherigen Ergebnisse: 606815 Zeilen kopiert. Netzwerkpaketgröße (Bytes): 4096 Uhrzeit (ms.) Insgesamt: 92297 Durchschnitt: (6574,59 Zeilen pro Sekunde) – zeroef

+0

Das war überraschend einfach! Vielen Dank – zeroef

Verwandte Themen