DBAtlas · Atlas de operações de banco de dados

Restaurar para um ponto no tempo (point-in-time restore, STOPAT)

SQL ServerRestore e recuperação

Comando

-- 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 = '...';

O que faz

Aplica FULL + (opcional) DIFF + backups de log WITH NORECOVERY e interrompe a reaplicação do log no horário informado; devolve o banco ao estado logo antes da operação ruim (DELETE/UPDATE errado, DROP).

Quando usar

Para recuperar dados excluídos/alterados por engano, inspecionar os dados em um momento específico ou para uma auditoria.

Atenção

Restaure com outro nome em vez de sobre o original e depois copie de volta as linhas necessárias; se precisar restaurar sobre ele, faça antes um backup tail-log. STOPAT está no horário local do servidor. O recovery model precisa ser FULL; se o backup de log que contém o horário do STOPAT incluir operações minimamente logadas sob BULK_LOGGED, não é possível parar dentro desse backup. Após RESTORE ... WITH RECOVERY nenhum log adicional pode ser aplicado.

Abrir no DBAtlas →

Relacionados