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?
quelle
Antworten:
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. )
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.).
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 :
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:
BEARBEITEN Sie nach Ihrer Bearbeitung :
Dieser
BACKUP DATABASE
Befehl 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.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.
quelle