Często zachodzi potrzeba kontroli ostatnio wykonanych backupów baz danych, a w szczególności kontrola backupów starszych niż x dni w podziale na backupy full, diff i logów.
Poniżej przedstawiam skrypt wyciągający te informacje. Parametry maksymalnych czasów podajemy w godzinach. Oczywiście na liście będą wyłącznie bazy, które miały wykonany chociaż jeden backup.
Declare
@maxOldBackupFull int = 7*24
,@maxOldBackupDiff int = 24
,@maxOldBackupLog int = 1
SELECT
Server
,database_name
,type
,last_db_backup_date
,maxOldBackup
,BackupAge_Hours
,rank() over (Partition by server, database_name order by last_db_backup_date) rank
FROM (
SELECT
CONVERT(CHAR(100), SERVERPROPERTY('Servername')) AS Server,
msdb.dbo.backupset.database_name,
msdb.dbo.backupset.type,
MAX(msdb.dbo.backupset.backup_finish_date) AS last_db_backup_date,
Case msdb.dbo.backupset.type
when 'D' Then @maxOldBackupFull
when 'I' Then @maxOldBackupDiff
when 'L' Then @maxOldBackupLog
End maxOldBackup,
DATEDIFF(hh, MAX(msdb.dbo.backupset.backup_finish_date), GETDATE()) AS BackupAge_Hours
FROM msdb.dbo.backupset
WHERE msdb.dbo.backupset.type in( 'D','I','L')
and msdb.dbo.backupset.name is NOT NULL
GROUP BY msdb.dbo.backupset.database_name
, msdb.dbo.backupset.type
--HAVING (MAX(msdb.dbo.backupset.backup_finish_date) < DATEADD(hh, - 24, GETDATE()))
) BackupHistory
Where BackupAge_Hours>maxOldBackup
-- order by server,database_name,last_db_backup_date