使用Powershell获取SQL备份数据

时间:2011-10-27 01:39:21

标签: sql-server powershell database-backups

我一直在寻找自动获取有关SQL备份信息的方法,this Technet article中的Powershell脚本可以很好地完成,除了它返回的数据有问题。

运行时,它会返回我知道尚未通过SQL备份的测试数据库的“上次备份”日期。它似乎正在花费系统备份的时间;它与OS事件日志中的beVSS启动时间一致(服务器由Backup Exec 2010备份,而不是使用SQL代理)。

我希望它能够在上次运行SQL备份时收集,而不是系统备份。这有可能以某种方式过滤掉吗?

数据库服务器是Windows Server 2008 / SQL server 2008。

修改

为了澄清,我正在寻找PowerShell中的解决方案,而不是SQL,并了解为什么PowerShell会返回它的功能。

2 个答案:

答案 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在不同的用户帐户下运行。

http://msdn.microsoft.com/en-us/library/ms186299.aspx