MS SQL Server Backup & Recovery AlwaysOn RPO / RTO FULL Backup DIFFERENTIAL LOG Backup dbaTools

SQL Server Backup-Strategien
FULL, DIFF, LOG – RPO & RTO

Ein strukturierter Leitfaden zu allen SQL Server Backup-Typen, Recovery-Modellen und den Kennzahlen RPO und RTO. Mit konkreten Empfehlungen für die Praxis, dbaTools-Beispielen und einer vollständigen Betrachtung von Backup-Optimierung mit AlwaysOn Availability Groups.

Grundlagen – Warum Backups mehr als Pflicht sind

Ein SQL Server-Backup ist nicht nur eine gesetzliche oder regulatorische Anforderung – es ist die einzige verlässliche Absicherung gegen Datenverlust durch Hardware-Ausfall, menschliche Fehler, Ransomware oder logische Datenbankkorruption. AlwaysOn Availability Groups schützen vor Ausfällen, aber sie replizieren auch Fehler in Echtzeit. Ein Backup ist unersetzlich.

Kritischer Irrtum: AlwaysOn AG oder Spiegelung ersetzen kein Backup. Ein versehentliches DELETE ohne WHERE wird sofort auf alle Replikate synchronisiert – ohne Point-in-Time-Recovery durch LOG-Backups ist die Tabelle unwiederbringlich verloren.
3
Backup-Typen
FULL / DIFF / LOG
3
Recovery-Modelle
SIMPLE / BULK / FULL
RPO
Max. akzeptabler
Datenverlust
RTO
Max. akzeptable
Ausfallzeit

Die drei Backup-Säulen auf einen Blick

🗄️

FULL Backup

Vollständige Kopie aller Datenbankdaten. Basis jeder Restore-Kette. Enthält alle Daten zum Backup-Zeitpunkt.

Wöchentlich / täglich
🔄

DIFFERENTIAL

Alle seit dem letzten FULL geänderten Extents. Kleiner als FULL, schneller als Restore über viele LOGs.

Täglich / stündlich
📋

LOG Backup

Transaktionsprotokoll seit letztem LOG-Backup. Ermöglicht Point-in-Time-Recovery. Kürzt das Transaktionslog.

Minütlich / stündlich

Recovery-Modelle – Die Basis der Strategie

Das Recovery-Modell einer Datenbank bestimmt, welche Backup-Typen möglich sind und wie das Transaktionsprotokoll verwaltet wird. Es ist die wichtigste Einstellung vor jeder Backup-Planung.

Recovery-ModellLOG-VerwaltungLOG-BackupPoint-in-TimeLog-WachstumEinsatz
SIMPLE Automatisch nach Checkpoint freigegeben Nicht möglich Nein Unkritisch Dev/Test, kleine Datenbanken, DWH-Staging
BULK_LOGGED Minimale Protokollierung für Bulk-Ops Eingeschränkt Eingeschränkt Moderat Bulk-Import-Phasen (temporär wechseln)
FULL Nur durch LOG-Backup freigegeben Ja (Pflicht!) Ja Unbegrenzt ohne LOG-Backups Alle Produktionsdatenbanken
LOG-Falle im FULL-Modell: Im FULL Recovery-Modell wächst das Transaktionslog unbegrenzt, solange keine LOG-Backups durchgeführt werden. Ohne regelmäßige LOG-Backups füllt sich das Log-Volume – die Datenbank geht offline. Das ist der häufigste vermeidbare Ausfall in der Praxis.
T-SQL — Recovery-Modell prüfen und setzen sys.databases
-- Recovery-Modell aller Datenbanken anzeigen
SELECT name, recovery_model_desc, log_reuse_wait_desc
FROM sys.databases
ORDER BY name;

-- Auf FULL umstellen (Produktionsdatenbank)
ALTER DATABASE [AppDB] SET RECOVERY FULL;

-- Wichtig: Danach sofort ein FULL-Backup erzeugen!
-- Erst ab dem ersten FULL-Backup nach der Umstellung
-- beginnt die vollständige LOG-Kette.
BACKUP DATABASE [AppDB]
  TO DISK = N'D:\Backup\AppDB_FULL.bak'
  WITH COMPRESSION, STATS = 10;
