Das Transaktionslog ist zu groß, die Platte läuft voll

Das Transaktionslog ist zu groß, die Platte läuft voll

Vorab, bitte beachten: Dies ist kein Bestandteil des enaio Support-Wartungsvertrages. Wir übernehmen keine Garantien. 

 

Es kommt immer wieder vor, dass vergessen wird das Transaktions-Log des Microsoft SQL-Servers zu sichern und zu kürzen. Damit wächst es an bis kein Plattenplatz mehr verfügbar ist. 
Man kann das Log auf nachfolgende Weise kürzen.
Voraussetzung ist aber, dass die Datenbank (seit Erstellung) einmal gesichert wurde. Ist dies nicht erfolgt, hilft der nachfolgende Workaround (= Import/Export der Daten),
siehe Datenbankumzug

Wichtig: Die enaio Dienste sollten beendet werden, sonst dauert es länger oder läuft sogar auf andere Fehler. 

verwendete Abkürzungen: 
DB = Datenbank 
MSSQL = Microsoft SQL Server 

 

Beispiel, das Log ist zu groß: 

 

Schritt-für-Schritt-Anleitung

Kürzen des Transaktionsprotokolls:

Hierfür reichen im Normalfall auch DBOwner-Rechte. Besser wären aber Admin-Rechte (z. Bsp. sa-Benutzer oder ein anderer DB-Admin). Es sollte aber noch etwas Plattenplatz verfügbar sein (0 kB ist zu wenig). 
Es empfiehlt sich alle enaio Dienste zu stoppen, da der Zugriff auf die Datenbank nicht gewährleistet ist.

  1. MSSQL-Management-Studio starten oder ein anderes ODBC-Tool. Besser wäre aber das Management-Studio, da das Kürzen länger dauern kann und eine ODBC-Verbindung einen Timeout hat. 

  2. neue Abfrage erstellen und entweder die Datenbank auswählen oder diesen Befehl benutzen: 

    USE [datenbankname]; 
  3. Sicherungs-Tag schreiben.
    Eine komplette Sicherung ist ab einer bestimmten Größe nicht mehr so ohne weiteres möglich. Daher kann auch ein Tag in das Transaktionslog einfügen. Bis zu diesem kann die Datenbank dann gekürzt werden. Statement:

    BACKUP LOG [datenbankname] TO DISK='NUL:'; 

    Das kann eine Weile dauern, je nach Größe des Transaktions-Logs und des verfügbaren Speichers (RAM und Platte).

  4. Kürzen.
    Die Nummer des Transaktions-Logs ermitteln. Im Normalfall ist Nr. 2 immer das Transaktionslog. Die Datenbank könnte aber gesplittet sein oder Teile in den Speicher geladen sein.
    Daher bitte prüfen:

    SELECT * FROM DBO.SYSFILES; 

    Die Abfrage gibt Datenbankinformationen aus. Die Zeilen-Nr. mit dem Transaktionslog ermitteln (= LDF-Datei).

    Hier ein Beispiel für Datenbank PH1010:  Das Transaktions-Log hat die Nr. 2


    Befehl zum Kürzen:

    DBCC SHRINKFILE (<nummer bzw. file-id des Transaktionslogs>,<Größe auf die gekürzt werden soll>); 
  5. Beispiel für Datenbank enaioprod: 

    USE [enaioprod]; BACKUP LOG [enaioprod] TO DISK='NUL:';  DBCC SHRINKFILE (2,10); 

    Ggfls. müssen die Punkte 3 und 4 wiederholt werden. Manchmal wird nicht beim 1. Versuch gekürzt.

 

Workaround: 

Sollte das Kürzen aufgrund Fehler oder mangels Plattenplatz zum Schreiben des Sicherungstags (vorheriger Punkt 3) fehlschlagen oder sollte gar keine Sicherung der Datenbank vorhanden sein, dann hilft nur ein Workaround.

Beispiel für die Datenbank wurde noch nie gesichert und das Transaktionslog kann damit nicht gekürzt werden: 



  1. enaio Dienste beenden.

  2. Dem Server temporär eine weitere Platte einhängen (oder die Platte erweitern). 

  3. MSSQL-Management-Studio starten und mit einem administrativen Benutzer anmelden.

  4. Eine neue temporäre Datenbank mit Pfadangabe auf der neuen Platte erstellen. Benutzer und Passwort sind dabei egal, es sei denn, dass diese neue Datenbank nicht temporär, sondern dauerhaft verwendet werden soll. 

  5. Danach einen Import oder Export aller Tabellen von der zu großen Datenbank in die neu angelegte Datenbank ausführen, siehe auch Datenbankumzug Punkt "Import/Export"
    Wichtig: Bitte auch prüfen, ob jemand Views oder Funktionen oder Prozeduren oder Datenbanktrigger erstellt hat. Diese Konfigurationen müssen gesichert werden, damit sie am Ende wiederhergestellt werden können. 

  6. Anschließend die zu große Datenbank löschen. 
    Tipp: Den Haken bei “alle Verbindungen schließen” setzen (die genaue Bezeichnung ist abhängig vom MSSQL-Server) .

  7. Eine neue Datenbank anlegen mit dem gewünschten Namen. Enaio-Datenbank-Benutzer und Schema anlegen bzw. zuweisen, siehe Wie sollte ein Datenbank-Benutzer angelegt werden (inkl. Schema) - MSSQL-Server?

  8. Die Daten aus der temporären Datenbank wieder importieren oder exportieren, siehe auch Datenbankumzug Punkt "Import/Export". Hierbei ist wichtig, dass beim Ziel der enaio-Datenbankbenutzer angegeben wird. Ansonsten stimmt das Schema nicht und die Daten sind nicht im Zugriff. 

  9. Sofern noch View, Prozeduren oder Datenbanktrigger einzurichten sind, diese bitte einrichten. 

  10. Die enaio Dienste können wieder gestartet werden.

 

 

 

Gut zu wissen: Die Daten werden immer im Transaktionsprotokoll vorgehalten, auch wenn der Datenbankmodus auf "simple" gestellt ist. Das Kürzen ist damit aber ggfls. nicht so einfach möglich. 

Falls das Kürzen nicht funktioniert, bitte diese Schritte prüfen: Was tun, wenn das Transaktionslog nicht gekürzt werden kann?

Verwandte Artikel