我有一个 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'时,然后以这种方式找到它,当作业名称不存在时,然后对最后一个数据库使用最大备份?但这似乎涉及我不想要的摆弄。
我不确定。想知道是否有人有这样做的好方法。
据我了解,当其中任何一个未达到您的阈值时,您希望该作业报告实例上的最新完整备份。
在这种情况下,您可以选择获取所有数据库的最新完整备份,然后获取该结果集的最小值。
如果您还需要最早成功完整备份的数据库的数据库名称
我不会使用作业执行统计信息,因为它们可能会返回误报。
除了检查备份作业是否正确完成工作之外,您还应该通过在某处恢复备份来验证您的备份。