AlwaysOn-Pflicht: Datenbanken in einer Availability Group müssen zwingend im FULL Recovery-Modell betrieben werden. Ein Wechsel auf SIMPLE entfernt die Datenbank automatisch aus der AG.

Backup-Typen im Detail

FULL Backup – Die Basis

Ein FULL Backup enthält alle Datenbankseiten zum Zeitpunkt des Backups sowie alle während des Backup-Vorgangs angefallenen Transaktionen. Es ist self-contained – ein Restore ist ohne weitere Dateien möglich.

✔ Eigenschaften FULL

  • Vollständige Datenbasis – steht allein
  • Startpunkt jeder Restore-Kette
  • Copy-Only-FULL bricht die LOG-Kette nicht
  • Basis für DIFFERENTIAL-Backups
  • Kann auf Sekundär-Replikat (AG) laufen

✗ Nachteile FULL

  • Größtes Backup – höchster I/O, längste Laufzeit
  • Bei großen DBs: stundenlange Backup-Fenster
  • Hoher Speicherbedarf ohne Kompression
  • Allein kein Point-in-Time möglich

DIFFERENTIAL Backup – Der intelligente Mittelweg

Ein DIFFERENTIAL Backup sichert alle seit dem letzten FULL geänderten Datenbank-Extents (8 Seiten). Es ist kumulativ – jedes neue DIFF enthält alle Änderungen seit dem letzten FULL, nicht nur seit dem letzten DIFF. Das vereinfacht den Restore erheblich.

Restore-Kette DIFF: Für einen Restore benötigen Sie genau 2 Dateien: das letzte FULL-Backup + das letzte DIFFERENTIAL-Backup. Kein Durchspielen aller DIFFs.
VergleichFULLDIFFERENTIALLOG-Kette
Restore-Dateien1 (FULL)2 (FULL + letztes DIFF)FULL + letztes DIFF + alle LOGs seit DIFF
Backup-GrößeSehr groß (100 %)Mittel (typ. 10–40 %)Klein (typ. 1–5 %)
Backup-DauerLangMittelSehr kurz
Point-in-TimeNeinNeinJa (auf Sekunde)
Kürzt TransaktionslogNeinNeinJa
SIMPLE-Modell möglichJaJaNein

LOG Backup – Point-in-Time und Log-Kürzung

Das Transaction Log Backup sichert alle seit dem letzten LOG-Backup angefallenen Log-Einträge. Es ist das Herzstück jeder professionellen Backup-Strategie: Es ermöglicht die Wiederherstellung auf jeden beliebigen Zeitpunkt und ist die einzige Methode, das Transaktionslog zu kürzen.

LOG-Ketten-Unterbrechung: Ein FULL-Backup im normalen Modus (nicht COPY_ONLY) bricht die LOG-Kette nicht. Aber: ein fehlgeschlagenes oder ausgelassenes LOG-Backup unterbricht die Kette – alle nachfolgenden LOGs können nicht mehr für einen durchgehenden Point-in-Time-Restore genutzt werden.
T-SQL — FULL, DIFFERENTIAL und LOG Backup Basis-Syntax mit Empfehlungen
-- FULL Backup mit Kompression und Prüfsumme
BACKUP DATABASE [AppDB]
  TO DISK = N'\\backup-srv\SQL\AppDB\FULL\AppDB_20250425.bak'
  WITH
    COMPRESSION,
    CHECKSUM,
    STATS = 5,
    NAME = N'AppDB – FULL – 2025-04-25';

-- DIFFERENTIAL Backup
BACKUP DATABASE [AppDB]
  TO DISK = N'\\backup-srv\SQL\AppDB\DIFF\AppDB_diff_20250425_1200.bak'
  WITH DIFFERENTIAL, COMPRESSION, CHECKSUM, STATS = 5;

-- LOG Backup (kürzt auch das Transaktionslog)
BACKUP LOG [AppDB]
  TO DISK = N'\\backup-srv\SQL\AppDB\LOG\AppDB_log_20250425_1215.trn'
  WITH COMPRESSION, CHECKSUM, STATS = 10;

