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


Dariusz Brejnak

Od prawie trzydziestu lat jest pasjonatem informatyki, a zwłaszcza dziedzin dotyczących baz danych, hurtowni danych oraz ogólnie rozumianej tematyki BI. Jego druga pasja to fotografia http://dariuszbrejnak.pl