Wie verkleinere ich die Größe einer SQL Server-Protokolldatei?

10

Ich kann nicht herausfinden, wie die Größe der ldf-Datei der Datenbank verkleinert werden kann.

Der DBA sagt, ich sollte verwenden backup log dbname with truncate_only

Und obwohl dies so aussieht, als ob es in SQL Query Analyzer korrekt ausgeführt wurde, ist die ldf-Datei immer noch über 2 GB groß.

** Erläuterung basierend auf einigen Kommentaren und Antworten unten. *** Die betreffende Datenbank ist eine Datenbank auf meinem Laptop und ich verwende sie nur für Entwicklungsprozesse. Die Protokolldatei wuchs bis zu einem Punkt, an dem eine vollständige Festplatte verursacht werden sollte. Es besteht kein Produktionsrisiko. Ich verstehe, dass die Methode in der von mir gestellten Frage und die von mir akzeptierte Antwort in einer Produktionsumgebung riskant sind. *

Ron Tuffin
quelle
Das ist doch eine doppelte Frage?
James Ryan
Ich schaute und konnte nur einen finden, der eine Frage stellte, wann die SHRINKFILE ausfällt. Zu der Zeit machte es keinen Sinn, also habe ich diese Frage gestellt. Ich habe überlegt, die Frage zu löschen, aber dann habe ich mir gedacht, dass es andere geben wird, die sich im selben Boot befinden. Wenn Sie eine doppelte Frage finden (die tatsächlich dieselbe Frage stellt, keine ähnliche), werde ich diese gerne löschen.
Ron Tuffin
Es gibt ungefähr 8 Antworten auf der ersten Seite einer Suche, die diese enthalten, aber ich denke, Sie müssen wissen, wonach Sie suchen. Ich sehe es so regelmäßig als Teil einer Antwort, dass ich überrascht war, dass es nicht so einfach gefragt wurde.
James Ryan
Die Antwort hängt stark von der Wiederherstellungsoption der Datenbank ab: einfach oder vollständig?
Richard
1
Danke für die Klarstellung, Ron. Da es sich um eine Entwicklungsdatenbank handelt, sollten Sie das Wiederherstellungsmodell zusätzlich zum Verkleinern der Protokolldatei auf EINFACH ändern, da sonst das Problem erneut auftritt.
BradC

Antworten:

11

Oh, der Schrecken! Bitte hören Sie auf, den Leuten zu sagen, dass sie ihre Protokolldateien verkleinern sollen!

Wenn Sie sich in diese Situation gebracht haben, ist einer der folgenden Fälle äußerst wahrscheinlich:

  1. Ihre Datenbank befindet sich im vollständigen Wiederherstellungsmodus und sollte sich wirklich im einfachen Modus befinden
  2. Ihre Datenbank befindet sich im vollständigen Wiederherstellungsmodus, und Sie sollten regelmäßige Protokollsicherungen durchführen
  3. Ihre Datenbank befindet sich im vollständigen Wiederherstellungsmodus und Ihre Protokollsicherungen schlagen aus irgendeinem Grund fehl
  4. Sie führen massiv große Transaktionen aus, bei denen die Protokolldatei auf riesige Größen vergrößert wird

Die Antwort für jede dieser Fragen lautet wie folgt:

Wenn (1), dann schalten Sie die Datenbank in den einfachen Modus
Wenn (2), dann planen Sie regelmäßige Protokollsicherungen
Wenn (3), dann korrigieren Sie Ihre geplanten Protokollsicherungen
Wenn (4), dann tun Sie das einfach nicht :) Tun Sie es stattdessen arbeiten in kleineren Chargen.

Beachten Sie, dass KEINE davon die Verwendung des (veralteten) "Sicherungsprotokoll-Datenbanknamens mit nur truncate_only" erfordert.

Stattdessen , wenn Sie tun löschen Sie die Protokolldatei eine der oben genannten Techniken, dann schrumpfen die (jetzt leer) log mit:

DBCC SHRINKFILE ('log logical name', 2000)

Geben Sie immer eine angemessene Endgröße an, sonst wird sie auf fast 0 verkleinert, und wenn sie das nächste Mal benötigt wird, muss sie sich Zeit nehmen, um zu wachsen.

BradC
quelle
Es ist schade, dass die akzeptierte Antwort so schnell war. Dies ist eine der Fragen, mit denen ich SQL-Administratoren während Interviews aussortiere. Wenn sie mit truncate_only mit einem Backup zurückkommen, zählt dies als 2 Treffer.
Jim B
2
Ich bin damit einverstanden, dass es das absolut Letzte ist, die Datei zu verkleinern. Eine korrekte Wartung macht dies überflüssig. Aber sobald es groß ist und Sie es kleiner haben möchten, müssen Sie es verkleinern. Beim Verkleinern ist es jedoch besser, die Datei so klein wie möglich zu verkleinern und sie dann in Schritten von 8 GB auf die richtige Größe zu vergrößern. Dadurch wird die Anzahl der VLFs in der Datei optimiert. Siehe - sqlskills.com/BLOGS/KIMBERLY/post/… .
Brian Knight
1
Interessanter Link, es scheint, dass es nur gilt, wenn Ihr Trans-Log über 8 GB ist. Ich denke, BradCs Punkt (oder zumindest meiner) ist, dass es ja Notfälle gibt, die Sie dazu veranlassen, Ihre Protokolldatei zu verkleinern, aber Sie sollten erkennen, dass Sie gerade Ihre Sicherungskette abgespritzt haben, wenn Sie die berüchtigte Sicherungs- / W-Kürzung ausführen, gefolgt von Schrumpfdatei (Ich hoffe, das war nichts Wichtiges), und abgesehen von Speicherplatzproblemen haben Sie höchstwahrscheinlich einige schwerwiegende SQL Server-Probleme, wahrscheinlich aus Sicht des Datenbankdesigns oder aus architektonischer Sicht. Ohne das zugrunde liegende Problem zu beheben, haben Sie sich bestenfalls etwas Zeit gekauft.
Jim B
4

Nachdem Sie die "Sicherung mit truncate_only" durchgeführt haben, sollten Sie den folgenden Befehl zum Verkleinern ausgeben

dbcc SHRINKFILE (logfilename,shrink_tosize)

z.B

dbcc SHRINKFILE (mydatabase_Log,512)
Mani
quelle
3

Das oben geschriebene Skript markiert den Protokollinhalt zur Wiederverwendung. Folgen Sie diesem Skript mit:

USE <database>;

DBCC SHRINKFILE (<log logical file name>)

Das wird es für Sie verkleinern.

Brian Knight
quelle