Como gravar um script ou uma consulta que exibirá o último backup completo e o último backup de log para cada banco de dados em cada servidor de produção usando a tabela de sistema "backupset" e as tabelas de backup relacionadas.
fonte
Como gravar um script ou uma consulta que exibirá o último backup completo e o último backup de log para cada banco de dados em cada servidor de produção usando a tabela de sistema "backupset" e as tabelas de backup relacionadas.
Algo assim deve fornecer a saída que você está procurando. A consulta abaixo obtém o backup mais recente do tipo backup completo, diferencial ou de log para cada banco de dados.
;with backup_cte as
(
select
database_name,
backup_type =
case type
when 'D' then 'database'
when 'L' then 'log'
when 'I' then 'differential'
else 'other'
end,
backup_finish_date,
rownum =
row_number() over
(
partition by database_name, type
order by backup_finish_date desc
)
from msdb.dbo.backupset
)
select
database_name,
backup_type,
backup_finish_date
from backup_cte
where rownum = 1
order by database_name;
Escrevi um post sobre o uso do backupset aqui, se você estiver interessado em mais detalhes sobre a tabela. Simplesmente aqui está uma consulta para obter o que você deseja.
use msdb
go
-- D = Full, I = Differential and L = Log.
-- There are other types of backups too but those are the primary ones.
SELECT backupset.database_name,
MAX(CASE WHEN backupset.type = 'D' THEN backupset.backup_finish_date ELSE NULL END) AS LastFullBackup,
MAX(CASE WHEN backupset.type = 'I' THEN backupset.backup_finish_date ELSE NULL END) AS LastDifferential,
MAX(CASE WHEN backupset.type = 'L' THEN backupset.backup_finish_date ELSE NULL END) AS LastLog
FROM backupset
GROUP BY backupset.database_name
ORDER BY backupset.database_name DESC
Nota: Foi mencionado que eu havia entrado no backmediaset e não era necessário. Isso é verdade e só posso assumir que esqueci de removê-lo da consulta original no link. Eu o removi daqui.
Você provavelmente deseja consultar o msdb
banco de dados, para esses detalhes.
Por exemplo:
DECLARE @DBName SYSNAME;
SET @DBName = DB_NAME(); -- modify these as you desire.
SET @DBName = NULL; -- comment this line if you want to limit the displayed history
SELECT DatabaseName = bs.database_name
, BackupStartDate = bs.backup_start_date
, CompressedBackupSize = bs.compressed_backup_size
, ExpirationDate = bs.expiration_date
, BackupSetName = bs.name
, RecoveryModel = bs.recovery_model
, ServerName = bs.server_name
, BackupType = CASE bs.type
WHEN 'D' THEN 'Database'
WHEN 'L' THEN 'Log'
ELSE '[unknown]' END
, LogicalDeviceName = bmf.logical_device_name
, PhysicalDeviceName = bmf.physical_device_name
FROM msdb.dbo.backupset bs
INNER JOIN msdb.dbo.backupmediafamily bmf
ON [bs].[media_set_id] = [bmf].[media_set_id]
WHERE (bs.database_name = @DBName
OR @DBName IS NULL)
AND bs.type = 'D'
ORDER BY bs.backup_start_date DESC;
para mostrar os últimos backups completos, diferentes, de log para cada banco de dados, considerando mostrar nulo se nenhum backup for realizado . usando o pivô (modificado da fonte )
Observe que, sem ingressar no master.sys.databases e confiar apenas no msdb.dbo.backupset, você não encontrará os dbs que não possuem backups
SELECT name ,
recovery_model_desc ,
state_desc ,
d AS 'Last Full Backup' ,
i AS 'Last Differential Backup' ,
l AS 'Last log Backup'
FROM ( SELECT db.name ,
db.state_desc ,
db.recovery_model_desc ,
type ,
backup_finish_date
FROM master.sys.databases db
LEFT OUTER JOIN msdb.dbo.backupset a ON a.database_name = db.name
) AS Sourcetable
PIVOT
( MAX(backup_finish_date) FOR type IN ( D, I, L ) ) AS MostRecentBackup
AsCom base na solicitação @SQLBoy, podemos escrever a consulta abaixo para incluir BackupSize e BackupSet.Name nessa consulta. Omiti os dados dinâmicos e simplifico
WITH backupsetSummary
AS ( SELECT bs.database_name ,
bs.type bstype ,
MAX(backup_finish_date) MAXbackup_finish_date
FROM msdb.dbo.backupset bs
GROUP BY bs.database_name ,
bs.type
),
MainBigSet
AS ( SELECT db.name ,
db.state_desc ,
db.recovery_model_desc ,
bs.type ,
bs.name AS BackupSetName ,
bs.backup_size ,
bs.backup_finish_date
FROM master.sys.databases db
LEFT OUTER JOIN backupsetSummary bss ON bss.database_name = db.name
LEFT OUTER JOIN msdb.dbo.backupset bs ON bs.database_name = db.name
AND bss.bstype = bs.type
AND bss.MAXbackup_finish_date = bs.backup_finish_date
)
SELECT *
FROM MainBigSet
você pode usar o seguinte script:
1) se você deseja obter o backup mais recente, use apenas o seguinte comando:
referência: http://blog.sqlauthority.com/2010/11/04/sql-server-finding-last-backup-time-for-all-database/
2) se você deseja obter o histórico de backup de todos os bancos de dados nos últimos sete dias:
referência: http://www.mssqltips.com/sqlservertip/1601/script-to-retrieve-sql-server-database-backup-history-and-no-backups/
fonte
Data do último backup para todos os bancos de dados. Simples.
fonte
Eu acho que abaixo é a consulta para a qual todos nós estamos procurando:
fonte