Wie kann ich in SQL Server (in diesem Fall 2008) schnell alle Dateien (Protokoll und Daten) für alle Datenbanken einer Instanz verkleinern? Ich könnte durch SSMS gehen und mit der rechten Maustaste auf jede klicken und Aufgaben -> Verkleinern wählen, aber ich suche etwas schnelleres.
Ich habe einige "Datenbank erstellen" -Skripte geschrieben und vergessen, dass sie aufgrund von Standardeinstellungen eine überhöhte Größe haben und nicht so viel Platz für diese Dateien in diesem Projekt benötigen.
quelle
SELECT 'USE [' + d.name + N']' + CHAR(13) + CHAR(10) + 'DBCC SHRINKFILE (N''' + mf.name + N''' , 0, TRUNCATEONLY)' + CHAR(13) + CHAR(10) + CHAR(13) + CHAR(10) FROM sys.master_files mf JOIN sys.databases d ON mf.database_id = d.database_id WHERE d.database_id > 4
Aber das herauszufinden, gab mir ein neues Problem. Aus, um eine weitere Frage zu stellen.Wie wäre es mit einer einzelnen Zeile der SQL-Anweisung?
Bitte lesen Sie diesen sehr interessanten Blog-Beitrag, bevor Sie die folgende SQL-Anweisung ausführen.
quelle
DBCC SHRINKDB (und sein Cousin SHRINKFILE) sind extrem langsam, da in diesem Code viel Single-Thread-Ausführung stattfindet.
Eine viel schnellere Methode zum Verkleinern einer Datenbankdatei ist die folgende:
sp_spaceused
zu bestimmen, wie groß sie sein soll).Da Indexwiederherstellungen weitgehend parallel sind, führt diese Technik häufig zu einer viel schnelleren Verkleinerung der Datenbank. Natürlich müssen Sie ein wenig zusätzlichen Speicherplatz für die neue Dateigruppe haben, während der Prozess abläuft. Sie benötigen jedoch nur genügend Speicherplatz in der neuen Dateigruppe, um die größte Dateigruppe in der Instanz aufzunehmen (da Sie währenddessen Speicherplatz zurückfordern).
Diese Technik hat auch den zusätzlichen Vorteil, dass Ihre Indizes dabei defragmentiert werden.
quelle
Ich habe ein wenig die Abfrage angepasst, um nur das LOG zu verkleinern, wie es angefordert wird:
quelle
Im folgenden Code wird eine Liste der Nicht-Systemdatenbanken angezeigt. Legen Sie fest, dass die Datenbank schreibgeschützt ist, und verkleinern Sie die Datei. Ich habe diesen Code mithilfe von SQL Agent Job in einigen SQL Server-Boxen gespeichert, in denen der Speicherplatz immer ein Problem darstellt. Wöchentlich in der Nacht von Samstag auf Sonntag werden alle Datenbanken innerhalb weniger Stunden ausgeführt und verkleinert (abhängig von der Größe der Datenbanken).
quelle
Verkleinern Sie alle Protokolldateien außer master, model, msdb:
quelle
Diese erweitert die Antwort oben und verwendet einen Cursor, um die SQL-Anweisungen nacheinander zu durchlaufen. Es ist nicht so kurz wie Emrahs Antwort, aber es erlaubt zusätzliche Logik innerhalb der while-Schleife innerhalb des Cursors.
quelle
Wir können
SHRINKDB
undSHRINKFILE
für alle Datenbanken dynamisch wiederholen :Details finden Sie in diesem Artikel .
quelle