-- COPY_ONLY FULL – bricht LOG-Kette NICHT
-- Ideal fuer Ad-hoc-Backups, Tests, Migrationen
BACKUP DATABASE [AppDB]
  TO DISK = N'D:\Temp\AppDB_copy_only.bak'
  WITH COPY_ONLY, COMPRESSION, CHECKSUM;

RPO & RTO – Die entscheidenden Kennzahlen

Bevor eine Backup-Strategie festgelegt wird, müssen zwei Fragen mit dem Business beantwortet werden. Die Antworten definieren direkt, welche Backup-Typen und -Frequenzen nötig sind.

⏱ RPO – Recovery Point Objective

  • Frage: Wie viele Daten dürfen maximal verloren gehen?
  • Einheit: Zeit (Sekunden, Minuten, Stunden)
  • Beispiel RPO = 5 min: LOG-Backups alle 5 Minuten nötig
  • Beispiel RPO = 24 h: Ein tägliches FULL-Backup reicht
  • Wird bestimmt durch: Geschäftsrisiko eines Datenverlusts

⏳ RTO – Recovery Time Objective

  • Frage: Wie lange darf die Wiederherstellung dauern?
  • Einheit: Zeit (Minuten, Stunden)
  • Beispiel RTO = 1 h: Restore + Anwendung in 60 min möglich?
  • Beispiel RTO = 4 h: Mehr Spielraum, kleinere Backup-Splits
  • Wird bestimmt durch: Toleranz für Systemausfall

RPO / RTO Visualisierung – Typische Backup-Kette

Beispiel: FULL sonntags / DIFF täglich / LOG stündlich → RPO ≈ 1 h
FULL So 22:00
LOG Mo 01:00
LOG Mo 02:00
DIFF Mo 06:00
LOG Mo 07:00
LOG Mo 08:00
💥 08:47
FULL Backup
DIFFERENTIAL
LOG Backup
Datenverlust-Ereignis

Restore-Pfad: FULL (So 22:00) → DIFF (Mo 06:00) → LOG (Mo 07:00) → LOG (Mo 08:00) → Point-in-Time 08:47
RPO: max. 1 Stunde (letztes LOG-Backup)  |  RTO: abhängig von Restore-Dauer aller Dateien + Datenbankgröße

RPO / RTO – Strategie-Matrix nach Anforderung

RPO-ZielRTO-ZielEmpfohlene StrategieBackup-Frequenz LOGTechnologie
≈ 0 (kein Verlust)< 30 s AlwaysOn synchron + LOG-Backups Jede Minute AG + LOG
< 5 Minuten< 30 min FULL täglich + LOG alle 5 min 5 Minuten FULL + LOG
< 1 Stunde< 2 Stunden FULL wöchentlich + DIFF täglich + LOG stündlich 1 Stunde FULL + DIFF + LOG
< 24 Stunden< 4 Stunden FULL täglich + DIFF alle 4–8 h Entfällt (SIMPLE) FULL + DIFF
24 Stunden< 8 Stunden FULL täglich (SIMPLE Recovery) Nicht möglich Nur FULL
Faustregel: Das RPO definiert die LOG-Backup-Frequenz. Das RTO definiert, wie groß der Restore sein darf – und damit wie häufig FULL und DIFF Backups erfolgen müssen, um die Anzahl der wiederherzustellenden LOG-Dateien zu begrenzen.

Backup-Strategien für die Praxis

Strategie A – Kleine bis mittlere Datenbanken (< 100 GB)

Empfehlung: Tägliches FULL + LOG-Backups alle 15–30 Minuten.
Kein DIFF nötig – der Restore eines täglichen FULL + einiger LOGs ist schnell genug.
Backup-TypFrequenzAufbewahrungZiel
FULLTäglich 22:0014 TageNetzwerk-Share / Cloud
DIFFERENTIALNicht erforderlich
LOGAlle 15 Min.7 TageNetzwerk-Share

Strategie B – Große Datenbanken (100 GB – 1 TB)

Empfehlung: Wöchentliches FULL (Wochenende) + tägliches DIFF + LOG alle 15–60 Min.
Der Restore nutzt FULL + letztes DIFF + wenige LOGs – deutlich schneller als reine LOG-Kette.
Backup-TypFrequenzAufbewahrungZiel
FULLSonntag 23:004 WochenNetzwerk-Share + Cloud-Tier
DIFFERENTIALMo–Sa 23:002 WochenNetzwerk-Share
LOGAlle 30 Min.7 TageSchneller lokaler Share

