在伺服器級別顯示備份
我有一個 SSRS 報告,其中顯示列表中每個伺服器旁邊的“上次備份時間”。我通過以下方式獲取此資訊:
SELECT TOP 1 @@SERVERNAME as serverName, sdb.Name AS DatabaseName, MAX(backup_finish_date) AS LastBackUpTime FROM sys.sysdatabases sdb LEFT OUTER JOIN msdb.dbo.backupset bus ON bus.database_name = sdb.name WHERE bus.type = 'D'AND bus.database_name NOT IN ('master', 'model', 'msdb', 'tempdb') GROUP BY sdb.Name ORDER BY LastBackUpTime DESC
這裡的問題是,例如,如果 8 個數據庫備份中有 7 個在作業中失敗,則該作業被標記為“失敗”,但報告將顯示上次備份時間是在那批失敗的備份中,它是,因為它正在選擇成功的 8 個備份。
在此之前,我從我插入 sysjobs 和 sysjobservers 資訊的表中查找特定作業的最後執行時間,因為我們的大多數備份作業都是同名的 hallengren 作業。(見下文)
SELECT serverName , MAX(CLastRunDateTime) AS CLastRunDateTime FROM jobs WHERE name = 'DatabaseBackup - USER_DATABASES - FULL'
這樣做的問題是有些伺服器有一個非哈倫格倫命名的作業,所以它涉及“擺弄”來插入正確的作業名稱。還有一些伺服器沒有代理,手動備份,所以不能使用作業名稱來獲取上次備份時間。
如何在伺服器級別獲得盡可能少的“擺弄”的備份時間。我理解這些問題,因為一些哈倫格倫工作不包括某些數據庫,所以它不能基於“何時在此伺服器上進行所有備份” - 它必須一方面是特定於工作的,另一方面不是特定於工作的。也許是這樣的,當作業名稱是’X’,‘Y’,‘Z’時,然後以這種方式找到它,當作業名稱不存在時,然後對最後一個數據庫使用最大備份?但這似乎涉及我不想要的擺弄。
我不知道。想知道是否有人有這樣做的好方法。
這裡的問題是,例如,如果 8 個數據庫備份中有 7 個在作業中失敗,則該作業被標記為“失敗”,但報告將顯示上次備份時間是在那批失敗的備份中,它是,因為它正在選擇成功的 8 個備份。
據我了解,當其中任何一個未達到您的門檻值時,您希望該作業報告實例上的最新完整備份。
在這種情況下,您可以選擇獲取所有數據庫的最新完整備份,然後獲取該結果集的最小值。
;WITH CTE AS ( SELECT sdb.Name AS DatabaseName, MAX(backup_finish_date) AS LastBackUpTime FROM sys.databases sdb LEFT OUTER JOIN msdb.dbo.backupset bus ON bus.database_name = sdb.name WHERE bus.type = 'D'AND bus.database_name NOT IN ('master', 'model', 'msdb', 'tempdb') AND sdb.state_desc = 'ONLINE' GROUP BY sdb.Name ) SELECT @@SERVERNAME as serverName, MIN(LastBackUpTime) as LastBackUpTime FROM CTE;
如果您還需要最早成功完整備份的數據庫的數據庫名稱
;WITH CTE AS ( SELECT sdb.Name AS DatabaseName, MAX(backup_finish_date) AS LastBackUpTime FROM sys.databases sdb LEFT OUTER JOIN msdb.dbo.backupset bus ON bus.database_name = sdb.name WHERE bus.type = 'D'AND bus.database_name NOT IN ('master', 'model', 'msdb', 'tempdb') AND sdb.state_desc = 'ONLINE' GROUP BY sdb.Name ) SELECT TOP(1) @@SERVERNAME as serverName, LastBackUpTime as LastBackUpTime, DatabaseName FROM CTE ORDER BY LastBackUpTime ASC;
我不會使用作業執行統計資訊,因為它們可能會返回誤報。
除了檢查備份作業是否正確完成工作之外,您還應該通過在某處恢復備份來驗證您的備份。