MSSQL Backup und Restore gehören zusammen: Eine Sicherungsdatei hilft nur, wenn du daraus die benötigten Daten innerhalb der verfügbaren Zeit wiederherstellen kannst. Dieser Leitfaden erklärt Voll-, differenzielle und Transaktionsprotokoll-Backups, zeigt die wichtigsten T-SQL-Befehle und führt durch einen Restore-Test unter einem neuen Datenbanknamen. Die Beispiele sind für Microsoft SQL Server gedacht und müssen vor dem Einsatz an deine Instanz angepasst werden.

Was soll deine Backup-Strategie leisten?

Lege zuerst zwei Ziele fest: Wie viele Daten dürfen im Fehlerfall höchstens verloren gehen (RPO) und wie lange darf die Datenbank ausfallen (RTO)? Daraus ergeben sich Sicherungsabstände, Aufbewahrung und die benötigte Zeit für einen Restore. Eine tägliche Vollsicherung reicht beispielsweise nicht aus, wenn höchstens 15 Minuten Arbeit verloren gehen dürfen.

Dokumentiere für jede Datenbank den Recovery Mode, die Sicherungsarten, den Zeitplan, die Speicherorte und einen Ansprechpartner für die Wiederherstellung. Bewahre Kopien auf getrenntem Speicher auf und teste regelmäßig, ob du sie tatsächlich zurückspielen kannst. Ein Backup auf demselben Laufwerk wie die Datenbank schützt nicht vor dem Ausfall dieses Laufwerks.

MSSQL Backup und Restore: die drei Sicherungsarten

Sicherung Inhalt Wofür sie gebraucht wird
Voll-Backup Die gesamte Datenbank samt für eine konsistente Wiederherstellung benötigter Log-Information Ausgangspunkt einer Wiederherstellung; Basis für spätere differenzielle Backups.
Differenzielles Backup Änderungen seit dem zugrunde liegenden regulären Voll-Backup Verkürzt den Restore-Weg: Voll-Backup plus das passende letzte differenzielle Backup.
Transaktionsprotokoll-Backup Noch nicht mit einem früheren Log-Backup gesicherte Log-Einträge Ermöglicht bei lückenloser Kette die Wiederherstellung bis zu einem Zeitpunkt.

Ein Log-Backup enthält also nicht einfach „alles seit dem letzten Backup beliebigen Typs“. Der Abstand zwischen Log-Backups bestimmt mit, wie viele Änderungen bei einem Schaden maximal verloren gehen können. Ein manuelles COPY_ONLY-Voll-Backup verändert die Basis der regulären differenziellen Backups nicht.

Recovery Model prüfen: SIMPLE oder FULL?

Der Wiederherstellungsmodus bestimmt, ob Log-Backups möglich sind. Prüfe ihn zunächst:

SELECT name, recovery_model_desc
FROM sys.databases
WHERE name = N'MeineDatenbank';

Im Modus SIMPLE kannst du Voll- und differenzielle Backups verwenden, aber keine Transaktionsprotokoll-Backups für eine punktgenaue Wiederherstellung. Im Modus FULL brauchst du einen regelmäßigen Plan für Log-Backups. Nur FULL einzustellen und das Log nie zu sichern, kann zu starkem Wachstum der Log-Datei führen. Nach einem Wechsel von SIMPLE zu FULL ist eine neue Datensicherung erforderlich, bevor die Log-Backup-Kette beginnt.

Voll-Backup mit T-SQL erstellen

Ersetze Datenbankname und Pfad durch Werte deiner Umgebung. Der Ordner muss bereits existieren, genügend freien Platz haben und für das SQL-Server-Dienstkonto beschreibbar sein. Bei einer Verbindung über SSMS bezieht sich D:\SQLBackups auf den Server, auf dem SQL Server läuft, nicht auf deinen lokalen Arbeitsplatz.

BACKUP DATABASE [MeineDatenbank]
TO DISK = N'D:\SQLBackups\MeineDatenbank_full_20260925_1200.bak'
WITH CHECKSUM, COMPRESSION, STATS = 10;

Verwende für jeden Sicherungslauf einen neuen Dateinamen, beispielsweise mit Datum und Uhrzeit. CHECKSUM aktiviert zusätzliche Prüfungen während des Backups; COMPRESSION kann Platz sparen, benötigt aber Ressourcen und hängt von der verwendeten SQL-Server-Edition beziehungsweise Konfiguration ab. STATS = 10 meldet Fortschrittsschritte. Verzichte in einem allgemeinen Beispiel auf FORMAT oder INIT: Mit diesen Optionen können bestehende Backup-Sätze überschrieben werden.

Differenzielles Backup und Log-Backup

Ein differenzielles Backup baut auf dem letzten passenden regulären Voll-Backup auf. Erstelle es beispielsweise zwischen zwei Vollsicherungen:

BACKUP DATABASE [MeineDatenbank]
TO DISK = N'D:\SQLBackups\MeineDatenbank_diff_20260925_1800.bak'
WITH DIFFERENTIAL, CHECKSUM, COMPRESSION, STATS = 10;

Im Recovery Model FULL ergänzt du regelmäßige Log-Backups. Die folgende Anweisung ist im Modus SIMPLE nicht möglich:

BACKUP LOG [MeineDatenbank]
TO DISK = N'D:\SQLBackups\MeineDatenbank_log_20260925_1815.trn'
WITH CHECKSUM, COMPRESSION, STATS = 10;

