Wie kann eine SQL Server-Datenbank wiederhergestellt und gleichzeitig ihre Dateien verkleinert werden?


9

Angenommen, ich habe eine SQL Server-Datenbank, deren Datendateien mit einer Anfangsgröße von 100 GB erstellt wurden, die jedoch nur 10 GB Daten enthält. Eine Datenbanksicherung hat dann nur eine Größe von 10 GB.

Ich möchte diese Sicherung auf einem anderen Server (oder einer anderen Datenbank auf demselben Server) wiederherstellen, aber ich möchte nicht, dass sie denselben Speicherplatz wie die ursprüngliche (100 GB) beansprucht, was standardmäßig der Fall ist.

Ich kann die ursprüngliche Datenbank nicht verkleinern, bevor ich ein Backup erstellt habe (es ist eine Produktionsdatenbank und benötigt so viel vorab zugewiesenen Speicherplatz). Ich könnte die wiederhergestellte Datenbank verkleinern, nachdem die Wiederherstellung abgeschlossen ist, aber ich würde es wirklich vorziehen, wenn sie dabei nicht 100 GB beansprucht. Außerdem habe ich in diesem speziellen Szenario nicht so viel freien Speicherplatz, sodass die Wiederherstellung nirgendwohin führt.

Kann ich die Datenbank auf irgendeine Weise wiederherstellen und sie nur so viel Speicherplatz beanspruchen wie die tatsächlichen Daten, die sie enthält ?


Ich hatte ein ähnliches Problem. Der ursprüngliche DB-Speicherplatz auf der Festplatte betrug ~ 30 GB (mit ca. 1,5 GB realen Daten) und ich möchte ihn auf meinem lokalen MSSQL Express-Server wiederherstellen. Das offensichtliche Problem ist, dass mein lokaler Server nur max. von 10 GB, da es sich um eine kostenlose Edition handelt. Also, ich wäre in der Lage, es zu tun, wenn ich in der Lage wäre, die Dateien zu verkleinern, bevor ich versuche, die
Datenbank

Antworten:


6

Nein, sorry - auf keinen Fall. Wiederherstellen stellt Dateien so wieder her, wie sie bei der Sicherung waren. Das Schinking muss danach oder vor dem Backup durchgeführt werden.


2

Wenn der Speicherplatz knapp ist, können Sie die .bak-Datei auf einer Netzwerkfreigabe ablegen und von dort aus wiederherstellen. Sollte funktionieren, wenn Ihr SQL Server mit einem Domänenkonto ausgeführt wird und der Freigabe genügend Rechte zum Lesen der Datei eingeräumt wird.

Die andere Option, die zuvor im Warenkorb für Sie war (aber nur nützlich, wenn Sie SQL Server 2008 R2 ausführen), ist, dass SQL Server die Erstellung von Datenbankdateien direkt auf einer Freigabe unterstützt, ohne ein Traceflag verwenden zu müssen aus persönlicher erfahrung funktioniert es! Sie können also eine Wiederherstellung MIT BEWEGUNG für eine Freigabe durchführen.


1

Im Allgemeinen nein. Einige zufällige Ideen, die Ihnen möglicherweise helfen oder auch nicht:

  • Sofern Sie nicht unbedingt Daten aus dieser bestimmten Sicherung benötigen , können Sie eine neue (leere) Datenbank mit der Zielgröße erstellen und mithilfe von Massenkopien (oder SSIS) alle Tabellen aus der aktuellen (Live-) Datenbank in Ihre Kopie übertragen.
  • Es gibt Tools von Drittanbietern (z. B. Redgate Compare), mit denen diese Art von Dingen automatisiert werden kann, wenn dies mehr als eine einmalige Operation ist.
  • Einige Sicherungssoftware von Drittanbietern (z. B. Quest Litespeed) können eine " Wiederherstellung auf Objektebene " durchführen, mit der einzelne Tabellen oder andere Objekte in einer neuen (leeren) Datenbank wiederhergestellt werden können. Selbst wenn das Backup nicht mit Litespeed erstellt wurde, sollte das Produkt meiner Meinung nach mit Native SQL-Backups funktionieren.

Schließlich mag ich auch etwas "Spielraum" in meinen Produktionsdatenbanken, aber 90 GB frei von insgesamt 100 GB klingen etwas extrem. Die folgenden Schritte geben Ihnen möglicherweise das, was Sie benötigen, und sollten sich nicht auf die Produktion auswirken:

  1. Führen Sie a DBCC SHRINKFILE ('myfile.MDF', TRUNCATEONLY)für die Produktionsdatendatei aus, um vorübergehend freien Speicherplatz am Ende der Datei freizugeben (TRUNCATEONLY ist nicht E / A-intensiv und fragmentiert keine Indizes).
  2. Wenn die Protokolldatei ebenfalls groß ist, führen Sie DBCC SHRINKFILEin einer Zeit geringer Aktivität eine Protokolldatei für die Produktion aus, unmittelbar nachdem Sie eine Protokollsicherung erstellt haben.
  3. Führen Sie Ihr Backup aus
  4. Führen Sie einen ALTER DATABASE MODIFY FILEVorgang durch, um die Produktionsdatendatei wieder auf die ursprüngliche Größe zu vergrößern.

Mit diesen Schritten sollte es keine Auswirkungen auf die Produktion geben. Das einzige Risiko besteht darin, dass sich einige der Daten ganz am Ende der 100-GB-Datendatei befinden. In diesem Fall wird in Schritt (1) nicht viel oder gar kein Speicherplatz freigegeben.


Danke, ich weiß bereits davon und habe versucht, einige Problemumgehungen zu finden. Ich kann die ursprüngliche Datenbank einfach nicht berühren, nur das Backup wird zur Verfügung gestellt ... und es wurde auf diese Weise konfiguriert.
Massimo
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.