Wie verschiebe ich eine ziemlich große tsql-Tabelle von einem Server auf einen anderen Server?

7

Ich habe darüber nachgedacht, wie eine 40-GB-Tabelle von einer SQL Server-Box in eine andere SQL Server-Box verschoben werden kann. Sie befinden sich in separaten Unternehmen ohne Intranet-Verknüpfung und offensichtlich ohne Verbindungsserver.

Anfangs dachte ich, der schnellste Weg, dies zu tun, wäre, die nächtliche Sicherungsdatei abzurufen und auf den anderen Server zu übertragen. Erstellen Sie eine Datenbank aus der Sicherung und übertragen Sie dann meine Tabelle aus dieser Datenbank in die vorhandene.

Nachdem ich darüber nachgedacht habe, kann ich aus Sicherheitsgründen nicht alle Daten in dieser bestimmten Datenbank des anderen Unternehmens haben. Während die Tabelle, nach der ich suche, rechnerisch ist und nichts mit einem unternehmensspezifischen Wettbewerbsvorteil zu tun hat.

In beiden Fällen suche ich nach einer Möglichkeit, eine Tabelle dieser Größe schnell und effizient zu exportieren und in eine Datenbank zu übertragen, die in keiner Weise mit der vorhandenen Datenbank verbunden ist.

Ich recherchiere zum ersten Mal etwas in dieser Richtung und bin mir ziemlich sicher, dass ich die Tabelle nicht mit Skripten versehen möchte. Anfangs dachte ich, die Bak-Datei sei meine beste Wahl, kann aber nicht die gesamte Datenbank erstellen.

Benutzer Smith
quelle
1
Als Alternative kann auch bcp out im nativen Modus und das Masseneinfügen in den SQL Server in Betracht gezogen werden.
Kin Shah

Antworten:

9

Ein paar mögliche Optionen in der Reihenfolge meiner Präferenz:

Option 1

  1. Erstellen Sie lokal eine neue, leere Datenbank. Machen Sie die Protokolldatei möglicherweise zumindest vorübergehend groß genug, um den gesamten Datensatz aufzunehmen, den Sie ohne Wachstum verschieben
  2. Verwenden Sie SELECT INTOden Import- / Export- "Assistenten" oder Red Gate SQL Data Compare, um diese Tabelle in die neue Datenbank zu kopieren (beachten Sie, dass Sie bei Verwendung SELECT INTOmanuell Indizes, Einschränkungen usw. erstellen müssen).
  3. Sichern Sie die neue Datenbank und senden Sie diese .bak-Datei (beachten Sie, dass das Protokoll aufgrund der anfänglichen Datenverschiebung möglicherweise größer ist als erwartet).

Option 2

  1. Sichern Sie Ihre Datenbank lokal
  2. Als Kopie wiederherstellen
  3. Lass alles außer diesem einen Tisch fallen
  4. Sichern Sie die Kopie und senden Sie diese .bak vorbei
Aaron Bertrand
quelle
Aaron wie immer Ihre Antworten sind so gut wie Gold
User Smith
Stellen Sie die neue, leere Datenbank auf Simple Recovery Model ein, um Probleme mit der Protokollgröße zu vermeiden. Per Definition handelt es sich um eine Wegwerfdatenbank. Es ist Ihnen also egal, ob sie mitten in der Operation stirbt - Sie beginnen einfach mit einer neuen.
Ross Presser
@ RossPresser Ein einfaches Wiederherstellungsmodell bedeutet nicht "nicht protokollieren" - ich kann ein Protokoll für eine leere Datenbank sehr einfach in die Luft jagen, selbst bei einer einfachen Wiederherstellung, während ich es auffülle.
Aaron Bertrand
Ups, du bist natürlich richtig. Ich las "Keine Protokollsicherungen" und dachte "Das Protokoll wird nie geschrieben." Offensichtlich ist das falsch.
Ross Presser
2

Wie oben erwähnt. Der einfachste Weg scheint bcp raus und rein zu sein.

Schreiben Sie Ihre Tabelle in eine Datei (das Skript zum Erstellen einer Tabelle).

Führen Sie den folgenden Befehl aus

Exportieren Sie Daten in der Befehlszeile mit

bcp "Database.Schema.Table" out "D:\filename.dat" -N -S "SQLServer\Instance" -T

Sobald Sie diese Datei kopiert / auf ein anderes System verschoben haben, erstellen Sie die Tabelle, die Sie benötigen, und führen Sie dann das bcp ein.

bcp "Database.Schema.Table" in "D:\filename.dat" -N -S "SQLServer\Instance" -T

Link: https://msdn.microsoft.com/en-us/library/ms162802.aspx

Johndacostaa
quelle