我一直在寻找自动获取有关SQL备份信息的方法,this Technet article中的Powershell脚本可以很好地完成,除了它返回的数据有问题。
运行时,它会返回我知道尚未通过SQL备份的测试数据库的“上次备份”日期。它似乎正在花费系统备份的时间;它与OS事件日志中的beVSS启动时间一致(服务器由Backup Exec 2010备份,而不是使用SQL代理)。
我希望它能够在上次运行SQL备份时收集,而不是系统备份。这有可能以某种方式过滤掉吗?
数据库服务器是Windows Server 2008 / SQL server 2008。
修改:
为了澄清,我正在寻找PowerShell中的解决方案,而不是SQL,并了解为什么PowerShell会返回它的功能。
答案 0 :(得分:4)
在查找最新备份的时间和文件名时,我经常使用这样的查询。此特定查询将返回最近的FULL备份或差异备份,但显然您可以根据需要更改它。
SELECT
bf.physical_device_name ,
name ,
bs.backup_start_date ,
bs.media_set_id
FROM sys.databases d
OUTER APPLY (
SELECT TOP 1
backup_start_date ,
media_set_id
FROM msdb.dbo.backupset
WHERE type != 'L'
AND database_name = d.name
ORDER BY backup_start_date DESC
) bs
INNER JOIN msdb.dbo.backupmediafamily bf ON bf.media_set_id = bs.media_set_id
答案 1 :(得分:1)
我倾向于对msdb中的backupset表使用查询,而不是您引用的文章中提到的SMO LastBackupDate Database属性。
在我的环境中,我们使用CommVault Galaxy进行备份,我可以通过查看备份集表的user_name列来过滤CommvVault与常规SQL备份的备份。 SQL Agent和CommVault在不同的用户帐户下运行。