EINFACHES oder VOLLSTÄNDIGES Wiederherstellungsmodell für Datenbanken?

38

Wann sollte ich das vollständige Wiederherstellungsmodell und wann das einfache Wiederherstellungsmodell für Datenbanken verwenden?

Ich habe immer das vollständige Wiederherstellungsmodell verwendet, da es das Standardmodell ist, aber heute bin ich auf folgenden Fehler gestoßen:

Microsoft OLE DB-Provider für SQL Server (0x80040E14) Das Transaktionsprotokoll für die Datenbank 'DATABASE NAME' ist voll. In der Spalte log_reuse_wait_desc in sys.databases finden Sie Informationen dazu, warum der Speicherplatz im Protokoll nicht wiederverwendet werden kann

Die spezifische Datenbank ist tatsächlich eine der kleinsten und inaktivsten Datenbanken auf meinem Server, daher habe ich keine Ahnung, wie das Protokoll in dieser Datenbank voll sein kann und nicht in den anderen.

Um das Protokoll zu verkleinern und den Zugriff auf die Datenbank wieder zu ermöglichen, habe ich das Wiederherstellungsmodell von VOLL auf EINFACH geändert und das Protokoll der logischen Datei mit dem folgenden Befehl verkleinert

alter database myDbName SET recovery simple
go
dbcc shrinkfile('LOG FILE LOGICAL NAME', 100)
go

Es hat geholfen, aber jetzt muss ich verstehen, WARUM es geholfen hat, WIE diese Situation begann und WIE dies in Zukunft zu verhindern ist.

BEARBEITEN:

Jede Nacht um 1 Uhr machen wir eine skriptbasierte Sicherung jeder Datenbank auf dem Server. Dies geschieht durch ein Skript mit 31 Zeilen, in dem der wichtigste Teil ist

set @Filename = 'D:\backup\' + convert(varchar, getDate(), 112) + ' - ' + @DBName + '.bak'
set @Description = 'Full backup of database ' + @Filename
BACKUP DATABASE @DBName TO DISK = @Filename WITH INIT , NOUNLOAD , NAME = @Description, NOSKIP , STATS = 10, NOFORMAT

Stehen das neue Wiederherstellungsmodell und der neue Datenbankschrumpf in Konflikt mit diesem Skript?

Wir machen keine andere Art der Sicherung der Datenbanken und daher auch nicht der Transaktionsprotokolle, oder?

Behrens
quelle
Erwähnenswert ist, dass dies derzeit in Azure SQL keine Option ist. Es wird immer die vollständige Wiederherstellung verwendet. azure.microsoft.com/en-us/blog/…
jocull

Antworten:

60

Wann sollte ich das vollständige Wiederherstellungsmodell und wann das einfache Wiederherstellungsmodell für Datenbanken verwenden?

Sie sollten das vollständige Wiederherstellungsmodell verwenden, wenn Sie eine Wiederherstellung Ihrer Datenbank zu einem bestimmten Zeitpunkt benötigen. Sie sollten ein einfaches Wiederherstellungsmodell verwenden, wenn Sie keine zeitliche Wiederherstellung Ihrer Datenbank benötigen und wenn die letzte vollständige oder differenzielle Sicherung als Wiederherstellungspunkt ausreicht. (Hinweis: Es gibt ein anderes Wiederherstellungsmodell (Bulk-Protokoll). Weitere Informationen zum Bulk-Protokoll-Wiederherstellungsmodell finden Sie in dieser Referenz. )

Microsoft OLE DB-Provider für SQL Server (0x80040E14) Das Transaktionsprotokoll für die Datenbank 'DATABASE NAME' ist voll. In der Spalte log_reuse_wait_desc in sys.databases finden Sie Informationen dazu, warum der Speicherplatz im Protokoll nicht wiederverwendet werden kann

Der Grund für diesen Fehler ist (höchstwahrscheinlich), dass Sie Ihr Transaktionsprotokoll nicht gesichert haben. Wenn es nicht gesichert ist, wird die Transaktionsprotokolldatei weiterhin physisch vergrößert (vorausgesetzt, das automatische Wachstum ist aktiviert und die maximale Größe ist zulässig), da keine "Teile" des Transaktionsprotokolls (virtuelle Protokolldateien) wiederverwendet werden können. Es kann diese VLFs nur zur Wiederverwendung markieren und die "Wrap-Around" -Natur des Transaktionsprotokolls zulassen, wenn Sie eine Transaktionsprotokollsicherung durchführen (und einige andere Anforderungen, z. B. keine aktiven Transaktionen, einige Replikationsaspekte usw.).

