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 ?
quelle
Antworten:
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.
quelle
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.
quelle
Im Allgemeinen nein. Einige zufällige Ideen, die Ihnen möglicherweise helfen oder auch nicht:
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:
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).DBCC SHRINKFILE
in einer Zeit geringer Aktivität eine Protokolldatei für die Produktion aus, unmittelbar nachdem Sie eine Protokollsicherung erstellt haben.ALTER DATABASE MODIFY FILE
Vorgang 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.
quelle