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

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