SQL Server 2005 Transaktionsprotokoll nicht Abgeschnitten
Ich habe eine Datenbank .mdf
- Datei, 138 GB zusammen mit einer Transaktions-log-Datei von 55 GB.
Den recovery-Modell wurde eingestellt, um Voll (die es nicht brauchen werden). Ich lief ein voll-backup der Datenbank und des Transaktionsprotokolls. Das Transaktionsprotokoll ist noch 55 GB mit kein freier Speicherplatz zum verkleinern der Datei.
Rannte ich, dass die Sicherung über SQL Server Management Studio GUI. Ich lief dann die folgenden Befehle, um zu versuchen zu zwingen, die trans-log zu schrumpfen:
BACKUP LOG database WITH TRUNCATE_ONLY
DBCC SHRINKFILE (logfile, TRUNCATEONLY )
Die log Datei ist immer noch 55 GB. Ich änderte dann die recovery-Modell zu Simple
auf und lassen Sie ihn ein paar Tage, aber es ist immer noch bei 55 GB. Ich habe versucht, diese 2 oben genannten Befehle wieder, aber es immer noch nicht abschneiden, nichts.
Egal was ich versuche, ist diese log-Datei wird nicht verkleinert. Da brauchen wir nicht das Transaktionsprotokoll an alle, ich habe sogar versucht die Datenbank getrennt wird, kann das umbenennen der log-Datei und schließen Sie Sie anschließend. Das funktioniert auch nicht, da es eigentlich 2 Transaktionsprotokolle, und ich bekomme eine Fehlermeldung, wenn Sie versuchen wieder zu befestigen, ohne die Protokolle. Die andere log-Datei ist nur 1 MB, und ich habe versucht, entfernen Sie diese als gut, aber bekommen Sie auch eine Fehlermeldung erhalten, sagen, es ist nicht leer.
Gibt es etwas, was mir fehlt, oder etwas anderes, ich versuchen kann?
Vielen Dank für jede Hilfe!!!
- Vielleicht von Interesse: blogs.lessthandot.com/index.php/DataMgmt/DBAdmin/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
"Ich habe sogar versucht die Datenbank getrennt wird, kann das umbenennen der log-Datei und anfügen": Das Protokoll ist nicht in eine optionale Komponente! Führen Sie DBCC CHECKDB sofort zu sehen, wenn Sie verursacht Korruption. Sie wird zu Beschädigungen führen, wenn es unflushed Seiten für einige Grund. Auch wenn du nicht spielen.
Dem SQL Server-log-Datei ist nicht in einem Informations-text-Protokoll.
Wenn Sie nicht brauchen, die melden, wechseln Sie in den einfachen Modus und schrumpfen Sie die log-Datei (Sie haben das bereits getan). TRUNCATE_ONLY ist veraltet, Ich weiß nicht, ob es funktioniert gar nichts.
Blick auf sys.Datenbanken und schaue auf den Wert in der log_reuse_wait_desc-Spalte. Es wird Ihnen sagen, was ist, halten Sie das log um.
In den seltenen Fällen, wo ich zum verkleinern des Transaktionsprotokolls, ich benutze einen etwas anderen Befehl auf dem SQL Server 2005 als die, die Sie versucht haben:
(
...with no_log
statt...with truncate_only
, und der zweite parameter derdbcc shrinkfile
müssen Sie die gewünschte neue Größe der log-Datei)Stellen Sie sicher, dass ich den Namen der log-Datei die Rechte (und weil ich zu faul bin, um geben Sie den Namen der Datenbank), benutze ich dieses Skript bekommt den Namen der Datenbank und die log-Datei automatisch:
Müssen Sie die Ausführung direkt in der Datenbank, die Sie verkleinern möchten die log-Datei.
Disclaimer: ich habe noch nie verwendet es auf einer Datenbank, die mehr als eine log-Datei, wie deiner. Haben Sie vielleicht, es zu ändern, wenn er feststellt, die falsche log-Datei standardmäßig.
Können Sie die recovery-Modus zu
Simple
bevor Sie das Skript ausführen, wenn Sie nicht brauchenFull
recovery-Modus sowieso.Und Sie sollten eine vollständige Sicherung unmittelbar nach dem verkleinern der log.
Dies ist sehr wichtig, wenn Sie verlassen die Datenbank in
Full
recovery-Modus!(da schrumpft das Protokoll wird die Protokollkette unterbrochen, was bedeutet, dass die nachfolgenden log-sicherungen sind nutzlos, bis Sie die nächste voll-backup)
Ersten, können Sie die anfängliche Größe der Protokolldatei niedriger? Wenn jemand fing es auf 55GB, es kann nicht tiefer gehen als das.
Zweitens, werden Sie wahrscheinlich brauchen nicht zwei Transaktionsprotokolle. Der zweite wird "aktiv", aber nicht verwendet, bis die erste voll ist. Die erste vielleicht nie voll, wenn du keine eingeschränkten Wachstum und Sie haben noch Speicherplatz übrig.
Dritten, wie @JohnNolan vorgeschlagen (und als ich war über zu empfehlen), versuchen Sie, ein checkpoint, da sollte es eine Protokollkürzung unter dem einfachen Wiederherstellungsmodell.
Außerdem ist es empfohlen, dass Sie vermeiden Sie die Verwendung von
TRUNCATE_ONLY
.Versuchen Sie es mit einer
checkpoint
http://msdn.microsoft.com/en-us/library/ms188748.aspxDiesem schreiben werden alle modifizierten Seiten auf den Datenträger geleert log-Seiten aus dem Puffer-cache der aktuellen Datenbank, die Minimierung der Anzahl von änderungen, die ein Rollforward während einer Wiederherstellung. Es entsteht ein neues minimum recovery log sequence number (lsn) und löscht alle Aufzeichnungen vor, die-lsn, ist das verkleinern der Datei.
es wurde ein Problem mit ms sql-Servern aber hier ist die Lösung....
Kraft abschneiden, die Datenbank der ff:
hier ist der code für die Kraft schrumpfen
hoffe, das hilft.
Wie ich dies beheben:
1) wählen Sie die log_reuse_wait_desc-aus sys.databases where name = 'your_db_name'
Dieser wird Euch geben, was zu verhindern VLFs aus wiederverwendet werden. Während der langsamen Zeiten (d.h. wenn das Protokoll nicht verwendet wird viel, dies sollte 'NONE'). Sie müssen möglicherweise zu beheben, wenn Sie sehen, einen anderen Wert.
2) werfen Sie einen Blick auf die Ausgabe von dbcc loginfo. Es gibt eine Zeile für jede Protokolldatei, die Sie in Ihrer log-Datei. Die Spalte status zeigt an, ob der VLF ist oder nicht. Um zu verkleinern, das Protokoll, müssen Sie die unbenutzte VLFs am Ende der Datei. Sie können warten, für eine Natürliche Aktivität, dies zu tun. Da VLFs gewöhnen, in einer Art ring, den ungenutzten man(N) sollte schließlich am Ende der Datei.
Verwenden Sie die folgende Abfrage: