Was ist der Befehl zum Abschneiden einer SQL Server-Protokolldatei?

192

Ich muss eine LDF-Datei leeren, bevor ich sie an einen Kollegen sende. Wie zwinge ich SQL Server, das Protokoll abzuschneiden?

Aidan Ryan
quelle

Antworten:

131

wenn ich mich gut erinnere ... im Abfrageanalysator oder gleichwertig:

BACKUP LOG  databasename  WITH TRUNCATE_ONLY

DBCC SHRINKFILE (  databasename_Log, 1)
ila
quelle
2
Dies ist definitiv besser, als das Datenbankwiederherstellungsmodell auf EINFACH zu setzen (wie in Blorgbeards Antwort), denn wenn Ihr Wiederherstellungsmodell VOLL ist, haben Sie es aus einem bestimmten Grund so eingestellt.
Scott Whitlock
52
truncate_only ist in SQL Server 2008 veraltet, daher müssen Sie die Datenbank
Justin Moore
10
Für SQL Server 2012 funktioniert dies, jedoch ohne WITH TRUNCATE_ONLY.
net_prog
4
Zusätzlich zu den Aussagen von net_prog habe ich für SQL Server 2012 die erste Zeile ersetzt BACKUP LOG DatabaseNameHere TO DISK='NUL:'.
Aaron Newton
'TRUNCATE_ONLY' ist keine erkannte BACKUP-Option. (SQL Server 2019 RC1)
Tomasz Gandor
304

Im Managementstudio:

  • Tun Sie dies nicht in einer Live-Umgebung, sondern um sicherzustellen, dass Sie Ihre Entwickler-Datenbank so weit wie möglich verkleinern:
    • Klicken Sie mit der rechten Maustaste auf die Datenbank, wählen Sie Propertiesdann Options.
    • Stellen Sie sicher, dass "Wiederherstellungsmodell" auf "Einfach" und nicht auf "Voll" eingestellt ist.
    • OK klicken
  • Klicken Sie erneut mit der rechten Maustaste auf die Datenbank und wählen Sie Tasks-> Shrink->Files
  • Ändern Sie den Dateityp in "Protokoll".
  • OK klicken.

Alternativ kann die SQL dies tun:

 ALTER DATABASE mydatabase SET RECOVERY SIMPLE
 DBCC SHRINKFILE (mydatabase_Log, 1)

Ref: http://msdn.microsoft.com/en-us/library/ms189493.aspx

Blorgbeard ist raus
quelle
1
Ihre Antwort hat gerade meinen Tag gerettet! Ich kannte die Option "Rechtsklick - Aufgaben -> Verkleinern" nicht. Danke dir!
René
7
Was machst du in einer Live-Umgebung? Zuerst die Protokolle sichern?
John Bubriski
1
Ich bin kein DBA, aber ja, ich glaube, dass das Sichern des Protokolls es abschneiden wird: technet.microsoft.com/en-us/library/ms179478.aspx
Blorgbeard ist
2
@JohnBubriski Wenn Sie ein anderes als einfaches Wiederherstellungsmodell verwenden, sind die Protokolle die Grundlage für die Wiederherstellung von Daten oder das Zurücksetzen von Transaktionen. In der Produktion müssen Sie diese Protokolle also zuerst sichern, bevor Sie die Protokolldateien verkleinern können. Andernfalls gibt es keine tatsächliche Wiederherstellungsmöglichkeit. Wenn Sie sich in einer Wiederherstellungssituation befinden, müssen Sie leider alle Transaktionsprotokollsicherungen neu laden, um die Datenbank vollständig wiederherzustellen. Lustige Zeiten, um sicher zu sein! :)
definiert
1
in SQL Server 2012 musste ich use mydatabasevor der Ausführungdbcc shrinkfile
knb
62

Für SQL Server 2008 lautet der Befehl:

ALTER DATABASE ExampleDB SET RECOVERY SIMPLE
DBCC SHRINKFILE('ExampleDB_log', 0, TRUNCATEONLY)
ALTER DATABASE ExampleDB SET RECOVERY FULL

Dadurch wurde meine 14-GB-Protokolldatei auf 1 MB reduziert.