Strategie C – VLDB (Very Large Databases, > 1 TB)

Besondere Anforderungen: Bei Datenbanken über 1 TB sind Full-Backups über Nacht oft nicht mehr im Backup-Fenster möglich. Lösungsansätze: Backup-Kompression maximieren, Backup auf Sekundär-Replikat (AlwaysOn), File-Group-Backups, oder Striping auf mehrere Dateien.
T-SQL — Backup-Striping auf mehrere Dateien (VLDB) Erhöht Backup-Durchsatz erheblich
-- Backup auf 4 parallele Dateien aufteilen – bis zu 4x schneller
BACKUP DATABASE [VeryLargeDB]
  TO
    DISK = N'\\backup01\SQL\VLDB_1.bak',
    DISK = N'\\backup02\SQL\VLDB_2.bak',
    DISK = N'\\backup03\SQL\VLDB_3.bak',
    DISK = N'\\backup04\SQL\VLDB_4.bak'
  WITH
    COMPRESSION,
    CHECKSUM,
    MAXTRANSFERSIZE = 4194304, -- 4 MB (optimal fuer grosse DBs)
    BUFFERCOUNT = 50,
    STATS = 1;

Backup-Validierung – Pflicht, keine Kür

Ein Backup das nie getestet wurde, ist kein Backup. Die CHECKSUM-Option erkennt Korruption beim Schreiben – aber nur ein vollständiger Restore-Test beweist die Wiederherstellbarkeit.

T-SQL — Backup verifizieren und Restore-Header lesen Grundlegende Integritätsprüfung
-- Backup-Datei auf Integrität prüfen (ohne Restore)
RESTORE VERIFYONLY
  FROM DISK = N'\\backup-srv\SQL\AppDB\FULL\AppDB_20250425.bak'
  WITH CHECKSUM;

-- Backup-Header auslesen (Inhalt, Zeitstempel, LSN)
RESTORE HEADERONLY
  FROM DISK = N'\\backup-srv\SQL\AppDB\FULL\AppDB_20250425.bak';

-- Dateien im Backup auflisten
RESTORE FILELISTONLY
  FROM DISK = N'\\backup-srv\SQL\AppDB\FULL\AppDB_20250425.bak';

-- Point-in-Time Restore (auf Testserver!)
RESTORE DATABASE [AppDB_Test]
  FROM DISK = N'\\backup-srv\SQL\AppDB\FULL\AppDB_20250425.bak'
  WITH NORECOVERY, MOVE N'AppDB' TO N'D:\Data\AppDB_Test.mdf',
     MOVE N'AppDB_log' TO N'E:\Log\AppDB_Test_log.ldf';

RESTORE LOG [AppDB_Test]
  FROM DISK = N'\\backup-srv\SQL\AppDB\LOG\AppDB_log_20250425_1215.trn'
  WITH NORECOVERY;

-- Letztes LOG: RECOVERY = Datenbank online bringen
RESTORE LOG [AppDB_Test]
  FROM DISK = N'\\backup-srv\SQL\AppDB\LOG\AppDB_log_20250425_1300.trn'
  WITH RECOVERY, STOPAT = N'2025-04-25T12:47:00';

AlwaysOn & Backup – Optimierung durch Replikate

Availability Groups bieten eine der wirkungsvollsten Backup-Optimierungen: Die I/O-Last des Backups kann vollständig vom Primär-Replikat auf ein Sekundär verlagert werden. Das entlastet den produktiven Primary und nutzt das passive Replikat aktiv.

LOG-Backups sind AG-übergreifend: LOG-Backups sind austauschbar – ein LOG-Backup das auf dem Sekundär erzeugt wurde, kann problemlos in einer Restore-Kette mit FULL-Backups vom Primary kombiniert werden. Die LSN-Kette ist einheitlich über alle Replikate.

Backup-Präferenz in der AG konfigurieren

