Grundsätzlich gilt: Wenn das Recovery-Model der Datenbank auf SIMPLE steht gibt es kein Transaction-Log. Bei Recovery-Model FULL werden alle Transaktionen die die Daten in der DB verändern in das Transaction-Log geschrieben. Dieses wächst und wächst, bis es seine maximale Grösse erreicht hat oder die Disk voll ist. Spätestens dann hat man ein Problem.

Wichtig: Wenn man mit Recovery-Model FULL arbeitet, ist es zwingend regelmässig Backups der Datenbank zu machen. Dabei wird nämlich auch das Transaction-Log gebackupt und ist danach wieder leer.

Ist eine Disk vollgelaufen oder erhält man die Fehlermeldung "The transaction log for database <dbname> is full", verschafft man sich am Besten zuerst mal einen Überblick über alle Transaction-Logs auf dem Server:

DBCC SQLPERF(logspace)

Hat ein Transaction-Log seine maximale Grösse erreicht (Log Size Used 100%), muss man es backupen. Folgender Befehl würde das Transaction-Log der Datenbank "cms" auf Laufwerk D: schreiben:

BACKUP LOG [cms]
TO DISK = N'D:\cms_log_backup.trn' WITH NOFORMAT, INIT,
NAME = N'Transaction Log  Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10

Danach ist der belegte Platz wieder bei 0%, die Datei des Transaction-Logs auf Disk ist allerdings immer noch gleich gross. Häufig möchte man wieder Platz auf der Disk machen und das Transaction-Log soll verkleinert werden. Dazu muss man zuerst wissen die die Datei des Transaction-Logs einer Datenbank heisst. Diese Information findet man in den Eigenschaften der Datenbank oder aber über folgenden Befehl:

SELECT name FROM sys.database_files WHERE type_desc = 'LOG'

Um Jetzt die Grösse dieser Datei auf z.B. 1 GB zu verkleinern, dient folgender Befehl:

DBCC SHRINKFILE ('cms_log', 1000)

In diesem Beispiel wird davon ausgegangen dass der Name der Transaction-Log Datei "cms_log" lautet. Die neue Dateigrösse wird in MB angegeben (1000 MB = 1 GB).

 

Kommentare


Kommentare sind geschlossen.