Nathan R.
quelle
5
Da die Frage nicht eindeutig ist, welche Version und die akzeptierte Antwort nicht für SQL Server 2008 gelten, ist diese Antwort unabhängig vom Alter weiterhin gültig.
James Law
Danke, es hat mir geholfen, eine große Protokolldatei zu reduzieren, die nicht mit DBCC SHRINKFILE
Christian Navelot reagiert hat.
6
Vergessen Sie nicht, das Wiederherstellungsmodell wieder auf FULL zu ändern, wenn Sie fertig sind!
Dan Bechard
Sie sollten vorher eine Sicherungskopie erstellen (oder eine der anderen Kürzungsoptionen). Wenn Sie eine vollständige Sicherung durchführen und die Option "Nur Sicherung kopieren" in SSMS aktivieren, benötigen Sie das Protokoll nicht mehr. (Dies ist nur eine Sicherung zu einem bestimmten Zeitpunkt).
Simon_Weaver
37

Für SQL 2008 können Sie das Protokoll auf dem nulGerät sichern :

BACKUP LOG [databaseName]
TO DISK = 'nul:' WITH STATS = 10

Und dann verwenden Sie, DBCC SHRINKFILEum die Protokolldatei abzuschneiden.

Matej
quelle
2
Dies ist die einzige, die in meiner Situation funktioniert hat ... Ich habe einen Fehler beim Versuch, Backup mit TRUNCATE_ONLY
TomXP411
Hinweis: Dies kann selbst auf einer SSD eine Weile dauern (das Protokoll muss gelesen werden, um es verwerfen zu können). Bei einer 30-GB-Protokolldatei auf einer Azure-VM mit mäßiger Stromversorgung dauert es 10 Minuten, bis 40% erreicht sind. Stellen Sie sicher, dass Sie in SSMS zu "Nachrichten" wechseln, um den verarbeiteten Prozentsatz anzuzeigen.
Simon_Weaver
3

Sicherungsprotokoll-Logname mit truncate_only, gefolgt von einem Befehl dbcc shrinkfile

SQLMenace
quelle
0

Da wurde die Antwort für mich in den Kommentaren begraben. Für SQL Server 2012 und höher können Sie Folgendes verwenden:

BACKUP LOG Database TO DISK='NUL:'
DBCC SHRINKFILE (Database_Log, 1)
rip747
quelle
-5

Eine weitere Möglichkeit besteht darin, die Datenbank über Management Studio zu trennen. Löschen Sie dann einfach die Protokolldatei oder benennen Sie sie um und löschen Sie sie später.

Zurück in Management Studio hängen Sie die Datenbank erneut an. Entfernen Sie im Anhängefenster die Protokolldatei aus der Liste der Dateien.

Die Datenbank hängt eine neue leere Protokolldatei an und erstellt sie. Nachdem Sie überprüft haben, ob alles in Ordnung ist, können Sie die umbenannte Protokolldatei löschen.

Sie sollten dies wahrscheinlich nicht für Produktionsdatenbanken verwenden.

Rask
quelle
4
Mach das niemals! Das Protokoll enthält möglicherweise Daten, die noch nicht in die Datendatei übernommen wurden. Sie würden solche Daten verlieren.
Paul
Wenn Sie in Ihrer Antwort davor warnen, es in der Produktion zu versuchen, lohnt es sich überhaupt nicht, es zu veröffentlichen.
Stan Shaw
9
Ich bin mit den Downvotern nicht einverstanden - es ist eine Option. Administratoren müssen nur ihr Szenario verstehen. Beispiel: Es gibt keine nicht festgeschriebenen Daten, wenn keine offenen Transaktionen vorhanden sind.
Gerard ONeill
3
Dies ist die einzige Lösung, die für mich funktioniert hat. Mein Laufwerk war voll und ich konnte nicht sichern oder schrumpfen und nichts anderes schien zu funktionieren. Danke dir!
Brian
3
Genau; Es ist keine bewährte Methode, aber es ist ein wertvolles Werkzeug, wenn Sie keine anderen Optionen wie Brians Szenario haben.
ScottFoster1000