Transaktionsprotokoll aufgrund von log_backup voll

7

Ich teste, wie bestimmte Vorgänge unter verschiedenen Wiederherstellungsmodellen protokolliert werden. Nachfolgend sind die Schritte aufgeführt, die ich bisher ausgeführt habe

1. Datenbank im vollständigen Wiederherstellungsmodell
erstellen 2. Sicherung durchführen
3. Tabelle erstellen und 10 Millionen Datensätze
einfügen 4. Protokollsicherung durchführen, VLF-Anzahl überprüfen und Prozentsatz des freien Protokollspeicherplatzes
anzeigen 5. Jetzt eine Indexwiederherstellung durchführen und die mit generierten Datensätze anzeigen fn_dblog Funktion

6. Jetzt habe ich auf das Massenwiederherstellungsmodell umgestellt.
7. Eine Sicherung durchgeführt.
8. Eine Protokollsicherung durchgeführt.
9. Eine Indexwiederherstellung durchgeführt

Seltsamerweise schlägt die Indexwiederherstellung mit dem folgenden Fehler fehl.

Die Anweisung wurde beendet. Meldung 9002, Ebene 17, Status 2, Zeile 1 Das Transaktionsprotokoll für die Datenbank 'Bulklogging' ist aufgrund von 'LOG_BACKUP' voll.

das stimmt eigentlich nicht

Das automatische Wachstum des 1.log-Speicherplatzes ist nicht eingeschränkt

Autogrwoth-Einstellung

2. Platz auf dem Speicherort der Protokolldatei

Speicherplatz auf dem Laufwerk, auf dem die Protokolldatei gespeichert ist

Kann mir jemand helfen zu verstehen, warum ich über den Fehler hinausgehe, obwohl Platz vorhanden ist und das automatische Wachstum nicht eingeschränkt ist

Hinzufügen eines Bildes mit Indexgröße.

Das Problem wurde behoben, aber nicht sicher, wie diese Änderung den Unterschied ausmachte. Alle Hinweise wären sehr willkommen.

Kommentar sagt zwei lange - also hier posten ...

Ich habe den Index erneut ausgeschrieben, nachdem ich das Wiederherstellungsmodell geändert hatte, und dann hat es funktioniert. Darüber hinaus wurde der geskriptete Index vor und nach genau gleich geblieben, nur die Sitzung wurde geändert. Aber ich bin nicht sicher, wie dies funktioniert hat.

Vor :

USE [bulklogging]  
GO  
ALTER INDEX [PK__bcc__3213E83FAC9DB5ED] ON [dbo].[bcc] 
REBUILD PARTITION = ALL WITH (PAD_INDEX = OFF, 
STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
GO

Nach:

USE [bulklogging]  
GO  
ALTER INDEX [PK__bcc__3213E83FAC9DB5ED] ON [dbo].[bcc] 
REBUILD PARTITION = ALL WITH (PAD_INDEX = OFF, 
STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
GO

Update zum Schließen dieser Frage:
Ich verwende Fn_dblog, um Protokolldatensätze zu überprüfen. Dies scheint einen versteckten Fehler zu haben, wie hier beschrieben , der mein Protokollwachstum beeinflussen kann.

Edit 15.08.13: Vorsicht - Jonathan hat gerade von einem Kundensystem erfahren, das dies ausgiebig nutzt, dass jedes Mal, wenn fn_dump_dblog aufgerufen wird, ein neuer versteckter SQLOS-Scheduler und bis zu drei Threads erstellt werden, die nicht verschwinden (und nicht verschwinden) wiederverwendet werden), bis ein Server neu gestartet wird. Es ist ein Fehler, den das SQL-Team beheben wird, nachdem wir sie darauf aufmerksam gemacht haben. Mit Vorsicht verwenden.

Bearbeiten 15.05.15: Es wurde in SQL Server 2012 SP2 + und SQL Server 2014 behoben. Das Update wird nicht früher zurückportiert.

Geben Sie hier die Bildbeschreibung ein

TheGameiswar
quelle
In Ihrem Screenshot ist das Protokollwachstum auf 2 Terabyte begrenzt. Das ist wahrscheinlich nicht das Problem. Was sagt die Spalte log_reuse_wait_desc in sys.databases?
Andomar
Ich glaube, das ist die Standardeinstellung und ich denke, meine Tabelle mit 1000000 Zeilen generiert eine 2-TB-Protokolldatei. Bearbeitete Frage mit Bild jetzt.
TheGameiswar
Stimmen Sie zu, was sagt die Spalte log_reuse_wait_desc in sys.databases?
Andomar
es zeigt log_backup
TheGameiswar
1
Ich bin in der Lage, das gleiche Verhalten zeitweise zu wiederholen. Wenn ich den Index sehr schnell neu erstelle (führen Sie die Abfrage innerhalb von 2 Minuten erneut aus). Auch wenn dies nicht konsistent ist, kann ich das Verhalten nur in diesem Szenario
TheGameiswar

Antworten:

5

Dieser Fehler tritt auf, weil das Transaktionsprotokoll aufgrund von voll wird LOG_BACKUP. Daher können Sie für diese Datenbank keine Aktion ausführen. In diesem Fall

Das SQL Server-Datenbankmodul löst einen 9002-Fehler aus .

Um dieses Problem zu lösen, müssen Sie Folgendes tun:

  • Erstellen Sie eine vollständige Datenbanksicherung.
  • Verkleinern Sie die Protokolldatei, um die physische Dateigröße zu verringern.
  • Erstellen Sie ein LOG_BACKUP.
  • Erstellen Sie einen LOG_BACKUP-Wartungsplan, um häufig Sicherungsprotokolle zu erstellen.

Hinweis: Der Verkleinerungsvorgang wirkt sich auf die SQL Server-Leistung während der Ausführung des Verkleinerungsbefehls aus. Dies führt auch zu einer Indexfragmentierung und kann die Leistung von Abfragen verlangsamen, die einen Bereich des Index durchsuchen.

Es wird daher empfohlen, vor der Inbetriebnahme den LOG_BACKUP-Wartungsplan vorzubereiten , um die Protokolldatei häufig zu sichern und den Verkleinerungsvorgang in der Produktion zu vermeiden.

Weitere Informationen finden Sie unter Das Transaktionsprotokoll für die Datenbank 'SharePoint_Config' ist aufgrund von LOG_BACKUP voll

Hoffe das hilft dir

Mohamed El-Qassas MVP
quelle
1

Ich bin heute mit einer meiner Produktionsdatenbanken auf dieses Problem gestoßen. Ich habe es behoben, indem ich der Datenbank eine zweite Protokolldatei hinzugefügt habe. Ich konnte keine vollständige Sicherung durchführen oder die Protokolldatei nicht wie oben beschrieben verkleinern, da beim Versuch die LOG_BACKUPFehlermeldung generiert würde . Ich habe auch versucht, die Protokolldatei zu erweitern, aber auch dies hat den gleichen Fehler generiert. Am Ende machte das Hinzufügen einer zweiten kleineren Protokolldatei die Datenbank wieder verwendbar. Danach konnte ich die Datenbank sichern und die Größe des ursprünglichen Protokolls ändern.

Weltweiter DBA
quelle