Ich habe eine SQL Server 2005-Entwicklerdatenbank, die eine 30-GB-Kopie von Live ist. Wir haben einige Daten gelöscht, die in dev nicht benötigt werden, wodurch der verwendete Speicherplatz für Datendateien auf 20 GB reduziert wird. Wir haben also ungefähr 33% ungenutzt.
Ich muss den Speicherplatz zurückfordern, damit wir eine zweite Entwicklungsdatenbank auf dem Server haben können (basierend auf der reduzierten Version). Ich kann den Speicherplatz jedoch nicht zurückfordern. Ich habe Folgendes getan:
Die anfängliche Größe der Datei
SMS2_Data
beträgt 30 GB.DBCC SHRINKFILE (N'SMS2_Data' , 0, TRUNCATEONLY)
gefolgt von
DBCC SHRINKFILE (N'SMS2_Data' , 19500)
Keine Freude. Ich habe versucht, ein Backup zu erstellen, eine neue Datenbank mit einer geringen Anfangsgröße zu erstellen und dann wiederherzustellen. Keine Freude, da die Anfangsgröße überschrieben wird. Habe auch versucht:
ALTER DATABASE SMS2HazSub MODIFY FILE (NAME = 'SMS2_Data', SIZE = 20000)
Dies irrte und sagte:
DATEI ÄNDERN fehlgeschlagen. Die angegebene Größe ist kleiner als die aktuelle Größe.
Ich habe 20800 ausprobiert und bin dann weiter auf 29000 (29 GB) gestiegen, und ich kann es immer noch nicht ändern.
Habe den Schrumpf gemacht und dann den Wiederherstellungsmodus von FULL
nach SIMPLE
und wieder zurück geändert . Keine Freude.
Ich dachte, das hätte mit einigen TEXT
Feldern zu tun . Wir haben ungefähr 6 im ganzen System. Als Test habe ich sie alle gelöscht und dann die Datei verkleinert und immer noch keine Änderung vorgenommen.
Die einzige verbleibende Option besteht darin, die Daten erneut in eine andere Datenbank zu importieren. Dies ist nicht praktikabel, da dies auf der Live-DB erfolgen müsste, die ein zu hohes Risiko birgt. Wir holen uns halb regelmäßig eine Kopie der Live-Datenbank und überschreiben dev / test. Wir haben ungefähr 500 Tische. Ich möchte einen Weg, der nicht das Risiko birgt, Daten in eine neue Datenbank zu exportieren.
Ich habe versucht, die Daten in eine andere Datei zu verschieben, und es wurden alle bis auf 5% der Daten kopiert. Dies hat mich veranlasst, alle Textspalten zu löschen.
Der Server befindet sich im Kompatibilitätsmodus 90, ist jedoch SP2. Ich habe jetzt die folgenden drei Schritte ausgeführt: Alle Tabellen neu indizieren, Datenbank sichern, Datei verkleinern, Datenbank verkleinern. Immer noch keine Freude.
EXECUTE sp_spaceused
kehrt zurück:
database_name database_size unallocated space
SMS2Tests 31453.94 MB 13903.16 MB
reserved data index_size unused
16545568 KB 10602264 KB 4254360 KB 1688944 KB