Ich hatte dieses Problem schon einmal.
- Sie haben eine große Datenbank und ein kleines Protokolllaufwerk. Sie möchten eine Reorganisation durchführen (aus verschiedenen Gründen).
- Wenn Sie dies für eine große fragmentierte Tabelle versuchen, wird das Protokoll gefüllt, bis das Protokolllaufwerk voll ist, und der Befehl wird abgebrochen.
- Im einfachen Modus schlagen andere Transaktionen möglicherweise fehl, bis das Protokoll beim nächsten Prüfpunkt gelöscht wird. Im vollständigen Modus schlagen andere Transaktionen möglicherweise bis zur nächsten Protokollsicherung fehl. Ausfall!
- Wenn Sie sich im Vollmodus befinden, erhöhen Sie die Häufigkeit der Protokollsicherungen, dies hilft jedoch nicht, da die Reorganisation in einer impliziten Transaktion erfolgt. Das Protokoll wird erst dann gelöscht, wenn diese Transaktion abgeschlossen oder abgebrochen oder gestoppt wurde.
- Und Sie möchten WIRKLICH, dass die Reorganisation vollständig ausgeführt wird.
Dies ist etwas kontraintuitiv, da Sie wissen, dass bei einem Abbruch der Reorganisation die Transaktion an der Stelle fortgesetzt werden kann, an der sie aufgehört hat.
Hier ist was du tust. Es ist etwas lang, aber unkompliziert.
- Erweitern Sie Ihre Protokolldatei vorab auf eine relativ große Größe, jedoch nicht die maximale Größe. Grundsätzlich sollten Sie genügend Platz lassen, um nützliche Arbeiten ausführen zu können, sowie einige kleine Wachstumsraten, falls diese auftreten, damit der normale Betrieb nicht aufhört.
- Erstellen Sie einen Job, um die Indexreorganisation auszuführen ('Reorganize').
Erstellen Sie eine Agent-WMI-Warnung ('Relief Valve reorganisieren') für eine Leistungsbedingung.
- Objekt: SQLServer: Datenbanken
- Leistungsindikator: Verwendetes Prozentprotokoll
- Instanz: (Ihr großer Datenbankname)
- Alarm, wenn der Zähler über 80 steigt
- Antwort: Job ausführen ('Check reorganisieren')
Erstellen Sie einen Job ('Reorganize Check')
- Überprüfen Sie im Job msdb.dbo.sysjobactivity, ob der Job 'Reorganize' ausgeführt wird. Und wenn es ist ...
- Stoppen Sie den Job und rufen Sie ihn ab, bis er stoppt. Dies kann einige Sekunden dauern.
- (Wenn Sie sich im Vollmodus befinden) Lösen Sie Ihren Protokollsicherungsjob aus und bestätigen Sie, wenn er abgeschlossen ist.
- Überprüfen Sie die sys.dm_os_performance_counters, die Ihr Leistungsindikator für den freien Speicherplatz unter Ihren Schwellenwert gesenkt hat.
- Starten Sie den Job "Reorganisieren".
Testen Sie dies alles irgendwo, sogar in einer Entwicklungs-Sandbox, um sicherzustellen, dass es ordnungsgemäß funktioniert, bevor Sie es auf Ihren Produktionsserver kleben.
Was Sie sehen, ist, dass der "Reorganisieren" -Job startet und beginnt, das Protokoll zu füllen. Wenn das Protokoll einen prozentualen Füllstand erreicht, wird die WMI-Warnung (innerhalb von 30 Sekunden) ausgelöst, die Ihren anderen Job ausführt. Dabei wird festgestellt, dass der Job "Reorganisieren" ausgeführt wird und möglicherweise ein Fehler vorliegt. Anschließend wird "Reorganisieren" gestoppt, eine Sicherungskopie erstellt, bestätigt, dass der freie Speicherplatz für Protokolle wieder einen vernünftigen Wert aufweist, und anschließend wird der "Reorganisieren" -Job erneut gestartet, der dort fortgesetzt wird, wo er aufgehört hat.
In diesem Szenario können Sie die Größe Ihres Protokolls auf einen vernünftigen Wert einstellen, indem Sie die Anzahl der Schritte Wachstum / Trigger / Job / Stopp / Neustart verringern, damit es effizienter wird und auch genügend Speicherplatz für das Protokoll bleibt gelegentliche Wucherungen, die nicht rechtzeitig erfasst werden.
Dies ist eine Art seltsames Szenario. Ich bin mir ziemlich sicher, dass ich mich vor ein paar Jahren darüber hinweggesetzt hätte, und offensichtlich gibt es hier grundlegende Probleme. Wenn Sie sich jedoch mit Hunderten von Servern befassen, treten einige Randfälle wie diese auf, die aus geschäftlichen Gründen in keiner Weise behoben werden können, außer durch MacGyvering, eine temporäre Lösung, die die Aufgabe erledigt.
Solange es sicher, logisch, getestet und gut dokumentiert ist, sollte es kein Problem geben.