Für eine punktgenaue Wiederherstellung brauchst du die zusammengehörenden Backup-Sätze ohne Lücke. Bewahre deshalb nicht nur die neueste .bak-Datei auf. Die konkrete Abfolge hängt vom gewählten Wiederherstellungspunkt und von den vorhandenen Voll-, differenziellen und Log-Backups ab.

Sicherung mit SSMS erstellen

Für ein manuelles MSSQL Backup und Restore kannst du auch die Dialoge von SQL Server Management Studio verwenden. Prüfe vor jedem Schritt, mit welcher Instanz du verbunden bist.

  1. Verbinde dich in SQL Server Management Studio mit der richtigen Instanz.
  2. Öffne im Objekt-Explorer die Datenbank und wähle über das Kontextmenü Tasks > Back Up beziehungsweise Aufgaben > Sichern.
  3. Wähle unter Backup type den benötigten Typ: Full, Differential oder Transaction Log, sofern zulässig.
  4. Prüfe die Zielpfade und Optionen. Achte darauf, keinen vorhandenen Sicherungssatz unbeabsichtigt zu überschreiben.
  5. Starte das Backup und kontrolliere anschließend die Erfolgsmeldung sowie die tatsächlich entstandene Datei.

Menünamen unterscheiden sich je nach SSMS-Sprache und Version. Für wiederkehrende Sicherungen brauchst du einen überwachten Zeitplan; ein gelegentlicher manueller Klick ist keine verlässliche Backup-Strategie.

Backup prüfen: VERIFYONLY und echter Restore-Test

Beim MSSQL Backup und Restore ist die Prüfung genauso wichtig wie der Sicherungslauf. RESTORE VERIFYONLY liest und prüft einen Sicherungssatz, stellt ihn aber nicht wieder her:

RESTORE VERIFYONLY
FROM DISK = N'D:\SQLBackups\MeineDatenbank_full_20260925_1200.bak'
WITH CHECKSUM;

Eine erfolgreiche Meldung ist nützlich, beweist aber nicht, dass alle Restore-Schritte und die Anwendung danach funktionieren. Führe regelmäßig eine echte Wiederherstellung auf einer Testinstanz oder unter einem neuen Datenbanknamen durch. Prüfe anschließend die Datenbank mit DBCC CHECKDB und teste wichtige Anwendungsfunktionen. Halte die gemessene Wiederherstellungszeit fest.

Voll-Backup unter neuem Namen wiederherstellen

Der folgende Test legt MeineDatenbank_Test an und lässt die Originaldatenbank unangetastet. Stelle zunächst mit RESTORE FILELISTONLY fest, welche logischen Dateinamen das Backup tatsächlich enthält:

RESTORE FILELISTONLY
FROM DISK = N'D:\SQLBackups\MeineDatenbank_full_20260925_1200.bak';

Ersetze im nächsten Beispiel MeineDatenbank und MeineDatenbank_log durch die Namen aus der Spalte LogicalName. Passe außerdem die Zielpfade an. Sie müssen auf dem SQL-Server-Host existieren beziehungsweise für dessen Dienstkonto nutzbar sein. Prüfe vorher, dass MeineDatenbank_Test und die angegebenen Dateien nicht bereits vorhanden sind.

RESTORE DATABASE [MeineDatenbank_Test]
FROM DISK = N'D:\SQLBackups\MeineDatenbank_full_20260925_1200.bak'
WITH
    MOVE N'MeineDatenbank'     TO N'D:\SQLData\MeineDatenbank_Test.mdf',
    MOVE N'MeineDatenbank_log' TO N'D:\SQLData\MeineDatenbank_Test_log.ldf',
    RECOVERY,
    STATS = 10;

DBCC CHECKDB (N'MeineDatenbank_Test') WITH NO_INFOMSGS;

Enthält das Backup weitere Daten- oder Log-Dateien, brauchst du für jede eine passende MOVE-Angabe. Führe den Restore nur mit einer vertrauenswürdigen Sicherungsdatei aus. Nach dem Restore sollten Berechtigungen, Datenbankbenutzer und die wichtigsten Abfragen beziehungsweise Anwendungsvorgänge geprüft werden.

Voll-, differenzielle und Log-Backups in der richtigen Reihenfolge zurückspielen

Für eine Wiederherstellung über mehrere Sicherungen gilt: Zuerst das passende Voll-Backup mit NORECOVERY, danach gegebenenfalls das zugehörige letzte differenzielle Backup mit NORECOVERY, anschließend alle benötigten Log-Backups in Reihenfolge. Erst beim letzten Schritt verwendest du RECOVERY. Bis dahin bleibt die Datenbank im Wiederherstellungszustand und ist nicht normal nutzbar.

-- Schematische Reihenfolge; Dateinamen und Backup-Kette prüfen:
RESTORE DATABASE [MeineDatenbank_Test]
FROM DISK = N'D:\SQLBackups\MeineDatenbank_full.bak'
WITH NORECOVERY,
MOVE N'MeineDatenbank' TO N'D:\SQLData\MeineDatenbank_Test.mdf',
MOVE N'MeineDatenbank_log' TO N'D:\SQLData\MeineDatenbank_Test_log.ldf';

RESTORE DATABASE [MeineDatenbank_Test]
FROM DISK = N'D:\SQLBackups\MeineDatenbank_diff.bak'
WITH NORECOVERY;

RESTORE LOG [MeineDatenbank_Test]
FROM DISK = N'D:\SQLBackups\MeineDatenbank_log_1.trn'
WITH NORECOVERY;

RESTORE LOG [MeineDatenbank_Test]
FROM DISK = N'D:\SQLBackups\MeineDatenbank_log_2.trn'