DBAtlas · Atlas für Datenbankbetrieb

Auf einen Zeitpunkt wiederherstellen (Point-in-Time-Restore, STOPAT)

SQL ServerRestore & Recovery

Befehl

-- Restore under a side name, keep the original intact:
RESTORE DATABASE [Musteri_PITR]
FROM DISK = N'D:\Backup\Musteri_full_20261008.bak'
WITH MOVE N'Musteri'     TO N'D:\Data\Musteri_PITR.mdf',
     MOVE N'Musteri_log' TO N'D:\Log\Musteri_PITR_log.ldf',
     NORECOVERY, STATS = 10;

RESTORE DATABASE [Musteri_PITR]
FROM DISK = N'D:\Backup\Musteri_diff_20261008.bak' WITH NORECOVERY;

-- All log backups in order, each with the same STOPAT:
RESTORE LOG [Musteri_PITR] FROM DISK = N'D:\Backup\Musteri_log_1200.trn'
WITH NORECOVERY, STOPAT = '2026-10-08T14:29:00';
RESTORE LOG [Musteri_PITR] FROM DISK = N'D:\Backup\Musteri_log_1500.trn'
WITH NORECOVERY, STOPAT = '2026-10-08T14:29:00';

RESTORE DATABASE [Musteri_PITR] WITH RECOVERY;

-- Alternative: step forward with STANDBY and read data at each point:
-- RESTORE LOG [Musteri_PITR] FROM DISK = N'...' WITH STANDBY = N'D:\Backup\Musteri_PITR_undo.dat', STOPAT = '...';

Was es tut

Wendet FULL + (optional) DIFF + Log-Backups WITH NORECOVERY an und stoppt das Einspielen des Logs zum angegebenen Zeitpunkt; versetzt die Datenbank auf den Stand unmittelbar vor der fehlerhaften Operation (falsches DELETE/UPDATE, DROP).

Wann einsetzen

Um versehentlich gelöschte/geänderte Daten zurückzuholen, die Daten zu einem bestimmten Zeitpunkt zu untersuchen oder für ein Audit.

Vorsicht

Unter einem anderen Namen wiederherstellen statt über das Original, dann die benötigten Zeilen zurückkopieren; musst du darüber wiederherstellen, erstelle zuerst ein Tail-Log-Backup. STOPAT ist in lokaler Serverzeit. Das Recovery Model muss FULL sein; enthält das Log-Backup mit dem STOPAT-Zeitpunkt minimal protokollierte Operationen unter BULK_LOGGED, kannst du nicht innerhalb dieses Backups stoppen. Nach RESTORE ... WITH RECOVERY lassen sich keine weiteren Logs mehr anwenden.

In DBAtlas öffnen →

Verwandte Einträge