🔵 Primary Replica – Empfehlungen
  • Nur FULL Backups (Copy-Only für Tests)
  • Kein DIFFERENTIAL – verursacht unnötig I/O
  • Kein LOG-Backup – läuft besser auf Sekundär
  • Ausnahme: Kein Sekundär verfügbar → Fallback
  • Einstellung: PREFER SECONDARY
🟢 Secondary Replica – Empfehlungen
  • LOG-Backups (entlastet Primary I/O)
  • DIFFERENTIAL Backups
  • COPY_ONLY FULL für Dev/Test
  • DBCC CHECKDB ausführen (I/O auf Sekundär)
  • Setzt FULL Recovery-Modell voraus
AG Backup-PräferenzVerhaltenEmpfehlung
PRIMARY Backups laufen ausschließlich auf dem Primary Nicht empfohlen – Primary belastet
SECONDARY_ONLY Backups nur auf Sekundär; bei Ausfall kein Backup Riskant – kein Fallback
PREFER SECONDARY Sekundär bevorzugt; Fallback auf Primary wenn nötig Empfohlen – Best Practice
NONE Kein Einfluss auf Backup-Entscheidung Manuell – eigene Logik nötig

Wichtige Einschränkungen bei AG-Backups

✔ Auf Sekundär möglich

  • LOG Backups (vollständig kompatibel)
  • COPY_ONLY FULL Backups
  • DIFFERENTIAL Backups (seit SQL 2016 SP1)
  • DBCC CHECKDB für Integritätsprüfung
  • Statistik-Updates (lesend)

✗ Nur auf Primary möglich

  • Reguläre FULL Backups (nicht COPY_ONLY)
  • BACKUP LOG mit TRUNCATE_ONLY
  • Filegroup-Backups bestimmter Typen
  • Teilsicherungen (Partial Backups)
  • System-Datenbanken (master, msdb)
T-SQL / PowerShell — AG Backup-Präferenz und intelligentes Backup-Routing Backup läuft automatisch auf bevorzugtem Replikat
-- AG Backup-Präferenz setzen
ALTER AVAILABILITY GROUP [AG_PROD]
  SET (AUTOMATED_BACKUP_PREFERENCE = PREFER_SECONDARY);

-- Prüfen ob aktueller Knoten das bevorzugte Backup-Replikat ist
-- (in Backup-Jobs verwenden – verhindert doppelte Backups)
IF (sys.fn_hadr_backup_is_preferred_replica(N'AppDB') = 1)
BEGIN
  BACKUP LOG [AppDB]
    TO DISK = N'\\backup-srv\SQL\AppDB\LOG\AppDB_log.trn'
    WITH COMPRESSION, CHECKSUM;
  PRINT N'LOG-Backup auf bevorzugtem Replikat durchgefuehrt.';
END
ELSE
  PRINT N'Dieses Replikat ist nicht bevorzugt – kein Backup.';

-- Replikat-Backup-Status prüfen (dbaTools)
Get-DbaAgReplica -SqlInstance "SQL-NODE1" -AvailabilityGroup "AG_PROD" |
  Select-Object Name, Role, BackupPriority, AutomatedBackupPreference

Tail-Log Backup – Der letzte Rettungsanker

Bei einem Ausfall des Primary-Replikats und noch erreichbarem Datenbankfile kann ein Tail-Log Backup die zuletzt verbuchten Transaktionen sichern, bevor der Failover vollzogen wird. Dieses Backup enthält alles seit dem letzten regulären LOG-Backup.

T-SQL — Tail-Log Backup vor Force-Failover // Nur im Notfall – Datenbank danach offline
-- Tail-Log sichern wenn Datenbank noch erreichbar aber beschaedigt
-- NO_TRUNCATE: sichert auch wenn Daten-Dateien beschaedigt sind
BACKUP LOG [AppDB]
  TO DISK = N'\\backup-srv\SQL\AppDB\LOG\AppDB_TAILLOG_emergency.trn'
  WITH
    NO_TRUNCATE, -- Auch bei beschaedigten Datendateien
    NORECOVERY, -- Datenbank geht in Restoring-Status
    CHECKSUM;

-- Danach: Restore-Kette auf Standby/DR-Server abschliessen

Automatisierung mit dbaTools

