【问题标题】:SQL Server Backup ReportSQL Server 备份报告
【发布时间】:2014-03-04 18:07:04
【问题描述】:

我正在尝试创建一份报告,详细说明我们 SQL Server 上的最新备份。截至目前,我已经写了这个:

select 
    [Server_Name] = a.server_name, 
    [Database_Name] = a.database_name, 
    [Last_Backup] = max(a.backup_finish_date),  
    [Backup_Type] = CASE A.type
                              WHEN 'D' THEN 'FULL'
                              WHEN 'I' THEN 'Differential'
                              WHEN 'L' THEN 'Log'
                              WHEN 'F' THEN 'FileGroup'
                              WHEN 'G' THEN 'FileGroup Differential'
                              WHEN 'P' THEN 'Partial'
                              WHEN 'Q' THEN 'Partial Differential'
                  END,
    [Backup_Set] = b.name,
    [Days_Since_Last_Backup] = DATEDIFF(d,(max(a.backup_finish_Date)),GETDATE())
from msdb.dbo.backupset AS a
INNER JOIN msdb.dbo.backupset as b ON a.backup_set_id = b.backup_set_id
GROUP BY a.database_name, a.server_name, b.name, a.type
ORDER BY database_name

我想更改它,以便列显示以下内容:

Server_Name, Database_Name, Last_Full_Backup, Last_Diff_Backup, Last_Log_Backup, 
Backup_Set, Days_Since_Last_Full

为了显示Last_Full_BackupLast_Diff_BackupLast_Log_Backup 的日期,我想我必须做一些旋转,但我不太确定如何(我对旋转非常不熟悉)。

任何帮助将不胜感激。在此先感谢大家。

【问题讨论】:

    标签: sql sql-server database administration backups


    【解决方案1】:

    你可以做一个“手动旋转”,比如;

    SELECT 
        [Server_Name] = a.server_name, 
        [Database_Name] = a.database_name, 
        [Last_Backup]      = MAX(a.backup_finish_date),  
        [Last_Full_Backup] = MAX(CASE WHEN A.type='D' 
                                        THEN a.backup_finish_date ELSE NULL END),
        [Last_Diff_Backup] = MAX(CASE WHEN A.type='I' 
                                        THEN a.backup_finish_date ELSE NULL END),
        [Last_Log_Backup]  = MAX(CASE WHEN A.type='L' 
                                        THEN a.backup_finish_date ELSE NULL END),
        [Backup_Set] = b.name,
        [Days_Since_Last_Backup] = DATEDIFF(d,(max(a.backup_finish_Date)),GETDATE())
    FROM msdb.dbo.backupset AS a
    INNER JOIN msdb.dbo.backupset as b ON a.backup_set_id = b.backup_set_id
    GROUP BY a.database_name, a.server_name
    ORDER BY database_name
    

    【讨论】:

    • 到目前为止看起来很棒!我可以添加到“CASE”语句来处理 NULLS。您如何建议我使 [Days_Since_Last_Backup] 仅显示自上次 FULL 以来的天数?我会将列更改为 [Days_Since_Last_Full]...
    • 我还想尝试每行保留一个数据库。此查询每行返回 2 个 DB。
    • @user3380003 GROUP BY 包含不应该存在的类型,将其删除。不确定是否应该包含备份集名称,因为我不确定它的用途。
    • ...和DATEDIFF(d,(MAX(CASE WHEN A.type='D' THEN a.backup_finish_date ELSE NULL END)),GETDATE())应该给你自上次完整备份后的天数。
    • 谢谢 Joachim,删除 group by for type 得到了我想要查看的报告。我想要 Backup_Set 的原因是我们想知道我们的数据库正在执行哪种类型的备份(即 Commvault、Netapp 或 sql native)。
    猜你喜欢
    • 2010-10-27
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 2020-12-13
    • 1970-01-01
    • 2014-11-25
    • 1970-01-01
    • 2011-10-03
    相关资源
    最近更新 更多