前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >sqlserver查看备份历史记录

sqlserver查看备份历史记录

作者头像
保持热爱奔赴山海
修改2024-08-01 15:33:07
1440
修改2024-08-01 15:33:07
举报
文章被收录于专栏:数据库相关

常用下面几个sql,可以基于下面的这些SQL做一些巡检和告警。

注意:查询结果中的时间是UTC时间!

获取有关每个数据库的成功备份的信息

代码语言:txt
复制
select * from [msdb].[dbo].[backupset];

获取数据库备份的数据和日志备份明细

代码语言:txt
复制
SELECT [filegroup_name]
      ,[backed_up_page_count]
      ,[file_type]
      ,[file_size]
      ,[logical_name]
      ,[physical_name]
  ,State
      ,[state_desc]
      ,[backup_size]
  ,[differential_base_lsn]
 FROM [msdb].[dbo].[backupfile];

文件类型含义:

D:SQL Server 数据文件

L:SQL Server 日志文件

F:全文目录

S:内存优化文件

status字段含义:

0 = 在线

1 = 正在恢复

2 = 恢复中

3 = 等待恢复

4 = 嫌疑人

6 = 离线

7 = 失效

8 = 已删除

获取相关的备份信息

代码语言:txt
复制
SELECT 
CONVERT(CHAR(100), SERVERPROPERTY('Servername')) AS Server, 
msdb.dbo.backupset.database_name, 
msdb.dbo.backupset.backup_start_date, 
msdb.dbo.backupset.backup_finish_date, 
CASE msdb..backupset.type 
WHEN 'D' THEN 'Database' 
WHEN 'L' THEN 'Log' 
When 'I' THEN 'Differential database'
END AS backup_type, 
msdb.dbo.backupset.backup_size, 
msdb.dbo.backupmediafamily.physical_device_name, 
msdb.dbo.backupset.name AS backupset_name
FROM msdb.dbo.backupmediafamily 
INNER JOIN msdb.dbo.backupset ON msdb.dbo.backupmediafamily.media_set_id = msdb.dbo.backupset.media_set_id 
WHERE (CONVERT(datetime, msdb.dbo.backupset.backup_start_date, 102) >= GETDATE()-1 ) 
ORDER BY 
msdb.dbo.backupset.backup_finish_date desc

获取所有数据库的最新完整备份的列表

代码语言:txt
复制
SELECT  
   CONVERT(CHAR(100), SERVERPROPERTY('Servername')) AS Server, 
   msdb.dbo.backupset.database_name,  
   MAX(msdb.dbo.backupset.backup_finish_date) AS last_db_backup_date 
FROM   msdb.dbo.backupmediafamily  
   INNER JOIN msdb.dbo.backupset ON msdb.dbo.backupmediafamily.media_set_id = msdb.dbo.backupset.media_set_id  
WHERE  msdb..backupset.type = 'D' 
GROUP BY 
   msdb.dbo.backupset.database_name

列出没有做备份的库

代码语言:txt
复制
SELECT      
      S.NAME AS database_name,  
      'Nobackups' AS [Backup Age (Hours)]  
FROM 
   master.dbo.sysdatabases S LEFT JOIN msdb.dbo.backupset B
       ON S.name  = B.database_name 
WHERE B.database_name IS NULL AND S.name <> 'tempdb'
ORDER BY  
   B.database_name

查看某个指定的库的近半年的备份情况

代码语言:txt
复制
	参考 https://www.sqlshack.com/backup-and-restore-or-recovery-strategies-for-sql-server-database/
    
    SELECT
    [database_name] AS DatabaseName,
    MAX(YEAR(backup_start_date) * 100 
            + MONTH(backup_start_date)) AS YearMonth ,
    CONVERT(numeric(10, 1), AVG([backup_size]/1024/1024)) AS BackupSizeMB,
    CONVERT(numeric(10, 1), AVG([compressed_backup_size]/1024/1024)) AS Compressed_BackupSizeMB,
    CONVERT(numeric(10, 1), AVG([backup_size]/[compressed_backup_size])) AS Compres_sionRatio
    FROM msdb.dbo.backupset 
    WHERE 1=1
    and [database_name] = N'Sbtest'
    AND [type] = 'D' 
    and backup_start_date BETWEEN DATEADD(mm, - 6, getdate() ) AND getdate()
    GROUP BY [database_name],DATEPART(mm,[backup_start_date])
    Order by YearMonth desc;

查看近半年内每个库的备份的增长趋势

代码语言:txt
复制
    WITH HISTORY AS 
    (SELECT DBS.database_name AS DBName 
            ,YEAR(DBS.backup_start_date) * 100 
            + MONTH(DBS.backup_start_date) AS YearMonth 
            ,CONVERT(numeric(10, 1), MIN(DBF.file_size / 1048576.0)) AS MinMB 
            ,CONVERT(numeric(10, 1), MAX(DBF.file_size / 1048576.0)) AS MaxMB 
            ,CONVERT(numeric(10, 1), AVG(DBF.file_size / 1048576.0)) AS AvgMB 
        FROM msdb.dbo.backupset as DBS 
            INNER JOIN 
            msdb.dbo.backupfile AS DBF 
                ON DBS.backup_set_id = DBF.backup_set_id 
        WHERE NOT DBS.database_name IN 
                ('master', 'msdb', 'model', 'tempdb') 
            AND DBF.file_type = 'D' 
            AND DBS.backup_start_date BETWEEN DATEADD(mm, - 6, getdate() ) AND  getdate()
        GROUP BY DBS.database_name 
                ,YEAR(DBS.backup_start_date) 
                ,MONTH(DBS.backup_start_date)) 
    SELECT H.DBName 
        ,H.YearMonth 
        ,H.MinMB 
        ,H.MaxMB 
        ,H.AvgMB 
        ,H.AvgMB  
        - (SELECT TOP 1 H1.AvgMB 
            FROM HISTORY AS H1 
            WHERE H1.DBName = H.DBName 
                    AND H1.YearMonth < H.YearMonth 
            ORDER BY H1.YearMonth DESC) AS DBGrowthMB 
    FROM HISTORY AS H 
    ORDER BY H.DBName 
            ,H.YearMonth;

本文系外文翻译,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系外文翻译前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 获取有关每个数据库的成功备份的信息
  • 获取数据库备份的数据和日志备份明细
  • 获取相关的备份信息
  • 获取所有数据库的最新完整备份的列表
  • 列出没有做备份的库
  • 查看某个指定的库的近半年的备份情况
  • 查看近半年内每个库的备份的增长趋势
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档