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.

01Declare
02 @maxOldBackupFull int  = 7*24
03,@maxOldBackupDiff int  = 24
04,@maxOldBackupLog int  = 1
05 
06SELECT
07     Server
08    ,database_name
09    ,type
10    ,last_db_backup_date
11    ,maxOldBackup
12    ,BackupAge_Hours
13    ,rank() over (Partition by server, database_name order by last_db_backup_date) rank
14FROM (
15        SELECT
16            CONVERT(CHAR(100), SERVERPROPERTY('Servername')) AS Server,
17            msdb.dbo.backupset.database_name,
18            msdb.dbo.backupset.type,
19            MAX(msdb.dbo.backupset.backup_finish_date) AS last_db_backup_date,
20            Case msdb.dbo.backupset.type
21                when 'D' Then @maxOldBackupFull
22                when 'I' Then @maxOldBackupDiff
23                when 'L' Then @maxOldBackupLog
24            End maxOldBackup,
25            DATEDIFF(hh, MAX(msdb.dbo.backupset.backup_finish_date), GETDATE()) AS BackupAge_Hours
26        FROM  msdb.dbo.backupset
27        WHERE msdb.dbo.backupset.type in( 'D','I','L'
28                and msdb.dbo.backupset.name is NOT NULL
29        GROUP BY msdb.dbo.backupset.database_name
30                , msdb.dbo.backupset.type
31        --HAVING  (MAX(msdb.dbo.backupset.backup_finish_date) < DATEADD(hh, - 24, GETDATE()))
32) BackupHistory  
33    Where BackupAge_Hours>maxOldBackup
34--  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