O Cenário
Cliente diz que os dados da aplicação estão “errados”, você não fez nada e desconfia que alguém restaurou um backup do banco.
O Problema
Como descobrir quando e quem restaurou algum backup do SQL Server?
A Solução
Uma “googlada” me jogou NESTE site. Dá pra rodar um SQL que retorna a informação que você quer
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
DECLARE @dbname sysname, @days int SET @dbname = NULL -- substitua pelo nome de uma banco específico SET @days = -30 -- numero de dias passados para pesquisa, padrao e 30 SELECT rsh.destination_database_name AS [Database], rsh.user_name AS [Restored By], CASE WHEN rsh.restore_type = 'D' THEN 'Database' WHEN rsh.restore_type = 'F' THEN 'File' WHEN rsh.restore_type = 'G' THEN 'Filegroup' WHEN rsh.restore_type = 'I' THEN 'Differential' WHEN rsh.restore_type = 'L' THEN 'Log' WHEN rsh.restore_type = 'V' THEN 'Verifyonly' WHEN rsh.restore_type = 'R' THEN 'Revert' ELSE rsh.restore_type END AS [Restore Type], rsh.restore_date AS [Restore Started], bmf.physical_device_name AS [Restored From], rf.destination_phys_name AS [Restored To] FROM msdb.dbo.restorehistory rsh INNER JOIN msdb.dbo.backupset bs ON rsh.backup_set_id = bs.backup_set_id INNER JOIN msdb.dbo.restorefile rf ON rsh.restore_history_id = rf.restore_history_id INNER JOIN msdb.dbo.backupmediafamily bmf ON bmf.media_set_id = bs.media_set_id WHERE rsh.restore_date >= DATEADD(dd, ISNULL(@days, -30), GETDATE()) --want to search for previous days AND destination_database_name = ISNULL(@dbname, destination_database_name) --if no dbname, then return all ORDER BY rsh.restore_history_id DESC GO |
Na linha 2 você pode definir para qual banco quer fazer a pesquisa, se você deixar NULL o select será executado para todos os bancos.
Na linha 3 você pode especificar um numero negativo que diz “quantos dias para traz” você quer pesquisar, se vc deixar NULL o padrão será de 30 dias.
Olha que bonito.