Ich muss mich derzeit mit einem SQL Server-Transaktionsprotokoll befassen, das außer Kontrolle geraten ist. Haftungsausschluss: Ich bin kein dba und dies ist nicht mein Fachgebiet. Bitte nehmen Sie Kontakt mit mir auf.
Derzeit habe ich eine 115-GB- Transaktionsprotokolldatei für eine 500-MB-Datenbank, die (offensichtlich) seit einiger Zeit schlecht verwaltet wurde, um in diesen Zustand zu gelangen.
Die oberste Priorität ist es, den von dieser Datei belegten Speicherplatz auf der Festplatte zurückzugewinnen, bevor wir leer sind! Mir wurde gesagt, dass eine Vergrößerung des Laufwerks auch vorübergehend keine Option ist. Aufgrund des Wachstums in der Vergangenheit müssen wir ziemlich bald handeln.
Soweit ich weiß, besteht der beste Ansatz darin, die Datenbank im vollständigen Wiederherstellungsmodus zu belassen, aber regelmäßige Sicherungen der Protokolldatei durchzuführen, diese über einen bestimmten Zeitraum zu überwachen und die anfängliche Größe und das Inkrement entsprechend anzupassen. Alles okay.
Da wir um Mitternacht regelmäßig vollständige DB-Sicherungen durchführen, ist es für mich sicher, die Datenbank vorübergehend in den einfachen Wiederherstellungsmodus zu versetzen (nachdem eine dieser Sicherungen ausgeführt wurde), die Protokolldatei zu verkleinern, um (praktisch den gesamten) Speicherplatz und den Speicherplatz zurückzugewinnen Setzen Sie es dann mit der oben genannten Sicherungsstrategie wieder in die vollständige Wiederherstellung ein.
Ich denke, wenn etwas um diese Zeit passiert ist, können wir einfach die vollständige Sicherung wiederherstellen, ohne die Protokolle zu verwenden.
AKTUALISIEREN
Einige zusätzliche Details als Antwort auf einige der Antworten und Kommentare:
Wir möchten die Möglichkeit behalten, eine Wiederherstellung zu einem bestimmten Zeitpunkt durchzuführen, damit die Datenbank im vollständigen Wiederherstellungsmodus bleibt.
Der Grund dafür, dass die T-Log-Datei so groß geworden ist, ist, dass sie nie gesichert wurde . Verifiziert als log_reuse_wait_desc gibt 'LOG_BACKUP' zurück.
quelle
Antworten:
Das Transaktionsprotokoll für diese Datenbank enthält alle Transaktionen seit der letzten Transaktionsprotokollsicherung oder dem letzten Wechsel aus dem einfachen Wiederherstellungsmodus. Führen Sie die folgenden Schritte aus, um die endgültige Antwort zu erhalten, warum SQL Server das Protokoll nicht abschneiden kann und warum das Protokoll anschließend wächst.
Wenn Sie eine Wiederherstellung zu einem bestimmten Zeitpunkt wünschen, belassen Sie die Datenbank im vollständigen Wiederherstellungsmodell und führen Sie häufige Protokollsicherungen durch. Jede Protokollsicherung enthält alle Transaktionen seit der letzten Protokollsicherung. Der Protokollsicherungsprozess ist auch dafür verantwortlich, das Protokoll zu löschen und den Speicherplatz für die Wiederverwendung zu markieren. Das heißt, die nächste in der Datenbank durchgeführte Transaktion wird zirkulär an den Anfang des abgeschnittenen Protokolls geschrieben. Diese Sicherung und Wiederverwendung des Protokolls verhindert, dass die Protokolldatei wächst.
Wenn Sie nicht an einer Wiederherstellung zu einem bestimmten Zeitpunkt interessiert sind und die Verwaltung der Datenbank vereinfachen möchten. Stellen Sie dann die Datenbank auf das einfache Wiederherstellungsmodell ein und führen Sie keine T-Log-Sicherungen durch. SQL Server schneidet das Transaktionsprotokoll automatisch ab, nachdem jede Transaktion festgeschrieben wurde. Das heißt, sobald die Transaktion in das Protokoll übernommen wurde, wird der Datensatz durch die nächste Transaktion usw. überschrieben.
Sobald Sie eine dieser beiden Entscheidungen getroffen haben, können Sie die Protokolldatei auf eine vernünftigere Größe verkleinern. Beachten Sie, dass Sie es idealerweise groß genug machen möchten, damit es nicht wächst, aber nicht so groß, dass Sie es erneut verkleinern müssen. Beachten Sie auch, dass Sie den aktiven Teil des Protokolls nicht verkleinern können.
Laden Sie die Datenbankverwaltungslösung https://ola.hallengren.com/ herunter und stellen Sie sie bereit, um Backups, Indexfragmentierung, Statistiken und CHECKDB abzudecken.
Sie können den zurückgegebenen Bericht "Festplattennutzung" auch finden, indem Sie mit der rechten Maustaste auf die Datenbank in Objekt-Explorer> Berichte> Standardberichte> "Festplattennutzung" klicken, um den freien Speicherplatz im T-Protokoll zurückzugeben.
Ich empfehle Google auch, warum es aus DR-Sicht so wichtig ist, die Protokollkette intakt zu halten, und wie der Wechsel von voll zu einfach die Kette unterbricht und Sie Datenverlusten aussetzt.
quelle
Ja, es ist sicher, vorausgesetzt, Sie stören dabei keine Transaktionen, z. B. eine nächtliche Ladung. Wenn sich eine Datenbank im vollständigen Wiederherstellungsmodus befinden soll, möchten Sie im Allgemeinen regelmäßige T-Log-Sicherungen. Dies reduziert das Problem, mit dem Sie konfrontiert sind. Ich schreibe "allgemein", weil ich in einigen Fällen gesehen habe, wie Leute eine Datenbank auf voll gesetzt haben, ohne zu wissen, warum sie es getan haben. Nehmen wir an, dass dies nicht der Fall ist.
Möglicherweise möchten Sie jedoch überlegen, warum das Protokoll diese Größe im Verhältnis zur Datenbankgröße hat. Eine 500-MB-Datenbank mit einem 116-GB-Protokoll scheint für ein einmaliges Ereignis sehr unverhältnismäßig zu sein. Ich würde vorschlagen, zu überwachen, was in der Datenbank passiert, um zu sehen, wie sie überhaupt zu dieser Größe gelangt ist.
quelle