Um das Protokoll zu verkleinern und den Zugriff auf die Datenbank wieder zu ermöglichen, habe ich das Wiederherstellungsmodell von VOLL auf EINFACH geändert und das Protokoll der logischen Datei mit dem folgenden Befehl verkleinert

......

Es hat geholfen, aber jetzt muss ich verstehen, WARUM es geholfen hat, WIE diese Situation begann und WIE dies in Zukunft zu verhindern ist.

Dies hat Ihnen geholfen, da Sie durch Festlegen Ihrer Datenbank auf das einfache Wiederherstellungsmodell SQL Server mitgeteilt haben, dass Sie sich nicht mehr um die Wiederherstellung zu einem bestimmten Zeitpunkt kümmern und sicherstellen müssen, dass virtuelle Protokolldateien nicht mehr beibehalten und als aktiv markiert werden müssen. Jetzt markiert ein Checkpoint-Prozess diese VLFs als inaktiv.

Auszug / Zitat aus dieser MSDN-Referenz :

Im einfachen Wiederherstellungsmodell schneidet ein automatischer Prüfpunkt den nicht verwendeten Abschnitt des Transaktionsprotokolls ab, es sei denn, ein Faktor verzögert das Abschneiden des Protokolls. Im Gegensatz dazu verursachen automatische Prüfpunkte bei den vollständigen und massenprotokollierten Wiederherstellungsmodellen nach dem Erstellen einer Protokollsicherungskette keine Protokollkürzung.

Dann haben Sie eine physische Datenbankdatei verkleinert, und da in Ihrem Transaktionsprotokoll jetzt freier Speicherplatz vorhanden war, konnte die NTFS-Datei physisch verkleinert werden.

Lesen lohnt sich, etwas Zeit zu verbringen mit:

  1. Wiederherstellungsmodelle
  2. Verwalten von Transaktionsprotokollen (Gail Shaw)
  3. Faktoren, die das Abschneiden von Protokollen verzögern können

BEARBEITEN Sie nach Ihrer Bearbeitung :

Stehen das neue Wiederherstellungsmodell und der neue Datenbankschrumpf in Konflikt mit diesem Skript?

Dieser BACKUP DATABASEBefehl funktioniert mit beiden Wiederherstellungsmodellen. Was die routinemäßige Datenbankverkleinerung betrifft ... TUN SIE ES NICHT !!!! Im Ernst, passen Sie die Größe Ihrer Datenbank entsprechend an. Wenn Sie das vollständige Wiederherstellungsmodell verwenden, stellen Sie sicher, dass Sie routinemäßige und häufige Transaktionsprotokolldateien ausführen, um nicht nur die Transaktionsprotokollgröße in Schach zu halten, sondern auch Wiederherstellungspunktobjekte zu erfüllen.

Wir machen keine andere Art der Sicherung der Datenbanken und daher auch nicht der Transaktionsprotokolle, oder?

Wenn Ihre Datenbank das vollständige Wiederherstellungsmodell verwendet, sollten Sie Transaktionsprotokollsicherungen durchführen. Wenn sich Ihre Datenbank in einer einfachen Wiederherstellung befindet, können Sie physisch keine Transaktionsprotokollsicherung durchführen.

Was das zu verwendende Wiederherstellungsmodell (einfach oder vollständig) betrifft, können wir diese Entscheidung nicht für Sie treffen. Das können nur Sie, Ihr Business-Team und Ihre SLAs.

Thomas Stringer
quelle
Sie können auch hinzufügen, dass Sie bei Verwendung der Datenbankspiegelung das vollständige Wiederherstellungsmodell verwenden müssen, da die Protokolldatei verwendet wird, um die Spiegelung auf dem neuesten Stand zu halten.
Holger
Das war eine hervorragende Antwort . Der eine Teil, den ich nicht verstehe, ist „auch Wiederherstellungspunktobjekte zu treffen“. Würde es Ihnen etwas ausmachen, diesen Satz zu klären? Ich dachte zuerst, dass Sie "Ziele" schreiben wollten, aber ich wäre mir in dieser Annahme nicht sicher.
Anthony G - Gerechtigkeit für Monica