Stellen Sie die Bak-Datei in kleineren MDF- und LDF-Datenbankdateien wieder her

11

Ich habe eine Legacy-Datenbank, auf deren albtraumhaften Mangel an Design ich hier nicht eingehen werde, aber die Dateien auf dem Server sind (relativ) riesig. Ich habe:

MyDatabase.mdf: 24,8
GB MyDatabase.ldf: 114,6 GB

Diese Datenbank wird jede Nacht in einer .bak-Datei gesichert und an unseren Berichtsserver gesendet, wo sie wiederhergestellt wird. Die .bak-Datei ist mit nur 1,8 GB viel kleiner.

Wenn ich jedoch versuche, es auf dem Berichtsserver wiederherzustellen, schlägt dies aufgrund unzureichenden Speicherplatzes fehl. Auf dem Server sind ungefähr 100 GB frei, und es wird versucht, die gesamten 139,4 GB zu verbrauchen, die die Dateien auf dem ursprünglichen Server verbraucht haben. Sofern meine Kenntnisse über die Komprimierung nicht schrecklich falsch sind, bin ich ziemlich sicher, dass die 1,8-GB-Datei nicht tatsächlich um 7400% erweitert wird.

Meine Frage: Gibt es eine Möglichkeit, SQL Server anzuweisen, diese Sicherungsdatei wiederherzustellen, ohne diesen Speicherplatz im Voraus zu reservieren? Ich kümmere mich nicht um eines der Protokolle; Ich brauche nur die Daten, um dort zu sein. Ich verstehe Datenbanken aus der Entwicklungs- und Schema-Perspektive, aber ich bin keineswegs irgendeine Art von DBA.

Dies ist auf SQL Server 2008 R2. Vielen Dank für jede Hilfe oder Anregungen.

eouw0o83hf
quelle

Antworten:

11

Das Backup enthält zwei Informationen:

Die tatsächlichen Daten in der Sicherung sind diese 1,8 GB. Die Metadaten beschreiben jedoch das Layout von Dateien wie auf dem ursprünglichen Produktionsserver. Es sieht zwar nach Komprimierung aus, ist aber keine tatsächliche Komprimierung. Ist nur Metadaten vs. Inhalt. Das Problem ist, dass der Berichtscomputer während des Wiederherstellens ein Layout erstellt, wie in den Metadaten beschrieben, daher 114,6 GB + 24,8 GB. Nun zur eigentlichen Frage: Können Sie es wiederherstellen, ohne das ursprüngliche DB-Dateilayout neu zu erstellen? Nein. Es gibt jedoch noch andere Lösungen für Ihr Problem: Bringen Sie die ursprüngliche Datenbank wieder in Schach. Das Verkleinern des Transaktionsprotokolls umfasst die Schritte, die Sie ausführen müssen, da das Protokoll Ihr Hauptschmerzpunkt ist. Als nächstes würde ich den Protokollversand anstelle der Sicherung / Wiederherstellung bereitstellen .

Remus Rusanu
quelle
Vielen Dank; Das Verkleinern des Transaktionsprotokolls hat den Trick perfekt gemacht.
eouw0o83hf
1
Protokollversand anstelle von Protokollsicherungen?
Thomas Stringer
4
@Shark: Protokollversand anstelle vollständiger Sicherungen, um die Datenbank an den Berichtscomputer zu liefern.
Remus Rusanu
Oh okay, ich habe diesen Teil der Frage komplett verpasst. Danke für die Klarstellung!!
Thomas Stringer
0

Mit SQL Server 2012 kann nur die Datenbank-MDF-Datei verwendet und an SQL Server angehängt werden : http://msdn.microsoft.com/en-us/library/ms174385.aspx . SQL Server erstellt eine brandneue ldf-Datei, in der Sie die Größe angeben können. Dann:

  • Verwenden Sie das einfache Wiederherstellungsmodell , um zu verhindern, dass Ihre Protokolldatei wächst, oder
  • Verwenden Sie das vollständige Wiederherstellungsmodell und führen Sie regelmäßige Transaktionsprotokollsicherungen durch. Dadurch wird auch verhindert, dass die Protokolldatei wächst
Carol Baker West
quelle