Estou usando a consulta T-SQL abaixo para determinar a data do último backup completo do banco de dados e também retornar o tamanho e o local do arquivo de backup. Meu problema é que ele não retornará nenhum dado para bancos de dados que não tiveram backups ou para os quais não há histórico de backup. Idealmente, eu gostaria de modificar a consulta para que todos os bancos de dados fossem retornados, independentemente de haver ou não histórico de backup para eles. Alguém pode aconselhar como a consulta abaixo pode ser modificada para acomodar isso?
WITH LastBackUp AS
(
SELECT bs.database_name,
bs.backup_size,
bs.backup_start_date,
bmf.physical_device_name,
Position = ROW_NUMBER() OVER( PARTITION BY bs.database_name ORDER BY bs.backup_start_date DESC )
FROM msdb.dbo.backupmediafamily bmf
JOIN msdb.dbo.backupmediaset bms ON bmf.media_set_id = bms.media_set_id
JOIN msdb.dbo.backupset bs ON bms.media_set_id = bs.media_set_id
WHERE bs.[type] = 'D'
AND bs.is_copy_only = 0
)
SELECT
database_name AS [Database],
CAST(backup_size / 1048576 AS DECIMAL(10, 2) ) AS [BackupSizeMB],
backup_start_date AS [Last Full DB Backup Date],
physical_device_name AS [Backup File Location]
FROM LastBackUp
WHERE Position = 1
ORDER BY [Database];
Você precisa consultar a lista de bancos de dados primeiro (está em
sys.databases
) e depois juntá-la à sua consulta:Apenas para adicionar à bela resposta de Spaghettidba :
e se você fizer backup em mais de um arquivo? este script irá mostrar-lhe tudo.