Fehlerbehebung für die Transaktionsprotokolldatei (.LDF) der BarTender Systemdatenbank
Symptome
Sie haben festgestellt, dass die Systemdatenbank ungewöhnlich groß geworden ist und die Wartung mit folgender Fehlermeldung fehlschlägt:
Gespeicherte Prozedur: [dbo].[SpDeleteOlderRecords] Fehlgeschlagen; Interne Meldung: Das Transaktionsprotokoll für Datenbank 'SystemDB' ist voll aufgrund von 'ACTIVE_TRANSACTION'
Umgebung
BarTender Systemdatenbank
Diagnose
Überprüfen Sie in der Administrationskonsole unter „Administrative Aufgaben > Datenbankgröße anzeigen...“, dass die Größe der Transaktionsprotokolldatei klein ist.
Normalerweise wächst die SQL Server Transaktionsprotokolldatei (.LDF) für die BarTender Systemdatenbank während der Wartung, sollte aber nach Abschluss der Wartung wieder auf ihre ursprüngliche Größe schrumpfen. Das passiert jedoch nicht immer und die LDF-Datei wird zu groß.
Lösung
Das Transaktionsprotokoll des Kunden ist nicht groß genug, um alle Transaktionsinformationen für die Wartungsvorgänge zu verarbeiten. Die Wartung besteht aus drei Schritten:
- Backup
- Ältere Einträge löschen
- Indizes reorganisieren oder neu erstellen (kann viel Speicherplatz im Transaktionsprotokoll benötigen)
Es wird empfohlen, mehr Speicherplatz für das Transaktionsprotokoll bereitzustellen. Außerdem sollte das Wiederherstellungsmodell auf „Einfach“ gesetzt werden, da dies deutlich weniger Speicherplatz im Transaktionsprotokoll benötigt.
Vorgehensweise:
- Überprüfen Sie im SQL Server Management Studio, wie groß das maximale Limit für Ihre Transaktionsprotokolldatei ist, indem Sie mit der rechten Maustaste auf Ihre Systemdatenbank klicken > Eigenschaften > Dateien.
- Überprüfen Sie in den Eigenschaften der Systemdatenbank, dass das Wiederherstellungsmodell auf „Einfach“ gesetzt ist, indem Sie mit der rechten Maustaste auf Ihre Systemdatenbank klicken > Eigenschaften > Optionen > Wiederherstellungsmodell.
- Führen Sie das „Manuelles Entsperren“-Verfahren durch, um die Wartung freizugeben, falls nötig (siehe unten).
- Starten Sie die Administrationskonsole, um die Wartung durchzuführen.
- Schauen Sie sich nach Abschluss der Wartung die Transaktionsprotokolldatei an, um zu sehen, wie stark sie gewachsen ist.
- Gehen Sie erneut in die Datenbankeigenschaften und setzen Sie das Größenlimit der Datei auf einen Wert in der Größenordnung der Dateigröße auf der Festplatte, anstatt auf unbegrenzt.
Hinweis: Wenn die Systemdatenbank aufgrund der Größenbeschränkung von SQL Server Express wöchentlich bereinigt werden muss, reicht das 10-GB-Limit möglicherweise nicht aus. Das System könnte eine vollständige SQL Server-Lizenz und eine eigene Festplatte (ggf. ein weiteres VMWare-Image/Server-Blade) benötigen. Beachten Sie, dass diese Änderungen regelmäßige Backups und Archivierungen der Datenbank nicht ersetzen.
„Manuelles Entsperren“-Verfahren
- Stoppen Sie den Windows-Dienst „BarTender System Service“.
- Öffnen Sie im SQL Server Management Studio den Objekt-Explorer (normalerweise linke Seitenleiste), erweitern Sie Ihre Datenbank und gehen Sie in den Ordner „Programmability“, dann in den Ordner „Stored Procedures“.
- Führen Sie die folgende Prozedur aus (wenn 0 Zeilen betroffen sind, führen Sie den Befehl erneut aus):
exec SpDsUnlockMaintenance 0
- Suchen Sie die Prozedur „SpDeleteRecords“.
- Klicken Sie mit der rechten Maustaste auf „SpDeleteRecords“ und wählen Sie „Script stored procedure as“ > „ALTER to“ > „New query editor window“.
- Entfernen Sie im neuen Editor „WITH EXECUTE AS 'dbo'“ aus der „ALTER PROC“-Zeile, sodass sie wie folgt aussieht:
ALTER PROC [dbo].[SpDeleteRecords](@pastUtcTicks bigint, @categories nvarchar(1024))
- Führen Sie nun diese Abfrage aus (in der Regel mit F5), um die gespeicherte Prozedur zu ändern.
- Starten Sie den Windows-Dienst „BarTender System Service“ neu.
Protokolldatei verkleinern
Sie sollten die folgende Abfrage ausführen, um die Größe der aktuellen Protokolldatei nach einer Aktion zu verkleinern, die viel ungenutzten Speicherplatz erzeugt, wie z. B. ein „truncate table“ oder „drop table“. (Im untenstehenden Skript müssen Sie [Database name] durch den Namen Ihrer Datenbank ersetzen)
-- Setzt das Wiederherstellungsmodell der Systemdatenbank auf EINFACH und führt dann den DBCC SHRINKFILE-Befehl für das Transaktionsprotokoll aus.
ALTER DATABASE "[Database name]" SET RECOVERY SIMPLE
DBCC SHRINKFILE ([Database name]_Log, 1);
GO
Weitere Ressourcen