Kann ich SQL Server-Bak-Dateien ohne SQL Server wiederherstellen?

16

Ich habe einige große .bakDateien 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.

Abe
quelle
1
"Ich würde es vorziehen, dies nicht nur für diese Aufgabe tun zu müssen." Warum nicht? Es ist der Weg, das zu tun, was du versuchst.
Swasheck
Macht es überhaupt Sinn, etwas anderes wiederherzustellen? Was möchten Sie mit den resultierenden Daten tun?
Philᵀᴹ
1
@Phil Ich möchte die resultierenden Daten in eine PostgreSQL-Datenbank oder sogar in flache Textdateien verschieben.
Abe
1
@swasheck Ich habe die zitierte Zeile entfernt, da sie die Frage beeinträchtigt zu haben scheint. Aber um Ihre Frage zu beantworten, da ich keine Ahnung habe, wie ich sie verwenden soll und auf meinem Server Linux läuft. Ein verfügbarer Windows-Laptop hat nicht genügend Platz.
Abe
2
Nun, das sind Informationen, die wir vorher noch nicht hatten :). Vielen Dank für die zusätzlichen Informationen - ich habe einen Plan
swasheck

Antworten:

19

Folgendes schlage ich vor:

  1. Erstellen Sie eine virtuelle Maschine unter Windows mit genügend Speicherplatz für die Sicherung. Kopieren Sie die Sicherungsdatei dorthin. Wenn Sie noch nicht in der Lage sind, virtuelle Maschinen zu erstellen, können Sie dies mit kostenlosen Produkten wie Oracle VirtualBox tun .
  2. Laden Sie die Evaluierungsversion von SQL Server herunter und installieren Sie sie . Stellen Sie sicher, dass Sie sowohl das Datenbankmodul als auch die Verwaltungstools - Vollständig enthalten.
  3. 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 .

  4. 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:

    • Öffnen Sie Management Studio und stellen Sie eine Verbindung zu Ihrer Instanz her.
    • Öffnen Sie den Objekt-Explorer.
    • Klicken Sie mit der rechten Maustaste auf Ihre neu wiederhergestellte Datenbank und wählen Sie "Aufgaben"> "Skripte generieren".
    • Klicken Sie auf Weiter. Klicken Sie auf Weiter
    • Scrollen Sie auf der Seite "Skriptoptionen auswählen" nach unten und setzen Sie "Skriptdaten" auf "Wahr"
    • Weiter klicken
    • Überprüfen Sie alle relevanten Objekte und klicken Sie auf Weiter
    • Überprüfen Sie die gewünschten Tabellen und klicken Sie auf Weiter
    • Wählen Sie diese Option, um ein Skript für eine Datei zu erstellen. Jetzt haben Sie eine Datei, die alle Ihre Objekte und Daten mit SQL Server-Einfügesyntax enthält. Sie müssen mit der Ausgabe spielen, um ein für Postgres geeignetes Format zu erhalten (ich bin nicht mit geringfügigen Syntaxunterschieden vertraut).

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.

Aaron Bertrand
quelle
+1 Ich wollte die BCP-Methode vorschlagen, sobald ich an einen Computer kam. Einige Fallstricke sind Tabellentrennzeichen, IDENTITY (Sequenz, in pg), nvarchar, um nur einige zu nennen. Andernfalls hätte ich dies in meinem Bearbeitungsbereich vorgeschlagen (ohne Red-Gate).
Swasheck
Es gibt 8 .bak-Dateien mit 20 GB, und es wäre großartig, wenn Sie helfen könnten. Weitere Informationen finden Sie unter gis.se, gis.stackexchange.com/q/28281/3218 und gis.stackexchange.com/q/28257 / 3218 über die USDA Bodendatenbank (SSURGO). Der automatisierte Zugriff auf diese Daten für die Simulationsmodellierung ist derzeit sehr schwierig. Es wäre ein großer Vorteil für die Wissenschaft, diese Daten in einer besser nutzbaren Struktur zu haben. Sie können es von meinem Server herunterladen. Die Daten sind nicht vertraulich, jeder kann sie für 50 US-Dollar / CD oder 100 US-Dollar / DVD oder weniger von seinem Extension Agent erhalten.
Abe
Anscheinend haben Sie Antworten darauf, wie Sie die Daten auf GIS.SE erhalten können. Ich habe mir diese Sites angesehen, sehe aber nicht, wo sie angeben, dass es sich bei der Datei um eine SQL Server-Sicherung handelt. Wie / woher haben Sie diese Dateien erhalten?
Swasheck
7

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 ( IDENTITYvs SEQUENCE, nichts von Postgres weiß , NVARCHARda Sie die Codierung auf der Datenbank selbst festlegen). Postgres weiß nichts von CREATE CLUSTERED INDEX( CLUSTERkann für Sie arbeiten). Da ich in den Kommentaren sehe, dass Sie Geodaten verwenden werden, weiß postgresql schließlich nichts über die CREATE SPATIAL INDEXSyntax. Sie müssen postgis installieren und das INDEXTYPESchlüsselwort verwenden, um räumliche Indizes zu erstellen. Stellen Sie schließlich sicher, dass Sie die Schemas ordnungsgemäß behandeln.

Um es kurz zu machen:

  1. Generieren Sie Skripte und Daten mit der Methode von Aaron Bertrand (ich würde mich wahrscheinlich an die Tabellenebene halten)
  2. Notieren Sie sich die Index-DDL (falls sie noch gültig ist), schließen Sie sie jedoch nicht ein
  3. Erstellen Sie Indizes für Postgres, sobald Struktur und Daten vorhanden sind
Swasheck
quelle
3
Ich glaube nicht, dass Sie SQL Server konfigurieren müssen, um mit Postgres zu sprechen. Ich bin mir sicher, dass Sie nach der Installation von SQL Server die Daten in eine Vielzahl von Formaten extrahieren können, die Postgres verstehen wird.
Aaron Bertrand
Entschuldigung. Ich meinte, dass Sie Postgres konfigurieren müssen, um externe Verbindungen zu akzeptieren (in diesem Fall SQL Server)
swasheck
Entschuldige dich nicht. :-) Ich habe nur klargestellt, dass SQL Server nicht direkt mit Postgres oder umgekehrt kommunizieren muss.
Aaron Bertrand