Einige Vorsichtsmaßnahmen:
- Es ist allgemein als die schlechteste Vorgehensweise bekannt, eine Produktionsdatenbank oder -datei jemals zu verkleinern (Protokolldateien sind ein weiteres Problem, um das es in dieser Frage geht ). Ich rate den Leuten, ihre Datenbanken in Blog-Posts wie diesen nicht zu verkleinern, in denen es um "richtige Größe" und gute Planung geht. Ich bin nicht allein dort ( Paul Randal , Brent Ozar , nur um ein paar weitere Links bereitzustellen). Das Verkleinern einer Datendatei oder von Datenbankfragmentindizes ist langsam und mühsam für Ihre Ressourcen, kann Ihr System belasten und ist im Allgemeinen nur eine schlechte Sache
- In diesem Fall wissen wir alle, dass das Risiko besteht, wir sind bereit, uns damit auseinanderzusetzen, aber wir haben viel Platz frei gemacht, von dem wir wissen, dass wir ihn nie wieder brauchen werden. In diesem speziellen Fall ist das Schrumpfen als eine unserer Optionen sehr sinnvoll.
Wenn Sie sich über die Sorgen und Risiken gelesen haben und Sie immer noch diesen Schrumpf tun müssen , weil Sie eine befreit erhebliche Menge an Speicherplatz, hoffentlich der Rest dieser Antwort wird Ihnen helfen. Aber bedenken Sie die Risiken.
Es gibt zwei Hauptansätze, die zwei hier berücksichtigen:
1.) Verkleinern Ja, machen Sie das eigentliche Verkleinern - Ziehen Sie in Betracht, DBCC SHRINKFILE
statt zu verwenden DBCC SHRINKDATABASE
, haben Sie mehr Kontrolle darüber, was und wie geschrumpft wird. Dies führt mit Sicherheit zu Leistungseinbußen - es handelt sich um eine umfangreiche Operation, die viel E / A-Aufwand verursacht. Sie können möglicherweise mit wiederholten Verkleinerungen auf eine Zielgröße, die immer kleiner wird, davonkommen.
Dies ist das "A.)" - Beispiel im obigen DBCC SHRINKFILE
Link. In diesem Beispiel wird eine Datendatei auf eine Zielgröße von 7 MB verkleinert. Dieses Format ist ein guter Weg, um wiederholt zu verkleinern, wenn Ihr Ausfallzeitfenster dies zulässt. Ich würde dies beim Testen der Entwicklung tun, um zu sehen, wie die Leistung aussieht und wie hoch / niedrig Sie ein Inkrement einstellen können, und um den erwarteten Zeitpunkt in der Produktion zu bestimmen. Dies ist ein Online- Vorgang - Sie können ihn mit Benutzern im System ausführen, die auf die Datenbank zugreifen, die verkleinert wird, aber es kommt fast garantiert zu Leistungseinbußen. Überwachen und beobachten Sie also, was Sie mit dem Server tun, und wählen Sie im Idealfall ein Ausfallzeitfenster oder eine Zeitspanne geringerer Aktivität aus.
USE YourDatabase;
GO
DBCC SHRINKFILE (DataFile1, 7);
GO
Immer daran denken: Sie - Bei jedem Verkleinern fragmentieren Sie Ihre Indizes und sollten einen Indexneubau durchführen, wenn Sie über einen längeren Zeitraum Teile verkleinern möchten. Diese Kosten fallen jetzt jedes Mal an, wenn Sie nicht alles in einem Fenster erledigen können.
2.) Neue Datenbank - Sie können eine neue Datenbank erstellen und Daten in diese migrieren. Sie müssten die leere Datenbank mit allen Schlüsseln, Indizes, Objekten, Prozessen, Funktionen usw. per Skript auslesen und dann Daten in sie migrieren. Sie könnten Skripte dafür schreiben oder ein Tool wie SQL Data Compare von Red Gate oder anderen Anbietern mit ähnlichen Tools verwenden. Dies ist mehr Einrichtungsarbeit auf Ihrer Seite, mehr Entwicklung und Testen, und abhängig von Ihrer Umgebung kann auch das Ausfallzeitfenster ausgeblasen werden, es ist jedoch eine zu berücksichtigende Option.
Wenn ich gezwungen bin , eine Datenbank zu verkleinern
Wenn dies meine Umgebung wäre, würde ich versuchen, eine angemessene Menge an Leerraum in der Datendatei zu belassen, da ich gerne ein Festplattenfresser bin und auf zukünftiges / unerwartetes Wachstum vorbereitet bin. Wenn wir nur einen Großteil des Speicherplatzes löschen würden, wäre es in Ordnung, Platz zurückzugeben, aber ich würde diesen Worten niemals vertrauen, "aber es wird nie wieder wachsen", und trotzdem etwas Leerraum lassen. Die Route, mit der ich wahrscheinlich fahren würde ( seufz) ) ist der Schrumpf Ansatz , wenn ich kleinere Ausfallzeiten Fenster hatte und Ich wollte nicht die Komplexität aufbringen, eine leere Datenbank zu erstellen und Daten in diese zu migrieren. Also habe ich es ein paar Mal inkrementell verkleinert (basierend darauf, wie oft ich dachte, ich müsste basierend auf meinen Tests in dev und der gewünschten Größe nach und nach eine kleinere Dateigröße auswählen) und dann die Indizes neu erstellt. Und dann habe ich‘ würde niemals jemandem sagen, dass ich meine Datenbank verkleinert habe ;-)