it-swarm.com.de

Kann ich SQL Server .bak-Dateien ohne SQL Server wiederherstellen?

Ich habe einige große .bak Dateien aus einem SQL Server 2005-Dump.

Kann ich diese ohne Verwendung von SQL Server wiederherstellen, entweder in PostgreSQL, MySQL oder in flachen Textdateien?

Eine Open Source-Lösung wäre am nützlichsten.

17
Abe

Folgendes schlage ich vor:

  1. erstellen Sie eine virtuelle Maschine unter Windows mit genügend Speicherplatz für die Sicherung. Kopieren Sie dort die Sicherungsdatei. Wenn Sie noch nicht in der Lage sind, virtuelle Maschinen zu erstellen, können Sie dies mit kostenlose Produkte 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 genug Speicherplatz für die Sicherung hat, aber nicht genügend Speicherplatz, um sie auch wiederherzustellen), können Sie eine "virtuelle Wiederherstellung" mit der Testversion eines Produkts von Red-) durchführen. Gate mit demselben Namen (mit dem Sie mit der Sicherungsdatei interagieren können, als ob sie wiederhergestellt worden wäre). Andernfalls Datenbank auf normale Weise wiederherstellen .

  4. Sobald die Datenbank verfügbar ist (entweder durch eine normale oder eine virtuelle Wiederherstellung), können Sie Skripte für das Schema und die Daten auf folgende Weise 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 ein Skript für eine Datei. 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 sie in einem Format zu erhalten, das für Postgres funktioniert (ich bin nicht mit geringfügigen Syntaxunterschieden vertraut).

Alternativ können Sie versuchen, mit dem bcp-Dienstprogramm zu spielen, um Daten in CSV-Dateien oder ähnliches zu extrahieren. Sie müssen dies jedoch Tabelle für Tabelle ausführen oder ein cleveres Skript (PowerShell, T-SQL) verwenden , C #/SMO usw.), um alle bcp-Befehle für Sie zu generieren. In CSV-Dateien sollte es trivial sein, die Daten in Massen in Postgres zu laden (Sie müssen jedoch noch einige Arbeiten ausführen, um die Tabellen zu generieren).

Als letzten Vorschlag bin ich mehr als bereit, Dateien für Sie in dem von Ihnen benötigten Format zu generieren, wenn die .bak-Datei nicht riesig und die Daten nicht vertraulich sind. 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 Unterstützung für Dateifreigabedienste.

19
Aaron Bertrand

Leider gibt es keine Möglichkeit, auf den Inhalt einer .bak-Datei zuzugreifen, ohne die Interna der Datei selbst genau 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 (verdammt mit der pg_hba.conf). Dort haben Sie einige gute Pfade, um die Daten zu migrieren.

Der erste Pfad wäre, den Postgres Windows ODBC -Treiber) zu installieren und eine Verbindung zum pg-Server herzustellen. Anschließend können Sie mithilfe von SSIS eine Datenmigration per Skript ausführen Route, ich schlage vor, Sie installieren SSIS bei der Installation des Datenbankservers.

Die andere Option betrifft auch die Treiberverbindung ODBC), aber Sie können einen Verbindungsserver in SQL Server erstellen und Einfügungen auf der pg-Instanz über SQL Server ausführen. Ich habe genau diese Frage hier zuvor beantwortet es sollte nicht schwer zu finden sein.

BEARBEITEN

Um Aarons Kommentar aufzunehmen, können Sie die Daten nach dem Start von SQL Server auf verschiedene Arten in flache Dateien exportieren. Wenn Sie diesen Weg wählen, lassen Sie es mich wissen und ich werde ein paar Möglichkeiten veröffentlichen, dies zu tun

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 Aaron Bertrands Antwort die beste Antwort. Bitte beachten Sie, dass postgres zusätzlich zu den Datentypen (IDENTITY vs. SEQUENCE nichts von NVARCHAR weiß, da Sie die Codierung in der Datenbank selbst festgelegt haben). Postgres weiß nichts von CREATE CLUSTERED INDEX ( CLUSTER funktioniert möglicherweise für Sie). Schließlich weiß postgresql nichts von der Syntax CREATE SPATIAL INDEX, Da ich in den Kommentaren sehe, dass Sie räumliche Daten verwenden werden. Sie müssen postgis installieren und das Schlüsselwort INDEXTYPE verwenden, um räumliche Indizes zu erstellen. Stellen Sie schließlich sicher, dass Sie die Schemas entsprechend 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. Beachten Sie 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
7
swasheck