dbaTools bietet mit Backup-DbaDatabase und dem Ola-Hallengren-kompatiblen Invoke-DbaDbLogShipping eine vollständige Backup-Automatisierung. Besonders hilfreich ist die integrierte AG-Awareness: Backups werden automatisch auf dem bevorzugten Replikat ausgeführt.

PowerShell (dbaTools) — Backup-Automatisierung und Überwachung dbatools ≥ 2.x
# FULL Backup aller Benutzerdatenbanken mit Kompression
Backup-DbaDatabase -SqlInstance "SQL-NODE1" `
  -Type Full `
  -Path "\\backup-srv\SQL" `
  -CompressBackup `
  -Checksum `
  -Verify `
  -ExcludeDatabase "tempdb"

# LOG-Backup mit AG-Awareness (bevorzugtes Replikat)
Backup-DbaDatabase -SqlInstance "SQL-NODE1", "SQL-NODE2" `
  -Type Log `
  -Path "\\backup-srv\SQL\LOG" `
  -CompressBackup `
  -Checksum `
  -AzureBaseUrl "" # optional: direkt nach Azure

# Backup-History der letzten 7 Tage anzeigen
Get-DbaDbBackupHistory -SqlInstance "SQL-NODE1" `
  -Since (Get-Date).AddDays(-7) |
  Select-Object Database, Type, Start, End, TotalSize, CompressedBackupSize |
  Sort-Object Start -Descending

# Letzte Backup-Zeit pro Datenbank – sofort sehen welche fehlen
Get-DbaLastBackup -SqlInstance "SQL-NODE1" |
  Select-Object Name, RecoveryModel,
    LastFullBackup, LastDiffBackup, LastLogBackup |
  Where-Object { $_.LastFullBackup -lt (Get-Date).AddDays(-1) }

# Backup-Datei verifizieren (ohne Restore)
Test-DbaLastBackup -SqlInstance "SQL-NODE1" `
  -Database "AppDB" `
  -Destination "SQL-TEST01" # Restore auf Testserver!

# Ola Hallengren Maintenance Solution installieren
Install-DbaMaintenanceSolution -SqlInstance "SQL-NODE1" `
  -Database "DBAMaintenance" `
  -BackupLocation "\\backup-srv\SQL" `
  -InstallJobs `
  -LogToTable

Backup-Monitoring – Was überwacht werden muss

ÜberwachungspunktSchwellwert (Beispiel)Konsequenz bei ÜberschreitungdbaTools-Befehl
Letztes FULL-Backup > 25 Stunden Alert, Backup sofort starten Get-DbaLastBackup
Letztes LOG-Backup > RPO × 1,5 Alert, Job-Ausfall prüfen Get-DbaLastBackup
LOG-Datei Wachstum > 80 % des Log-Volumes Sofortige Analyse – LOG-Backup fehlt? Get-DbaDbLogSpace
Backup-Dauer +50 % gegenüber Baseline I/O-Engpass, Fragmentierung prüfen Get-DbaDbBackupHistory
Backup-Verify Fehler bei VERIFYONLY Sofort – Backup unbrauchbar Test-DbaLastBackup
Log-Reuse-Wait LOG_BACKUP seit > 30 min LOG-Job hängt oder deaktiviert Get-DbaDbSpace
Best Practice Zusammenfassung:
① Recovery-Modell FULL für alle Produktionsdatenbanken  |  ② LOG-Backups mindestens alle 15 Minuten  |  ③ CHECKSUM bei jedem Backup  |  ④ Regelmäßige Restore-Tests auf Testsystem  |  ⑤ AG-Backups auf Sekundär (PREFER SECONDARY)  |  ⑥ sys.fn_hadr_backup_is_preferred_replica in jedem Backup-Job
← Vorheriger Beitrag SQL Server AlwaysOn & WFC-Quorum Nächster Beitrag → Batch-Löschung großer Datenmengen in MS SQL Server

 

 

Cookies user preferences
We use cookies to ensure you to get the best experience on our website. If you decline the use of cookies, this website may not function as expected.
Accept all
Decline all
Analytics
Tools used to analyze the data to measure the effectiveness of a website and to understand how it works.
Google Analytics
Advertisement
If you accept, the ads on the page will be adapted to your preferences.
Google Ad
Save