Durchführen von Datenaktualisierungsvorgängen beim Sichern einer großen SQL Server-Datenbank

9

Ich habe eine große Datenbank (in zweistelliger Millionenhöhe), für die ich eine vollständige Datenbanksicherung durchführen werde .

Die Datenbank ist jedoch groß genug, damit Transaktionen vor und während sowie während und nach der Sicherung gestartet werden können.

Zum Beispiel:

T0 = Transaction A start
T1 = Full database backup start
T2 = Transaction B start (will not deadlock with A)
T3 = Transaction A commit/rollback (does not matter, does it?)
T4 = Full database backup end
T5 = Transaction B commit/rollback (again, does not matter, does it?)

T0          T1          T2          T3          T4          T6
||----------||----------||----------||----------||----------||---------->

Mein Verständnis ist, dass während einer Sicherung keine Sperren verwendet werden (obwohl andere Leistungsprobleme aufgrund beispielsweise hoher E / A auftreten können) , aber ich bin nicht sicher, was ich garantieren kann, was festgeschrieben wird oder nicht.

Ich mache mir auch keine Sorgen, dass sich die Datenbank in einem inkonsistenten Zustand befindet, sondern wie dieser Zustand sein wird (auch wenn er nicht deterministisch ist, wenn es eine Reihe von Regeln gibt, die konsistent angewendet werden können) und wie er dort angekommen ist ( Wie viel der Datendatei wird beispielsweise zusammen mit dem Transaktionsprotokoll zum Erstellen einer Sicherungsdatei verwendet?

casperOne
quelle
Ich entfernte meinen ersten Kommentar und erweiterte ihn zu einer Antwort. Ich versuche immer noch herauszufinden, wie ich genau herausfinden kann, wann die gelesenen Daten einer Sicherung abgeschlossen sind.
Simon Righarts

Antworten:

7

Im Wesentlichen befindet sich die Sicherung im Status der Datenbank, wenn der Datenleseteil der Sicherung abgeschlossen ist (sodass alle Daten gesichert werden), zuzüglich der Menge an Transaktionsprotokoll, die zur Gewährleistung der Transaktionskonsistenz erforderlich ist (Start) Zeit des enthaltenen Protokolls ist MIN(most recent checkpoint time, oldest active transaction start time)). Paul Randal behandelt dies hier (mit Hilfe eines Diagramms, das alles so viel einfacher macht). In Ihrem Beispiel Awürde ein Commit (oder ein Rollback, wenn a ROLLBACK TRANSACTIONanstelle von a ausgegeben wurde COMMIT) und Bein Rollback (unabhängig vom Endergebnis dieser Transaktion) durchgeführt.

(Der andere Grund, warum Sie versuchen, Sicherungen zu einem ruhigen Zeitpunkt durchzuführen, ist, abgesehen von E / A-Konflikten, dass das gesamte während einer Sicherung generierte Transaktionsprotokoll normalerweise in der Sicherung enthalten sein muss.)

In der Wiederherstellungsphase einer Datenbankwiederherstellung werden alle festgeschriebenen Transaktionen aus dem in der Sicherung enthaltenen Protokoll übernommen, auf die Datenbank angewendet und alle nicht festgeschriebenen Transaktionen zurückgesetzt. (Aus diesem Grund ist WITH RECOVERY/ WITH NORECOVERYwichtig. WITH RECOVERYSie können die Datenbank verwenden, aber Sie können keine weiteren Protokollsicherungen anwenden. Sie müssen sie wiederherstellen, WITH NORECOVERYum Protokollsicherungen einzuführen. Durch die Wiederherstellung wird die Protokollkette unterbrochen, indem nicht festgeschriebene Transaktionen zurückgesetzt werden. )

Weiterführende Literatur:

Simon Righarts
quelle
4

Eine vollständige Sicherung wird zu dem Zeitpunkt wiederhergestellt, zu dem der Datenleseteil der Sicherung abgeschlossen ist, abzüglich aller zu diesem Zeitpunkt nicht festgeschriebenen Transaktionen.

Wie bereits erwähnt, bleibt die Datenbank online und kann während der Sicherung geschrieben werden. Dies funktioniert so, dass das Sicherungssystem einen inkonsistenten Satz von Datenseiten sichert (da das Lesen der Daten ungleich Null dauert) - es erstellt eine Kopie jeder Datenseite, unabhängig davon, in welchem ​​Zustand sie sich befindet Eine vollständige Sicherung umfasst auch Transaktionsprotokolldatensätze, beginnend mit dem Start der ältesten aktiven Transaktion zu Beginn der Sicherung bis zum letzten Protokolldatensatz, wenn der Datenleseabschnitt abgeschlossen ist.

Wenn die Sicherung wiederhergestellt wird, werden die Daten und das Protokoll unverändert wiederhergestellt (denken Sie daran, dass sich die Datenseiten in einem inkonsistenten Zustand befinden). Der Wiederherstellungsvorgang erfolgt ab dem Beginn des gesicherten Transaktionsprotokolls (erneut innerhalb der vollständigen Sicherung). bis zum Ende; Wenn Sie dann mit wiederherstellen RECOVERY, wird rückgängig gemacht , um alle nicht festgeschriebenen Transaktionen zum Zeitpunkt des Abschlusses der Sicherung zurückzusetzen. Durch die Rückgängig- Operation befindet sich die Datenbank in einem transaktionskonsistenten Zustand und kann verwendet werden. Das Wiederherstellen mit NORECOVERYüberspringt den Rückgängig- Prozess, sodass Sie zusätzliche Sicherungen (Differential- oder Transaktionsprotokoll) wiederherstellen können.

Beachten Sie, dass das Transaktionsprotokoll möglicherweise während der Sicherung vergrößert werden muss, wenn die Datenbank mit einer hohen Schreibarbeitslast recht groß ist, wenn derzeit nicht genügend Speicherplatz zugewiesen ist. Das Protokoll kann während einer vollständigen Sicherung nicht (intern) gelöscht werden, selbst wenn Sie Transaktionsprotokollsicherungen durchführen, da die Protokolldatensätze für die vollständige Sicherung erforderlich sind. Wenn Sie Transaktionsprotokollsicherungen durchführen, während eine vollständige Sicherung durchgeführt wird, wird das Löschen des Protokolls automatisch verschoben, bis die vollständige Sicherung abgeschlossen ist.

Jon Seigel
quelle