SQL Server-Export/-Import auf Tabellenebene (bcp, sqlpackage)
SQL ServerStufe: MittelDauer: 20–60 Min.Keine Sicherung, sondern logische Datenübertragung: Tabellen mit bcp exportieren und in eine andere Datenbank laden (natives oder Zeichenformat, Formatdatei, Batch, TABLOCK, Identitätsspalte, UTF-8), ein Abfrageergebnis in eine CSV-/Textdatei schreiben (queryout), Schema + Daten mit sqlpackage übertragen (.bacpac Export/Import, z. B. Migration nach Azure SQL Database) und nur das Schema (.dacpac Extract, Script, Publish). Einschließlich Installation von mssql-tools18 und sqlpackage unter Linux. Am Ende hast du auf dem Ziel Tabellen, deren Zeilenzahlen gegen die Quelle geprüft sind, oder eine Datei zur Weitergabe.
Willst du die gesamte Datenbank auf denselben oder einen neueren SQL Server übertragen, ist Sicherung/Wiederherstellung schneller und konsistent: SQL Server-Sicherung und -Wiederherstellung.
Topologie: 1 Server (die Befehle laufen auf dem SQL Server selbst oder auf einem Verwaltungsserver)
Szenarien
- Tabellen übertragen: bcp out → bcp in — Eine oder mehrere Tabellen in eine andere SQL Server-Datenbank kopieren; die Tabellen müssen auf dem Ziel bereits existieren.
- Abfrageergebnis in eine Datei schreiben: bcp queryout (CSV/Text) — Das Ergebnis einer Abfrage in eine CSV-/Textdatei schreiben, die an ein anderes System (Excel, ETL, Reporting) geht.
- Schema + Daten: sqlpackage Export / Import (.bacpac) — Schema und Daten in einer einzigen Datei übertragen; vor allem für die Migration nach Azure SQL Database oder für kleine/mittlere Datenbanken.
- Nur Schema: sqlpackage Extract / Script / Publish (.dacpac) — Nur das Schema extrahieren, mit dem Ziel vergleichen und ein Änderungsskript erzeugen oder ein leeres Schema in einer neuen Umgebung bereitstellen.
Vor dem Start
- Das richtige Werkzeug ist gewählt: - bcp (nativ): eine oder mehrere große Tabellen von SQL Server zu SQL Server übertragen; die schnellste Variante. Die Zieltabellen müssen bereits existieren. - bcp (Zeichen) / queryout: Text/CSV an andere Systeme (ETL, Reporting, Excel) weitergeben. - .bacpac (Export/Import): Schema + Daten in einer Datei übertragen; vor allem für die Migration nach Azure SQL Database. Bei großen Datenbanken (mehrere hundert GB) langsam; dann Sicherung/Wiederherstellung oder bcp vorziehen. - .dacpac (Extract): nur Schema (Tabellen, Views, Prozeduren); Schemavergleich und Bereitstellen eines leeren Schemas in einer neuen Umgebung.
- … hat auf der Quelle Leserechte (SELECT auf die Tabellen; für Export/Extract wird db_owner empfohlen) und auf dem Ziel Schreibrechte (INSERT + ALTER TABLE für bcp in; dbcreator oder db_owner für Import/Publish). Gib das Kennwort vor dem Skript an: read -rsp 'Kennwort: ' SQLCMDPASSWORD; export SQLCMDPASSWORD und sudo --preserve-env=SQLCMDPASSWORD bash <skript>.sh.
- PowerShell ist als Administrator geöffnet (Start → „PowerShell“ → Rechtsklick → Run as administrator). …Das Windows-Konto, das PowerShell geöffnet hat,…Das Login …… hat auf der Quelle Lese- und auf dem Ziel Schreibrechte (INSERT + ALTER TABLE für bcp in; dbcreator oder db_owner für Import/Publish).
- Die SQL Server der Quelle (…)… und des Ziels (…)… sind vom Befehlsserver aus über TCP erreichbar.
- Die SQL Server der Quelle (…)… und des Ziels (…)… sind vom Befehlsserver aus über TCP erreichbar; bcp und sqlcmd liegen im PATH (sie kommen mit der SQL Server-Installation oder mit „Microsoft Command Line Utilities for SQL Server“).
- Auf dem Datenträger mit dem Exportverzeichnis (…) ist so viel Platz frei wie die übertragenen Daten groß sind (eine native Datei ist ungefähr so groß wie die Daten der Tabelle; eine Zeichendatei kann größer sein; eine .bacpac-Datei ist komprimiert).
- Auf dem Laufwerk mit dem Exportverzeichnis (…) ist so viel Platz frei wie die übertragenen Daten groß sind.
- In der Zieldatenbank (…) sind die Tabellen mit derselben Struktur angelegt (bcp legt keine Tabellen an). Am einfachsten überträgst du das Schema mit der Option Nur Schema (.dacpac) dieses Leitfadens. Bei großen Ladevorgängen können Nonclustered-Indizes und Trigger der Zieltabelle deaktiviert und die Fremdschlüssel danach geprüft werden.
- Auf der Quelle wird während des Exports nicht geschrieben (die Anwendung ist gestoppt), oder als Quelle dient eine Kopie der Datenbank (aus einer COPY_ONLY-Sicherung wiederhergestellt oder ein Datenbank-Snapshot). bcp und sqlpackage Export sind nicht transaktionskonsistent: Tabellen, die sich während des Exports ändern, können untereinander inkonsistent sein.
Phasen der Anleitung
- Tools und Vorbereitung — Tools sqlcmd und bcp installieren (mssql-tools18) · sqlpackage installieren · Tools bcp und sqlcmd prüfen · sqlpackage installieren · Exportverzeichnis anlegen · Exportverzeichnis anlegen
- Tabellenübertragung (bcp out / in) — Zeilenzahl und Größe der Quelltabellen festhalten · Formatdateien erzeugen · Formatdateien erzeugen · Tabellen exportieren (bcp out) · Tabellen exportieren (bcp out) · Zieltabellen prüfen …
- Abfrageergebnis exportieren (queryout) — Abfrageergebnis in eine Datei schreiben (bcp queryout) · Abfrageergebnis in eine Datei schreiben (bcp queryout)
- Schema + Daten (.bacpac) — Datenbank als .bacpac exportieren (Export) · Datenbank als .bacpac exportieren (Export) · Zieldatenbank anlegen (falls nicht vorhanden) · .bacpac ins Ziel laden (Import) · .bacpac ins Ziel laden (Import) · Tabellen und Zeilenzahlen in der Zieldatenbank prüfen
- Nur Schema (.dacpac) — Schema als .dacpac extrahieren (Extract) · Schema als .dacpac extrahieren (Extract) · Zieldatenbank anlegen (falls nicht vorhanden) · Änderungsskript gegen das Ziel erzeugen (Script) · Änderungsskript gegen das Ziel erzeugen (Script) · Schema auf das Ziel anwenden (Publish) …
- Danach — Exportdateien entfernen · Exportdateien entfernen