Ich habe einige große .bak
Dateien aus einem SQL Server 2005-Speicherauszug.
Kann ich diese wiederherstellen, ohne SQL Server zu verwenden, entweder für PostgreSQL, MySQL oder für flache Textdateien?
Eine Open-Source-Lösung wäre am nützlichsten.
Ich habe einige große .bak
Dateien aus einem SQL Server 2005-Speicherauszug.
Kann ich diese wiederherstellen, ohne SQL Server zu verwenden, entweder für PostgreSQL, MySQL oder für flache Textdateien?
Eine Open-Source-Lösung wäre am nützlichsten.
Antworten:
Folgendes schlage ich vor:
Wenn die VM über genügend Speicherplatz für das Backup, aber nicht über genügend Speicherplatz für die Wiederherstellung verfügt, können Sie eine "virtuelle Wiederherstellung" mit der Testversion eines Produkts von Red-Gate mit demselben Namen durchführen (wodurch Sie mit dem interagieren können) Sicherungsdatei, als wäre sie wiederhergestellt worden). Andernfalls stellen Sie die Datenbank wie gewohnt wieder her .
Sobald die Datenbank verfügbar ist (entweder durch eine normale oder eine virtuelle Wiederherstellung), können Sie auf folgende Weise Skripts für das Schema und die Daten generieren:
Alternativ können Sie versuchen, mit dem Dienstprogramm bcp Daten in CSV-Dateien oder ähnliches zu extrahieren. Sie müssen dies jedoch Tabelle für Tabelle ausführen oder ein cleveres Skript verwenden (PowerShell, T-SQL, C # / SMO usw.). ), um alle bcp-Befehle für Sie zu generieren. In CSV-Dateien sollte es trivial sein, die Daten massenweise in Postgres zu laden (Sie müssen jedoch noch etwas arbeiten, um die Tabellen zu erstellen).
Als letzter Vorschlag, wenn die .bak-Datei nicht riesig ist und die Daten nicht vertraulich sind, bin ich mehr als bereit, Dateien in dem von Ihnen benötigten Format für Sie zu generieren. Ich habe viele Windows-VMs mit Speicherplatz. Die Herausforderung besteht darin, die .BAK-Datei an einen Ort zu bringen, an dem ich sie abrufen kann - insbesondere, wenn sie größer ist als die meisten von Filesharing-Diensten unterstützten Dateien.
Leider gibt es keine Möglichkeit, auf den Inhalt einer .bak-Datei zuzugreifen, ohne die Interna der Datei selbst zu kennen. Ich kann mir hier eine Person vorstellen, die mit diesen Informationen vertraut ist, aber ich kann nicht darüber sprechen, ob diese Person Ihnen sagen würde, wie Sie vorgehen sollen
Sie müssen also eine SQL Server-Instanz installieren. Sie müssen auch sicherstellen, dass diese Instanz mit Ihrem Postgres-Server kommunizieren kann (in Verbindung mit der Datei pg_hba.conf). Dort haben Sie einige gute Möglichkeiten, die Daten zu migrieren.
Der erste Weg wäre, den Postgres Windows ODBC-Treiber zu installieren und eine Verbindung zum pg-Server herzustellen. Anschließend können Sie mithilfe von SSIS ein Skript für eine Datenmigration erstellen. Wenn Sie diesen Weg einschlagen, empfehlen wir Ihnen, SSIS bei der Installation des Datenbankservers zu installieren.
Die andere Option betrifft auch die ODBC-Treiberverbindung. Sie können jedoch einen Verbindungsserver in SQL Server erstellen und Einfügungen in der pg-Instanz über SQL Server ausführen. Ich habe genau diese Frage hier schon einmal beantwortet, daher sollte es nicht schwer sein, sie zu finden.
BEARBEITEN
Um Aarons Kommentar einzubeziehen, können Sie, sobald Sie SQL Server zum Laufen gebracht haben, die Daten auch auf verschiedene Arten in Einfachdateien exportieren. Wenn Sie sich für diesen Pfad entscheiden, lassen Sie es mich wissen und ich werde ein paar Wege dazu veröffentlichen
EDIT (2):
Der Verbindungsserverprozess ist möglicherweise nicht der beste Ansatz, es sei denn, Sie möchten die Strukturen im Voraus erstellen. Es ist meine bevorzugte Methode, aber normalerweise habe ich die Struktur bereits auf beiden Seiten.
Damit bleibt die Antwort von Aaron Bertrand als beste Antwort übrig. Bitte beachten Sie, dass die Datentypen zusätzlich ( IDENTITY
vs SEQUENCE
, nichts von Postgres weiß , NVARCHAR
da Sie die Codierung auf der Datenbank selbst festlegen). Postgres weiß nichts von CREATE CLUSTERED INDEX
( CLUSTER
kann für Sie arbeiten). Da ich in den Kommentaren sehe, dass Sie Geodaten verwenden werden, weiß postgresql schließlich nichts über die CREATE SPATIAL INDEX
Syntax. Sie müssen postgis installieren und das INDEXTYPE
Schlüsselwort verwenden, um räumliche Indizes zu erstellen. Stellen Sie schließlich sicher, dass Sie die Schemas ordnungsgemäß behandeln.
Um es kurz zu machen: