Kurz gesagt
- Planen Sie eine vollständige Route. Für jeden relevanten Ausfallfall führt sie zu einem bestimmten Datenstand.
- Prüfen Sie alle Abhängigkeiten: Dateimenge, Basis- und Logbeziehungen, Schlüssel und Zielumgebung.
- Messen Sie den Weg bis zur freigegebenen Anwendung, nicht nur die Dauer des Restorebefehls.
- Jobstatus und Sicherungsalter sind wichtige Signale, aber kein vollständiger Nachweis.
MerksatzPlanen und testen Sie einen konkreten Wiederherstellungsweg.
Wie kommen Sie zum richtigen Datenstand?
SQL Server stellt für Backup und Restore leistungsfähige native Funktionen bereit. Ola Hallengrens Maintenance Solution automatisiert deren Einsatz. Ein belastbarer Betrieb verbindet diese Bausteine mit einem konkreten Wiederherstellungsziel, vollständigen Abhängigkeiten und wiederholbaren Proben.
Dieser Beitrag setzt Kenntnisse zu Full-, Diff- und Logbackups voraus; Teil 1 erklärt diese Grundlagen. Uhrzeiten und Betriebsziele in den Bildern sind schematische Beispiele, soweit sie nicht ausdrücklich als Labbeleg gekennzeichnet sind.
Typische Anlässe
Springen Sie direkt zu Ihrem Fall:
- Fehler 3136Nach einem zusätzlichen Fullbackup passt der geplante Diff-Restore nicht mehr.↓
- Fehler 4305Das einzuspielende Log beginnt für den aktuellen Restorestand zu spät.↓
- Ein bestimmter ZeitpunktGebraucht wird der Stand unmittelbar vor einer versehentlichen Änderung.↓
- Restore dauert zu langeTrotz kurzer Sicherungsintervalle dauert der Wiederanlauf zu lange.↓
- Ola läuft, aber …Ola läuft zuverlässig; unklar sind Abdeckung, Cleanup und Restoreproben.↓
- Verschlüsselung, AG, ObjektspeicherZusätzliche Bausteine erweitern die Sicherungsstrecke.↓
Unterwegs lösen wir vier verbreitete Fehlannahmen auf:
„Ein zusätzliches Full unterbricht die Logkette.“ Ein normales Full setzt die Differentialbasis neu. Die Logbackupfolge ist davon getrennt.
aufgelöst in: Drei Beziehungen ↓„Die neueste Datei ist die richtige.“ Ein Full nach dem Zielzeitpunkt lässt sich nicht zurückspulen.
aufgelöst in: Restore auf einen Zeitpunkt ↓„Sieben Tage aufbewahren heißt sieben Tage wiederherstellen.“ Die benötigte Full-Basis kann älter als sieben Tage sein.
aufgelöst in: Retention ↓„35 Minuten Restore passen in eine Stunde RTO.“ Nur wenn alle übrigen Phasen bis zur Freigabe in die Restzeit passen.
aufgelöst in: RTO ↓
Eine Route hat drei verschiedene Beziehungen
Das Bild aus Teil 1 bleibt: Wir suchen einen Startpunkt, gegebenenfalls eine Abkürzung und weitere Abschnitte bis zum Ziel. Im Advanced-Fall unterscheiden wir dabei drei Dinge.
- Die DifferentialbasisEin Differentialbackup gehört zu einer bestimmten Datenbasis. Ein normales Full setzt diese Basis neu. Ein älteres Full und ein Diff auf einer neueren Basis passen deshalb nicht zusammen.
- Die LogabdeckungDie erforderlichen Logs müssen den benötigten Bereich lückenlos abdecken. Ein zusätzliches normales Full unterbricht die Logbackupkette nicht. Es kann lediglich einen weiteren Einstieg für andere Restorewege schaffen.
- Die konkrete AuswahlFür den Zielzeitpunkt wählen wir eine tatsächlich verfügbare Kombination. Die neueste Datei kann zu spät liegen, zur falschen Basis gehören oder nur ein Teil eines Stripe-Sets sein.
Drei Spuren, eine Zeitlinie
Mitten in der Folge entsteht ein zusätzliches Full. Schalten Sie um: Was ändert sich, was bleibt?
Sicherungen
F0 L1 L2 F1normalC1copy-only L3 D1 L4 ZielDifferentialbasis
Logabdeckung
Auswahl für das Ziel
F0 F1 D1 L4 erreichtNormales Full F1: Spätere Diffs beziehen sich auf F1. Die Logkette L1 bis L4 läuft unverändert weiter. Route zum Ziel: F1 + D1 + L4.Copy-only-Full C1: Die Basis von D1 bleibt F0; C1 ist selbst keine Diff-Basis. Die Logkette läuft unverändert weiter. Route zum Ziel: F0 + D1 + L4.
Mit COPY_ONLY statt normalem Full: Die Basislinie bliebe bei F0, die Logspur unverändert; Route zum Ziel F0 + D1 + L4.
SQL Server verwaltet dafür unter anderem Log Sequence Numbers, kurz LSNs, Basisinformationen und Recovery-Fork-Bezüge. Das sind technische Beziehungen und keine Uhrzeiten. Zur Inventur gehören die Backupheader, verfügbare Medienfamilien und bei Bedarf die Historie in msdb. Für einen Desasterfall muss die Dateiauswahl auch dann möglich sein, wenn die ursprüngliche msdb nicht erreichbar ist (Microsoft: Restore Sequences).
Eine praktische Inventur liefert pro Backupset: Datenbankidentität, Art, Beginn und Ende, Copy-only-Flag, relevante LSNs, Differentialbasis, Medienposition, sämtliche benötigten Dateien und Verschlüsselungsabhängigkeit. Namen und Dateidatum helfen bei der Orientierung. Die technische Zuordnung ersetzen sie nicht.
COPY_ONLY: zusätzliche Sicherungen ohne neue Differentialbasis
Ein Entwickler benötigt eine aktuelle Kopie. Der reguläre Plan verwendet ein Full vom Sonntag und tägliche Diffs. Wird am Dienstag ein zusätzliches normales Full erstellt, basieren spätere Diffs auf diesem neuen Full. Wer beim Restore weiter nur das Sonntags-Full berücksichtigt, kann scheitern.
Für die zusätzliche Kopie ist ein gezielt gewähltes COPY_ONLY-Full häufig sinnvoll:
BACKUP DATABASE [BackupDemo]
TO DISK = N'D:\SQLBackup\BackupDemo_extra_copy_01.bak'
WITH COPY_ONLY, CHECKSUM, COMPRESSION;
Dieses Full lässt die bestehende Differentialbasis unverändert. Es kann wie ein Full wiederhergestellt werden, wird aber selbst keine neue Differentialbasis. Ein danach entstandenes Diff lässt sich deshalb nicht allein deshalb auf diese Kopie anwenden, weil sie zeitlich kurz davor lag (Microsoft: Copy-only Backups).
Labfrage Ändert ein Copy-only-Full die Basis des nächsten Diff?
Aufbau Full F0 erstellen, Daten ändern, zusätzliches Copy-only-Full C0 erstellen, erneut ändern und Diff D2 sichern. Später folgen ein normales Full F1 und ein neues Diff D3.
Das Copy-only-Labor
Die Sicherungen in der Reihenfolge des Versuchs. Bögen oben: zu welchem Full ein Diff gehört.
Ihre Vorhersage: Auf welchem Full baut D2 auf?
- F0normal
- D1Teil 1
- C0copy-only
- D2Diff
- F1normal
- D3Diff
Jetzt ausprobieren: Welche Kombination stellen Sie wieder her?
Restore erfolgreich · 4 Marker
D2 gehört zu F0. Das Copy-only-Full C0 dazwischen hat daran nichts geändert.
Fehler 3136
Originalmeldung (SQL Server, englisch)
Msg 3136, Level 16, State 1, Server …, Line 1
This differential backup cannot be restored because the database has not been restored to the correct earlier state.C0 liegt zeitlich näher an D2, ist aber keine Diff-Basis. SQL Server weist den Diff zurück, weil die wiederhergestellte Datenbank nicht den Stand hat, auf den D2 aufbaut.
Fehler 3136
Originalmeldung (SQL Server, englisch)
Msg 3136, Level 16, State 1, Server …, Line 1
This differential backup cannot be restored because the database has not been restored to the correct earlier state.Das normale Full F1 hat die Basis neu gesetzt. D3 gehört zu F1; mit F0 als Start scheitert der Restore.
Restore erfolgreich · 5 Marker
F1 ist die Basis von D3. Diese Kombination liefert den jüngeren Stand.
Noch keine Kombination gewählt.
| Kombination | Ergebnis (SQL Server 2022 und 2025) |
|---|---|
| F0 + D2 | 4 Marker |
| C0 + D2 | Fehler 3136 |
| F0 + D3 | Fehler 3136 |
| F1 + D3 | 5 Marker |
Beobachtung Auf SQL Server 2022 und 2025 lässt sich F0 plus D2 wiederherstellen. C0 plus D2 wird mit Fehler 3136 zurückgewiesen. Nach einem späteren normalen Full F1 benötigt das neue Diff D3 die Basis F1; F0 plus D3 scheitert ebenfalls.
Folgerung Zusätzliche Sicherungen gehören in die Betriebsregeln. Benennen Sie ihren Zweck und entscheiden Sie bewusst, ob sie die Diff-Basis verändern sollen. Das ist eine andere Frage als die Fortsetzung der Logkette.
Wenn ein Logbackup fehlt
Full F0, Log L1, Log L2, Log L3: Für den vorgesehenen Restoreweg brauchen wir die nötige Abdeckung. Fehlt L2, kann L3 die darin fehlenden Logbereiche nicht einfach ersetzen. SQL Server kann den Restore mit Fehler 4305 zurückweisen.
Im Lab erzeugen wir genau diese Lücke, indem wir L2 beim Einspielen auslassen. Nach Bereitstellung und Anwendung des vorhandenen L2 lässt sich der Ablauf fortsetzen. Wir löschen im Versuch keine unbekannten Produktionsdateien und simulieren keinen vollständigen Serververlust.
Die Lücke vor L3
L3 ist intakt. Spielen Sie die Folge ein, dann stellen Sie L2 aus einer anderen Ablage bereit.
Bereit. Die Folge ist noch nicht eingespielt.
L1 → L3: Fehler 4305
Originalmeldung (SQL Server 2022, englisch; 2025 gleich, mit anderen LSN-Werten)
Msg 4305, Level 16, State 1, Server …, Line 1
The log in this backup set begins at LSN 42000000053600001, which is too recent to apply to the database. An earlier log backup that includes LSN 42000000049600001 can be restored.
Die Datenbank steht nach L1. L3 setzt später an; der Bereich dazwischen steckt in L2. Die jüngere Datei kann diesen Abschnitt nicht ersetzen.
F0 → L1 → L2 → L3 vollständig angewendet
Ergebnis ist der jüngste Logstand mit drei Markern, derselbe Stand wie rechts in Bild 0.
Mit bereitgestelltem L2 ist die Folge F0 → L1 → L2 → L3 vollständig anwendbar im Lab bestätigt
Schema Und ein späteres Full?
Ein späteres Full kann spätere Wiederherstellungsziele erreichbar machen. Es rekonstruiert den fehlenden historischen Verlauf nicht.
Für die Praxis bedeutet das: zuerst alle Speicherorte, Kopien und erzeugenden Jobs inventarisieren. Prüfen Sie, ob eine anderweitig vorhandene Datei die Lücke schließt oder eine andere geeignete Datenbasis einen neuen Restoreweg eröffnet.
Auch ein weiterer regulärer Logbackupjob kann relevant sein: Werden Logs auf einen anderen Speicher gesichert, liegen benötigte Abschnitte womöglich dort. Mehrere Werkzeuge müssen in einen gemeinsamen Plan passen. Copy-only-Logbackups haben andere Auswirkungen auf den regulären Archivierungspunkt und sind gezielt zu beurteilen.
@ChangeBackupType='Y' in Ola sucht bei fehlenden Voraussetzungen einen durchführbaren Sicherungstyp. Es repariert keine verlorene historische Datei. Der tatsächlich erzeugte Typ muss deshalb Teil der Überwachung sein.
Restore auf einen bestimmten Zeitpunkt
Ein versehentliches Löschen um 14:07 ist ein anderer Fall als ein Hardwareausfall, bei dem Sie den jüngsten erreichbaren Stand wollen. Für den Zustand unmittelbar vor dem Löschen brauchen Sie eine geeignete Datenbasis vor dem Ziel und die erforderlichen Logs bis zu diesem Zeitpunkt.
Ein Full, das erst nach dem gewünschten Zeitpunkt endet, lässt sich nicht rückwärts dorthin abspielen. Wählen Sie gegebenenfalls ein älteres Full. Ein Diff darf den gewünschten Zeitpunkt ebenfalls nicht bereits überschritten haben.
Welche Route erreicht das Ziel?
Full um 00:00, Diff um 12:00, ein zusätzliches Full um 15:00, Logs alle zwei Stunden. Verschieben Sie die Zielzeit.
Ziel 14:06:50. Route: F 00:00 → D 12:00 → L7 (12:00–14:00) → L8 (14:00–16:00) mit STOPAT. Das Full von 15:00 endet nach dem Ziel und lässt sich nicht zurückspulen.
Ein schematischer Ablauf unter einem neuen Testnamen lautet:
DECLARE @TargetTime datetime = '2026-10-22T14:06:50';
RESTORE DATABASE [BackupDemo_PointTest]
FROM DISK = N'D:\SQLBackup\BackupDemo_full_01.bak'
WITH MOVE N'BackupDemo'
TO N'D:\SQLData\BackupDemo_PointTest.mdf',
MOVE N'BackupDemo_log'
TO N'D:\SQLLog\BackupDemo_PointTest.ldf',
NORECOVERY, CHECKSUM;
RESTORE LOG [BackupDemo_PointTest]
FROM DISK = N'D:\SQLBackup\BackupDemo_log_01.trn'
WITH NORECOVERY, CHECKSUM, STOPAT = @TargetTime;
RESTORE LOG [BackupDemo_PointTest]
FROM DISK = N'D:\SQLBackup\BackupDemo_log_02.trn'
WITH NORECOVERY, CHECKSUM, STOPAT = @TargetTime;
-- Erst nach Anwendung der erforderlichen Logs bis zum Ziel:
RESTORE DATABASE [BackupDemo_PointTest] WITH RECOVERY;
Dateien, logische Dateinamen und Zeitpunkt sind Beispiele. Die benötigte Logliste muss für die tatsächlichen Backupsets bestimmt werden. Microsoft empfiehlt, den gleichen Zielzeitpunkt in jedem Logrestore anzugeben. Prüfen Sie anschließend, dass der gewollte Datenstand erreicht wurde. Zeitzone, Serverzeit, Anwendungstimestamps und ein möglicher Sommerzeitwechsel gehören zur Zuordnung (Microsoft: Point-in-time Restore).
Im Lab Vor einer gezielten Löschung wird die SQL Server Zeit festgehalten. Der STOPAT-Restore enthält den zuvor vorhandenen Datensatz und nicht die danach eingefügte Änderung. Der Restore bis zum jüngsten Logstand enthält dagegen die spätere Änderung. Gezählt werden daher nicht nur Zeilen; wir prüfen die konkreten Marker.
STOPAT gegen jüngsten Logstand
Reihenfolge wie im Lab, Abstände schematisch. Zwischen festgehaltenem Zielzeitpunkt und Eingriff lagen zwei Sekunden.
- F0mit Marker 1
- + 2INSERT
- L1Log
- + 3INSERT
- L2Log
- ZielZeit festgehalten
- − 3DELETE · 2 s später
- + 4INSERT
- L3Log
Restore bis zum Ziel STOPAT
123
3 Zeilen · Marker 3 vorhanden, Marker 4 fehlt
Restore bis zum jüngsten Logstand
124
3 Zeilen · nach DELETE von 3 und INSERT von 4
Bei BULK_LOGGED kann ein Logbackup mit minimal protokollierten Änderungen keinen beliebigen STOPAT innerhalb dieses Backups liefern. Die Einschränkung betrifft diesen Abschnitt. Beziehen Sie geplante Massenoperationen in die Wiederherstellungsentscheidung ein.
Tail-log: noch nicht gesicherte Änderungen erfassen
Nach dem letzten regulären Logbackup können weitere Änderungen existieren. Wenn die nötigen Voraussetzungen bestehen, sichert ein Tail-log-Backup den noch nicht gesicherten Logrest. Das kann beim Wiederherstellen zum jüngsten möglichen Stand Datenverlust vermeiden.
Für eine noch online befindliche Datenbank zeigt das folgende Beispiel einen bewussten Wiederherstellungseingriff.
-- ACHTUNG: bewusster Wiederherstellungseingriff, kein Job.
-- NORECOVERY versetzt die Quelle in RESTORING; normale Nutzung ist danach unterbrochen.
-- Nur im abgestimmten Wiederherstellungsablauf ausführen.
BACKUP LOG [BackupDemo]
TO DISK = N'D:\SQLBackup\BackupDemo_tail_01.trn'
WITH NORECOVERY, CHECKSUM;
Der Logrest wird gesichert
Nach dem letzten regulären Logbackup kommt noch eine Änderung. Das Tail-log-Backup nimmt sie mit.
Quelle ONLINERESTORING
- L3letztes reguläres Logbackup
- +Änderung, noch in keinem Backup
- Tail
BACKUP LOG … WITH NORECOVERY
Separates Ziel
F0 L1 L2 L3 Tail
4 Marker, einschließlich der Änderung aus dem Tail
Im Lab wird eine nur im Tail vorhandene Änderung gesichert und auf einem separaten Ziel zusammen mit den vorherigen Backups wiederhergestellt. Bei einem echten Schaden hängt die Möglichkeit davon ab, welche Logdateien und Datenbankbestandteile noch brauchbar sind. Ein verlorenes oder unbrauchbares Log kann auch diesen Weg versperren (Microsoft: Tail-log Backups).
Für einen Zielzeitpunkt, der bereits von vorhandenen Sicherungen abgedeckt wird, ist ein Tail-log-Backup nicht zur Erreichung dieses älteren Stands erforderlich. Ob Sie den aktuellen Rest vor weiteren Eingriffen zusätzlich bewahren müssen, bleibt eine Frage des konkreten Falls.
Ola im Betrieb: Auswahl, Ausführung und Ergebnis auseinanderhalten
Eine robuste Einrichtung beschreibt vier Ebenen:
| Ebene | Zu klärende Frage |
|---|---|
| Auswahl | Welche Datenbanken und Replikate soll dieser Lauf erfassen? |
| Ausführung | Welcher Sicherungstyp und welche Optionen werden tatsächlich ausgeführt? |
| Datei und Kopie | Welche vollständigen Backupsets sind am vorgesehenen Restoreort erreichbar? |
| Wiederherstellung | Welche Ziele wurden zuletzt damit erfolgreich getestet? |
Für den nachvollziehbaren Einstieg sind explizite Optionen sinnvoll: @Checksum='Y', @Verify='Y', @LogToTable='Y', Kompression passend zu Edition und Last, Typwechsel bewusst festgelegt. @Execute='N' hilft bei der Prüfung erzeugter Befehle. Es erzeugt keinen Backup- oder Restorebeleg.
Ein kontrollierter Sonder-Full kann beispielsweise so vorbereitet werden:
DECLARE @ReturnCode int;
EXEC @ReturnCode = [DBA].dbo.DatabaseBackup
@Databases = N'BackupDemo',
@Directory = N'D:\SQLBackup',
@BackupType = 'FULL',
@CopyOnly = 'Y',
@Compress = 'Y',
@Checksum = 'Y',
@Verify = 'Y',
@ChangeBackupType = 'N',
@CleanupTime = NULL,
@LogToTable = 'Y',
@Execute = 'N';
IF @ReturnCode <> 0
THROW 50002, N'Sonderbackup fehlgeschlagen.', 1;
Vor Ausführung Auswahl und Ziel prüfen und anschließend @Execute='Y' verwenden. Auch hier ersetzt @Verify='Y' keinen vollständigen Restore.
Wichtig für die Überwachung: Datenbanken können wegen Recovery-Modell, Zustand, fehlender Basis oder AG-Präferenz übersprungen werden. Im Lab endet der LOG-Aufruf für eine SIMPLE-Datenbank erfolgreich, ohne ein Logbackup anzulegen. Ein Alarm nur auf fehlerhafte Jobs würde diese Abdeckungslücke nicht erkennen.
Sechs grüne Befehle, sieben Datenbanken
Links das Protokoll der Läufe, rechts das Sollinventar. Gleichen Sie beides ab.
CommandLog 6 Einträge
| DatabaseName | CommandType | ErrorNumber |
|---|---|---|
| DB 1 | BACKUP_DATABASE | 0 |
| DB 2 | BACKUP_DATABASE | 0 |
| DB 3 | BACKUP_DATABASE | 0 |
| DB 4 | BACKUP_DATABASE | 0 |
| DB 5 | BACKUP_DATABASE | 0 |
| DB 6 | BACKUP_DATABASE | 0 |
Sollinventar 7 Datenbanken
- DB 1Backupset ✓
- DB 2Backupset ✓
- DB 3Backupset ✓
- DB 4Backupset ✓
- DB 5Backupset ✓
- DB 6Backupset ✓
- DB 7kein Backupset ✕
- AuswahlWelche Datenbanken?6 von 7 erfasstnicht geprüft
- AusführungWas lief tatsächlich?6 × ohne Fehler
- Datei und KopieAm Restoreort erreichbar?eigene Prüfung
- WiederherstellungZuletzt erfolgreich getestet?eigener Nachweis
Abgeglichen: Alle sechs Befehle liefen fehlerfrei. Die siebte erwartete Datenbank wurde trotzdem nicht gesichert.Das Protokoll allein zeigt sechs fehlerfreie Befehle.
Lab SimpleLab · Recovery SIMPLE
Olas Aufruf mit @BackupType='LOG' endet mit Rückgabewert 0; neue LOG-Backupsets: 0. Ein natives BACKUP LOG weist SQL Server für dieselbe Datenbank mit Fehler 4208 ab:
Msg 4208, Level 16, State 1, Server …, Line 1
The statement BACKUP LOG is not allowed while the recovery model is SIMPLE. Use BACKUP DATABASE or change the recovery model using ALTER DATABASE.
SIMPLE hat keinen regulären Logbackuppfad. Der erfolgreiche Ola-Aufruf belegt keinen Fehler der Maintenance Solution; er zeigt, weshalb die Sollabdeckung eine eigene Prüfung braucht.
Vergleichen Sie deshalb das erwartete Datenbankinventar mit tatsächlich entstandenen Backupsets, erforderlichen Typen, deren Alter, Datei- und Kopierstatus. Führen Sie Restoretests als eigenen Nachweis. Ein CommandLog mit sechs erfolgreichen Befehlen beantwortet noch nicht, ob die siebte erwartete Datenbank gesichert wurde (Ola: Parameter und Verhalten, geprüfter Originalcode).
Retention: vom ältesten zugesagten Restorepunkt rückwärts denken
„Sieben Tage aufbewahren“ ist als Dateiregel mehrdeutig. Sollen alle Dateien nach sieben Tagen verschwinden? Oder muss jeder vereinbarte Zeitpunkt der vergangenen sieben Tage erreichbar sein? Für Letzteres kann die benötigte Full-Basis älter als sieben Tage sein.
Schematisches Beispiel: Das Restorefenster beginnt an einem Mittwochmittag. Das dafür benötigte Full stammt vom vorherigen Sonntag. Wenn Sie diese Basis rein nach Alter löschen, kann der älteste zugesagte Mittwoch trotz jüngerer Logs unerreichbar werden. Eine spätere Vollsicherung hilft nicht für ein früheres Ziel.
Sieben Tage Dateien oder sieben Tage Wiederherstellung?
Full sonntags, Diff täglich, Logs durchgehend. Zugesagt: Jeder Zeitpunkt der letzten sieben Tage ist erreichbar.
Ältestes zugesagtes Ziel: Mi, Woche 2, 12:00. Dafür nötig: Full vom So, Woche 2, 10,5 Tage alt. Nach Alter gelöscht: Dieses Full ist weg. Ziele von Mi, Woche 2, 12:00 bis zum Full vom So, Woche 3 sind unerreichbar, obwohl jüngere Diffs und Logs vorhanden sind.
Mit der Regel „abhängige Menge behalten“ bleiben das Full vom So, Woche 2, das Diff vom Mi, Woche 2, und die Logs ab dort erhalten; das ganze Fenster ist erreichbar.
Das Bild erklärt die Anforderung. Es simuliert nicht den Cleanup-Algorithmus von Olas Maintenance Solution; deren @CleanupTime rechnet zudem in Stunden, nicht in Tagen. Ob Ihr Fenster hält, muss eine Probe des ältesten zugesagten Zeitpunkts zeigen.
Planen Sie deshalb pro zugesagtem Zielbereich die vollständige Menge aus Basis, gegebenenfalls Diff, erforderlichen Logs, allen Stripes und Schlüsseln. Berücksichtigen Sie erfolgreiche externe Kopien und deren eigene Lifecycle-Regeln. Die Platzplanung braucht Reserve für eine neue Generation, bevor eine alte entfernt wird.
Olas @CleanupTime arbeitet in Stunden, nicht Tagen. @CleanupMode='AFTER_BACKUP' ist der Standard; die Lösung hat Schutzlogik für abhängige Sicherungen. Das ist hilfreich, aber keine Abnahme Ihres individuellen historischen Restorefensters. Eine Umstellung auf BEFORE_BACKUP nur wegen knappen Platzes kann gerade die noch vorhandene Absicherung verringern (Ola: CleanupTime).
Backupdateien löschen, msdb-Historie bereinigen und CommandLog pflegen sind getrennte Aufgaben. sp_delete_backuphistory entfernt Historie, keine Backupdateien. Für URL-Ziele unterstützt Ola kein entsprechendes Datei-Cleanup; die Speicher-Lifecycle-Regeln müssen gesondert zu den Restoreabhängigkeiten passen.
Die wirksamste Gegenprobe ist ein Test des ältesten zugesagten Wiederherstellungszeitpunkts. Wer immer nur das jüngste Full wiederherstellt, prüft die schwierige Kante des Aufbewahrungsfensters nicht.
Vertiefung Schlüssel, Speicher und Replikate
Wenn die Sicherungsstrecke länger wird
Für Umgebungen mit Verschlüsselung, Objektspeicher oder Availability Groups. Für den RTO-Abschnitt sind diese Teile nicht nötig. Zum RTO springen ↓
Verschlüsselung: das Backup allein kann zu wenig sein
Bei nativer Backupverschlüsselung benötigt das Ziel das passende Zertifikat oder den asymmetrischen Schlüssel. Bei TDE-geschützten Datenbanken besteht ebenfalls eine Schlüsselabhängigkeit. TDE und ein zusätzlich eingesetztes Backupverschlüsselungszertifikat sind dabei unterschiedliche Ebenen.
Zum Wiederherstellungsbestand gehören deshalb Zertifikate, private Schlüssel beziehungsweise die dafür benötigten externen Schlüsselzugänge und die zugehörigen Geheimnisse. Sie müssen geschützt, erreichbar und ausreichend lange aufbewahrt werden. Eine Zertifikatsrotation macht alte Backups nicht automatisch vom alten Zertifikat unabhängig.
Backup da, Schlüssel fehlt
Eine frische Zielinstanz und ein verschlüsseltes Backup. Spielen Sie das Schlüsselmaterial ein.
Gesicherter Schlüsselbestand getrennt aufbewahrt
- Zertifikat
- Privater Schlüssel
- Zugehörige Geheimnisse
Frische Zielinstanz
- Backupdateivorhanden
- Zertifikatfehlteingespielt
- Privater Schlüsselfehlteingespielt
Restore nicht möglichRestore möglich
Nach dem Einspielen von Zertifikat und privatem Schlüssel aus dem gesicherten Bestand ist der Restore laut Dokumentation möglich.
Die aussagekräftige Probe verwendet eine frische Zielinstanz, auf der das Material zunächst fehlt, und richtet es ausschließlich aus dem gesicherten Bestand ein. Ein Restore auf dem Ursprungsserver prüft diesen Verlustfall nur begrenzt. Dieser Schlüsselverlustfall ist in unserer Labserie als Ausbau beschrieben, noch nicht ausgeführt (Microsoft: Backup Encryption, TDE-geschützte Datenbank übertragen).
Stripes, Kopien und geschützter Speicher
Mehrere Dateien hinter TO DISK teilen ein Backup in Medienfamilien auf. Diese Stripes sind gemeinsam benötigte Teile. Sie sind keine mehrfachen vollständigen Sicherungen. Im Lab scheitert die Verifikation mit nur einer von zwei Stripe-Dateien; mit beiden lässt sich die Datenbank wiederherstellen.
Zwei Stripes sind ein Backup
Links ein Backup in zwei Medienfamilien, rechts zwei unabhängige Kopien. Welche Dateien stehen bereit?
Ein Backup, zwei Stripes
Zwei unabhängige Kopien Schema
Nur S1: Verify scheitert
Originalmeldung (SQL Server, englisch)
Msg 3132, Level 16, State 1, Server …, Line 1
The media set has 2 media families but only 1 are provided. All members must be provided.
Die Sicherung besteht aus zwei Medienfamilien. Eine allein ist kein vollständiges Backup.
S1 + S2: Restore mit 5 Markern, CHECKDB ohne Fehler
Erst beide Dateien zusammen ergeben die Sicherung.
Mehrere unabhängige Kopien sind eine andere Maßnahme. Native Medienmirrors und Olas @MirrorDirectory haben eigene Anforderungen, einschließlich Editionsgrenzen. Mehrere @Directory-Ziele oder @NumberOfFiles dürfen deshalb nicht einfach als Kopienanzahl beschrieben werden (Microsoft: Backupmedien und Stripes).
Getrennte Kopien, getrennte Berechtigungen und gegebenenfalls unveränderbare Aufbewahrung sollten zum Ausfall- und Angriffsszenario passen. Ein URL-Ziel ist durch seine Adresse noch nicht unveränderbar. Speicherpolicy, Schreibverfahren, Löschrechte und Identitäten entscheiden.
laut Microsoft-Dokumentation · nicht im Lab getestet Versionsbeispiel: Microsoft dokumentiert direkte Backups in Azure container-level immutable storage für SQL Server 2025; ältere Engines und version-level immutability sind davon nicht pauschal umfasst. Das ist keine allgemeine Aussage über beliebige S3-, Azure- oder Appliance-Ziele. Dieser Speicherpfad wurde in unserem Lab nicht getestet (Microsoft: Backup to URL, Immutable Storage).
Availability Groups: Präferenz allein führt keinen Job aus
Jobs müssen auf den vorgesehenen Replikaten vorhanden sein, die Rollen- und Backuppräferenz auswerten und auf die benötigten Ziele zugreifen können. Ein Failover verteilt Ihre Jobs und Dateien nicht automatisch neu.
Nach dem Rollenwechsel
Zwei Replikate, ein Backupjob, zwei Ablagen. Lösen Sie den Failover aus.
Replikat A primärsekundär
Backupjob bleibt auf A
Ablage AFLLbisherige Sicherungen
Replikat B primärsekundär
kein Job eingerichtet kommt nicht von selbst
Ablage Bleer
Gesondert prüfen
- Jobs auf den vorgesehenen Replikaten vorhanden?
- Rollen- und Backuppräferenz im Job ausgewertet?
- Benötigte Ziele von dort erreichbar?
- Wiederherstellung aus allen beteiligten Speicherorten geprobt?
laut Microsoft-Dokumentation · nicht im Lab getestet Für unterstützte Enterprise-AG-Secondaries bis SQL Server 2022 gelten die bekannten Copy-only-Full- und regulären Logbackupmöglichkeiten. SQL Server 2025 erweitert die native Unterstützung um normale Full- und Differentialbackups auf Secondaries. Basic AGs haben gesonderte Einschränkungen; die Erweiterung darf nicht ungeprüft auf eine Standard-Edition-Topologie übertragen werden (Microsoft: Backups on Secondary Replicas).
Im geprüften Ola-Stand gibt es @AvailabilityGroups, die Datenbankauswahl AVAILABILITY_GROUP_DATABASES und @OverrideBackupPreference; einen Parameter @AvailabilityGroupBackup gibt es dort nicht. @AvailabilityGroups und @Databases werden nicht gleichzeitig gesetzt. Die tatsächliche Unterstützung hängt weiterhin von Engine, Edition, Rolle und Zustand ab.
Für die Abnahme gehören ein geplanter Rollenwechsel, die anschließend tatsächlich entstandenen Sicherungen und deren Wiederherstellung aus allen beteiligten Speicherorten zusammen. Dieser AG-Failovertest ist ein vorgeschlagenes Folgelab und kein Ergebnis der vorliegenden Einzelinstanztests.
RTO verbessern: den gesamten Ablauf messen
Die richtige Optimierung beginnt mit einer Zeitaufteilung: Bereitstellung, Zugriff auf Dateien und Schlüssel, Transfer, Full-, Diff- und Logrestore, Recovery, Konsistenzprüfung, Instanzobjekte und Anwendungsfreigabe.
35 Minuten Restore. Reicht eine Stunde?
Ein RTO von 60 Minuten, ein Restore von 35 Minuten. Die übrigen Phasendauern sind frei gewählte Beispiele. Ändern Sie sie.
- 1
- 2
- 3
- 4
- 5
Summe 80 min RTO von 60 min um 20 min überschritten
Kompression kann Übertragungs- und I/O-Aufwand reduzieren, kostet jedoch CPU. Stripes können geeignete I/O-Ressourcen besser ausnutzen; auf demselben Engpass entsteht daraus kein zusätzlicher physischer Durchsatz. BUFFERCOUNT, MAXTRANSFERSIZE oder zusätzliche Parallelität sind gezielte Messvariablen, keine universellen Beschleunigungsrezepte.
Ein anderer Mix aus Full, Diff und Log kann die einzuspielende Dateimenge verändern. Ein kleineres Backup kann trotzdem langsamer entstehen, und ein schneller Backupjob kann einen aufwendigen Restorepfad hinterlassen. Vergleichen Sie daher das ganze Verfahren unter repräsentativer Last und Größe. Die kleinen synthetischen Labdaten in dieser Reihe erlauben keine allgemeine RTO- oder Durchsatzempfehlung.
Zur freigegebenen Anwendung gehören häufig mehr als Userdatenbanken: Logins und SIDs, Agentjobs, Credentials, Zertifikate, Schnittstellen und abgestimmte Stände mehrerer Datenbanken. Gleicher STOPAT-Zeitpunkt und fehlerfreies CHECKDB beweisen allein keine fachlich konsistente Gesamtanwendung. Für zusammengehörige Datenbanken können vorab geplante markierte Transaktionen Teil eines geeigneten Verfahrens sein (Microsoft: Related Databases Consistently Recover).
Best Practices für fortgeschrittenen Betrieb
- Jeden Ausfallfall benennen. Versehentliche Änderung, Datenbankverlust, Serververlust und Verlust des Backupziels brauchen unterschiedliche Nachweise.
- Restorepfade inventarisieren. Basis, Logabdeckung, Recovery Forks, Medienpositionen, Stripes und Schlüssel zusammenführen.
- Zusatzbackups koordinieren. Normales Full, Copy-only-Full und zusätzliche Logjobs bewusst in den bestehenden Plan einordnen.
- Das älteste Ziel testen. Retention nicht nur am neuesten erfolgreichen Backup beurteilen.
- Schlüssel unabhängig prüfen. Frische Instanz aus gesichertem Material wiederherstellen; Zugriffe und Entschlüsselung tatsächlich testen.
- Fehler bis zum Verantwortlichen transportieren. Prozedur, Scheduler, Job und Benachrichtigung gemeinsam prüfen; Überspringen über die Abdeckungsprüfung erkennen.
- Typwechsel und Ausnahmen sichtbar halten.
@ChangeBackupType, Mindestgrößen und -abstände sowie Replikatpräferenzen können die erwartete Menge ändern. - RTO vollständig messen. Ein Restorebefehl ist ein Abschnitt des Wiederanlaufs. Fachliche Freigabe und Abhängigkeiten mitmessen.
- Updates kontrolliert übernehmen. Engine- und Ola-Version erfassen, Optionen vergleichen und Kernproben erneut durchführen.
- Ein zweites Teammitglied einbeziehen. Ein dokumentierter, erfolgreich übergebener Ablauf ist belastbarer als ausschließliches Personenwissen.
To-do-Listen
Eine Liste für den laufenden Betrieb, eine für den konkreten Problemfall. Ihr Häkchenstand bleibt nur in Ihrem Browser.
Betrieb und regelmäßige Probe
Bei einem konkreten Restoreproblem
Häufige Fragen
Unterbricht ein zusätzliches Full die Logkette?
Nein. Ein normales Full verändert die Differentialbasis. Die Logbackupfolge ist davon getrennt. Bild 1
Was bedeutet Fehler 3136?
Häufig passt ein Diff nicht zur zuvor wiederhergestellten Basis. Prüfen Sie Header, Basis und bisherige Restorefolge. Ein Dateiname oder derselbe Datenbankname beweist die Zuordnung nicht. Bild 2
Was bedeutet Fehler 4305?
Das einzuspielende Log beginnt für den aktuellen Restorestand zu spät. Suchen Sie die erforderliche vorherige Abdeckung und prüfen Sie, ob Sie den richtigen Wiederherstellungsweg gewählt haben. Bild 3
Kann Ola den Restore vollständig übernehmen?
DatabaseBackup erzeugt Sicherungen und kann sie verifizieren. Ein allgemeiner Restoreplan mit beliebiger Dateisuche, Zielzeitpunkt, Schlüsselbereitstellung und Anwendungsfreigabe ist dadurch nicht enthalten.
Bewahrt @CleanupTime = 168 sicher sieben Tage Point-in-time auf?
Das muss aus den erhaltenen Abhängigkeiten und einer Probe hervorgehen. Eine Stundenregel allein ist kein Nachweis eines vollständigen Restorefensters. Bild 8
Reichen identische Uhrzeiten bei mehreren Datenbanken?
Sie belegen noch keinen gemeinsamen fachlichen Transaktionszustand. Abhängigkeiten und geeignete Koordination müssen Teil des Verfahrens sein.
Machen Verschlüsselung und Immutable Storage Backups automatisch sicher?
Sie adressieren wichtige Risiken. Verfügbare Schlüssel, korrekte Speicherpolicies, vollständige Restorepfade und Tests bleiben erforderlich.
Wie oft sollten wir testen?
Leiten Sie die Häufigkeit aus Risiko und Änderungsrate ab und planen Sie sie verbindlich. Neue Versionen, neue Ziele, Schlüsselrotationen, Topologieänderungen oder ein geändertes Retentionsverfahren sind konkrete Anlässe für zusätzliche Proben. Eine pauschale Frequenz ersetzt diese Bewertung nicht.
Prüfen Sie Ihr Verständnis
Zwei Fragen aus dem Alltag. Überlegen Sie kurz, dann drehen Sie die Karte um.
-
Frage 1 · Diff-Basis
Sie haben ein Full vom Sonntag, ein zusätzliches Copy-only-Full vom Dienstag und ein Diff vom Mittwoch. Auf welches Full gehört der Diff, sofern dazwischen kein weiteres normales Full entstanden ist?
AuflösungAuf das Full vom Sonntag.
Es ist die passende normale Full-Basis. Das Copy-only-Full hat sie nicht verändert und ist selbst keine Diff-Basis. Die tatsächliche Identität wird mit den Metadaten und dem Restore geprüft.
-
Frage 2 · RTO
Alle Dateien sind vorhanden, der Restore dauert 35 Minuten. Ist ein RTO von einer Stunde damit eingehalten?
AuflösungNoch nicht entschieden.
Erst wenn die übrigen vereinbarten Phasen einschließlich Bereitstellung, Zugriff, Prüfungen und Anwendungsfreigabe innerhalb der verbleibenden Zeit abgeschlossen sind. Die einzelne SQL-Dauer genügt dafür nicht.
Finden Sie die richtige Route?
Jede Antwort wird sofort aufgelöst, mit Verweis auf die passende Stelle im Beitrag. Ohne Cookies.
Herkunft und Dank
Die SQL Server Maintenance Solution von Ola Hallengren automatisiert Sicherungen mit den nativen Funktionen von SQL Server und protokolliert, was sie tut. Quellcode und Dokumentation sind frei verfügbar, unter MIT-Lizenz (Repository). Danke an Ola Hallengren und an die Community, die die Lösung einsetzt, prüft und weiterträgt.
Wo dieser Beitrag Grenzen beschreibt, sind es Einsatzgrenzen und keine Mängel: DatabaseBackup sichert und verifiziert, den Restoreplan, das Sollinventar und die Proben bauen Sie darum herum. Genau diese Aufgabenteilung macht die Lösung nachvollziehbar.
Dieser Beitrag ist eigener Text mit eigenen Labproben. Ola Hallengren hat ihn weder geprüft noch freigegeben; Schlussfolgerungen und eventuelle Fehler sind unsere. Für Parameter und Verhalten ist Olas eigene Dokumentation maßgeblich. Geprüft haben wir den Stand von Commit 41617578 (Quellzeitstempel 12.09.2026); neuere Fassungen können sich anders verhalten.
Methode und Grenzen
Faktenstand 22.10.2026. Ola-Originalcode auf Commit 41617578643e722b790ea4d57ef80f8de38ae747 eingefroren. Das eigene Lab prüft ausgewählte native Restorepfade und Ola-Aufrufe auf SQL Server 2022 und 2025 unter Linux.
Aufbau und Prüfung im Detail
Engines: SQL Server 2022 CU27 (16.0.4295.3, Developer Edition) und SQL Server 2025 CU9 (17.0.5005.3, Enterprise Developer Edition), jeweils in einem Linux-Container, nacheinander mit identischen Grenzen: 2 CPUs, 3 GiB Container-Speicher, Max Server Memory 1.536 MB, ohne Netzwerkzugang. Standard-Kompatibilitätslevel der jeweiligen Engine.
Daten: rein synthetisch, wenige nummerierte Marker je Testdatenbank, darunter eine Datenbank mit Recovery SIMPLE. Jede Restoreprobe zählt die Marker und läuft mit vollständigem DBCC CHECKDB; bei STOPAT prüfen wir zusätzlich, welche Marker vorhanden sind.
Ola: Einzelinstallation von CommandLog.sql, CommandExecute.sql und DatabaseBackup.sql in einer eigenen Datenbank; kein vollständiger Installerlauf, keine zeitgesteuerten Jobs.
Ergebnis: 26 datenbasierte Prüfungen je Engine, alle bestanden (52 von 52). Beide Versionen zeigen in den ausgewählten Fällen dasselbe Funktionsverhalten. Gemessene Laufzeiten sind Ausführungsbelege kleiner Funktionsproben, keine Benchmarks und keine RTO-Messungen.
Nicht geprüft: keine produktive Windows-Integration, kein Server- oder Standortverlust, keine Availability Group, kein Objektspeicher, kein echtes Retentionsfenster, kein Schlüsselverlustfall. Ebenfalls nur dokumentationsgestützt: BULK_LOGGED, Systemdatenbanken, Scheduler und vollständige Anwendungswiederherstellung. Dass ein normales Full die Logkette nicht unterbricht, belegt die Microsoft-Dokumentation; einen eigenen Versuch dazu gab es nicht. Die betroffenen Bilder tragen deshalb „Schema“ oder „Quellkonzept“.