2012-11-16 7 views
22

Das Transaktionslog für die Datenbank ist voll. Informationen darüber, warum der Speicherbereich im Protokoll nicht wiederverwendet werden kann, finden Sie in der Spalte log_reuse_wait_desc in sys.databases. Bitte helfen Sie mir, dieses Problem zu lösen. Vielen Dank im Voraus.Das Transaktionslog für Datenbank 'Datenbankname' ist voll.

+4

Haben Sie den Hinweis in der Fehlermeldung befolgt? Was hast du dort gefunden? Welche Untersuchungen haben Sie an diesem Punkt durchgeführt? –

+0

Gibt es tatsächlich keinen Datenbanknamen in der Nachricht? – egrunin

+1

Versuchen Sie, MSDN: [Ein Transaktionsprotokoll wird unerwartet vergrößert oder in SQL Server wird voll] (http://support.microsoft.com/kb/317375) Es hat eine ziemlich vollständige Erklärung des Problems. – egrunin

Antwort

16

Die wahrscheinlichste Antwort ist, dass Sie Protokollsicherungen oder gibt es eine offene Transaktion ausführen müssen.

Hier ist ein wenig mehr um Ihnen zu helfen ...

Führen Sie dieses Skript auf dem Server:

-- last FULL backup 
;with FULLBUs 
as (
    select d.name, max(b.backup_finish_date) as 'Last FULL Backup' 
    from sys.databases d 
     join msdb.dbo.backupset b 
      on d.name = b.database_name 
    where b.type = 'D' 
    group by d.name 
), 

-- last LOG backup for FULL and BULK_LOGGED databases 
LOGBUs 
as (
    select d.name, max(b.backup_finish_date) as 'Last LOG Backup' 
    from sys.databases d 
     join msdb.dbo.backupset b 
      on d.name = b.database_name 
    where d.recovery_model_desc <> 'SIMPLE' 
     and b.type = 'L' 
    group by d.name 
) 

-- general overview of databases, recovery model, and what is filling the log, last FULL, last LOG 
select d.name, d.state_desc, d.recovery_model_desc, d.log_reuse_wait_desc, f.[Last FULL Backup], l.[Last LOG Backup] 
from sys.databases d 
    left outer join FULLBUs f 
     on d.name = f.name 
    left outer join LOGBUs l 
     on d.name = l.name 
where d.name not in ('model', 'TempDB') 
order by d.name 

Diese Abfrage wird Ihnen eine grobe Übersicht über Ihre Datenbanken, welche Wiederherstellungsmodell sie sind Verwenden, warum das Protokoll voll ist und wann die letzten FULL- und LOG-Sicherungen ausgeführt wurden.

Betrachten Sie die Spalte mit der Bezeichnung log_reuse_wait_description. Höchstwahrscheinlich sagt es BACKUP. Nächste wahrscheinlichste Ursache ist TRANSACTION.

Wenn es BACKUP hier einige Informationen:

Grundsätzlich für einfache Datenbanken, jeden Tag eine vollständige Sicherung ausführen. Führen Sie für Ihre FULL-Datenbanken jeden Tag eine FULL-Sicherung und jede Stunde eine LOG-Sicherung aus. Passen Sie die Häufigkeit Ihrer LOG-Datenbanken an Ihre Fähigkeit an, Daten zu verlieren, während Sie Ihren Job behalten.

Die einfachste Möglichkeit zur Verwaltung Ihrer Sicherungen ist die Verwendung von Ola Hallengren's maintenance scripts. Besuchen Sie seine Website und versuchen Sie sie zu verwenden.

Wenn Sie TRANSACTION als Grund sehen, versuchen Sie laufen:

dbcc opentran 

Und die Spur zu kommen, wer ist es, die offenen Transaktionen hat.

+1

Sehr hilfreich, danke! –

+0

Alle von mir sagen entweder "NOTHING" oder "CHECKPOINT" in der Spalte log_reuse_wait_description. –

44

Zweifellos führen Sie die Datenbank unter Full Recovery Mode aus und konnten keine Transaktionsprotokollsicherungen durchführen.

Klicken Sie mit der rechten Maustaste auf Ihre Datenbank im SQL Server-Manager und überprüfen Sie die Seite Optionen. Wechseln Sie das Wiederherstellungsmodell von Full zu Simple und klicken Sie dann erneut mit der rechten Maustaste auf die Datenbank. Wählen Sie TasksShrink, Files. Schrumpfen Sie die Protokolldatei auf eine geeignete Größe (ich halte im Allgemeinen 20-25% der Größe der Datendateien).

Wechseln Sie zurück zu Full Recovery Model, und nehmen Sie sofort eine vollständige Datenbanksicherung vor.

Jetzt müssen Sie herausfinden, ob Sie die Datenbank zu einem Zeitpunkt wiederherstellen müssen. Wenn dies der Fall ist, planen Sie regelmäßige Transaktionsprotokolle und möglicherweise differenzielle Sicherungen gemäß den Anforderungen Ihres Unternehmens ein.

Wenn das Unternehmen mit einem gewissen Datenverlust leben kann, planen Sie vollständige Sicherungen und wechseln Sie in den Modus Simple.

+2

Zwischen dieser Antwort und @ Steven Antwort, einige gute Infos! –

0

Klicken Sie mit der rechten Maustaste auf die Datenbank \ Properties \ Files.

Sie haben eine Tabelle mit den Datenbankdateien, darunter eine Protokolldatei. Erweitern Sie einfach die Anfangsgröße auf einen angemessenen Betrag.

0

Tun Sie dies Klicken Sie mit der rechten Maustaste auf den Datenbankknoten -> Aufgaben-> Sichern-> Allgemein (in der Registerkarte) -> legen Sie "Sicherungstyp" auf "Transaktionsprotokoll" -> OK.

1

Wenn das Datenbankwiederherstellungsmodell voll ist und Sie keinen Wartungsplan für die Protokollsicherung haben, erhalten Sie diesen Fehler, weil das Transaktionsprotokoll aufgrund von LOG_BACKUP voll wird.

Dies wird verhindern, dass Sie eine Aktion für diese Datenbank wie eine Verkleinerung ausführen, und die SQL Server-Datenbankmodul wird einen Fehler 9002 auslösen.

, um dieses Verhalten zu überwinden, rate ich Ihnen, diese The transaction log for database ‘SharePoint_Config’ is full due to LOG_BACKUP, die detaillierte Schritte zeigen, um dieses Problem zu beheben, wie Protokollsicherung Wartungsplan zu überprüfen.

+2

Anstatt zu schreiben, wo die Antwort (im Link) zu finden ist, sollten Sie diese Informationen für diese Frage destillieren. Bitte lesen Sie [Wie schreibe ich eine gute Antwort?] (/ Help/how-to-answer) und [How to referenz material von anderen geschrieben] (/ help/referenzing) für einige Richtlinien. Nur-Link-Antworten werden in StackOverflow als qualitativ minderwertige Antworten betrachtet und können gelöscht werden. –

Verwandte Themen