SQL Server 备份相关信息查看

发布于:2025-03-30 ⋅ 阅读:(82) ⋅ 点赞:(0)

一、统计每个数据库在不同备份目录和备份类型下的备份次数,以及最后一次备份的时间

select
    数据库名 = x.database_name,
    备份目录 = x.path,
    备份类型  = x.type,
    备份次数 = COUNT(x.back_file),
    最后备份时间 = MAX(x.start_time)
from (
    SELECT
        start_time = bs.backup_start_date,
        finish_time = bs.backup_finish_date,
        time_cost_sec = DATEDIFF(SECOND, bs.backup_start_date, bs.backup_finish_date),
        back_file = bmf.physical_device_name,
        path = LEFT(bmf.physical_device_name,LEN(bmf.physical_device_name) - charindex('\',reverse(bmf.physical_device_name),1) + 1),
        ind = charindex('\',reverse(bmf.physical_device_name),1),
        bs.type,
        backup_size_mb = ROUND(((bs.backup_size/1024)/1024),2),
        compressed_size_mb = ROUND(((bs.compressed_backup_size/1024)/1024),2),
        bs.first_lsn,
        bs.last_lsn,
        bs.database_name
    FROM msdb.dbo.backupmediafamily bmf WITH(NOLOCK)
        INNER JOIN msdb.dbo.backupset bs WITH(NOLOCK)
        ON bmf.media_set_id = bs.media_set_id
) x
group by x.path, x.type, x.database_name
order by x.database_name;
整体功能

此 SQL 用于统计每个数据库在不同备份目录和备份类型下的备份次数,以及最后一次备份的时间。

详细解释
  1. 子查询

    • msdb.dbo.backupmediafamilymsdb.dbo.backupset 这两个系统表中查询备份信息。WITH(NOLOCK) 提示表示在查询时不使用锁,可避免阻塞其他事务,但可能会读取到未提交的数据。
    • start_time:备份开始的日期和时间。
    • finish_time:备份结束的日期和时间。
    • time_cost_sec:备份所花费的时间(以秒为单位)。
    • back_file:备份文件的物理设备名称。
    • path:通过字符串处理函数提取备份文件所在的目录。
    • ind:用于提取目录的辅助计算字段。
    • type:备份类型(如 D 表示完整备份,I 表示差异备份,L 表示日志备份)。
    • backup_size_mb:备份文件的大小(以 MB 为单位)。
    • compressed_size_mb:压缩后的备份文件大小(以 MB 为单位)。
    • first_lsnlast_lsn:备份集的起始和结束日志序列号。
    • database_name:备份的数据库名称。
  2. 主查询

    • x.pathx.typex.database_name 进行分组。
    • COUNT(x.back_file):统计每个分组内的备份次数。
    • MAX(x.start_time):找出每个分组内的最后一次备份时间。
    • 最终结果按数据库名称排序。

二、查询所有完整数据库备份的信息,包括备份集 ID、数据库名称、备份开始时间和备份文件的物理设备名称,并按备份开始时间降序排列

SELECT 
    b.backup_set_id,
    b.database_name,
    b.backup_start_date,
    mf.physical_device_name
FROM 
    msdb.dbo.backupset b
JOIN 
    msdb.dbo.backupmediafamily mf ON b.media_set_id = mf.media_set_id
WHERE 
    b.type = 'D' -- 'D' 表示完整数据库备份
ORDER BY 
    b.backup_start_date DESC;
整体功能

此 SQL 用于查询所有完整数据库备份的信息,包括备份集 ID、数据库名称、备份开始时间和备份文件的物理设备名称,并按备份开始时间降序排列。

详细解释
  1. 表连接
    • 通过 media_set_id 字段将 msdb.dbo.backupsetmsdb.dbo.backupmediafamily 表进行连接。
  2. 过滤条件
    • b.type = 'D' 表示只查询完整数据库备份的记录。
  3. 排序
    • ORDER BY b.backup_start_date DESC 按备份开始时间降序排列,最新的备份记录排在前面。

三、查询所有备份的详细信息,并按备份开始时间降序排列,最新的备份记录排在前面

select * from (
    SELECT
        start_time = bs.backup_start_date,
        finish_time = bs.backup_finish_date, 
        time_cost_sec = DATEDIFF(SECOND, bs.backup_start_date, bs.backup_finish_date),
        back_file = bmf.physical_device_name,
        path = LEFT(bmf.physical_device_name,LEN(bmf.physical_device_name) - charindex('\',reverse(bmf.physical_device_name),1) + 1),
        bs.type,
        backup_size_mb = ROUND(((bs.backup_size/1024)/1024),2),
        compressed_size_mb = ROUND(((bs.compressed_backup_size/1024)/1024),2),
        bs.first_lsn,
        bs.last_lsn
    FROM msdb.dbo.backupmediafamily bmf WITH(NOLOCK)
        INNER JOIN msdb.dbo.backupset bs WITH(NOLOCK)
        ON bmf.media_set_id = bs.media_set_id
) x
ORDER BY x.start_time DESC;
整体功能

此 SQL 用于查询所有备份的详细信息,并按备份开始时间降序排列,最新的备份记录排在前面。

详细解释
  1. 子查询
    • 与第一段 SQL 的子查询类似,从 msdb.dbo.backupmediafamilymsdb.dbo.backupset 表中查询备份信息。
  2. 主查询
    • SELECT * 表示选择子查询中的所有列。
    • ORDER BY x.start_time DESC 按备份开始时间降序排列。

网站公告

今日签到

点亮在社区的每一天
去签到