编程开发 > MSSQL > 文章内容

SQLServer备份历史记录分析

2011-8-19编辑:mal

问题

在数据库管理员的日常任务中,数据库备份占据了很重要的位置。这个任务一般通过维护计划、定期的SQL Server Agent Jobs或者第三方工具的执行来完成。考虑到备份的重要性,有必要定期地分析这个过程的性能和效率。那么我们要如何才能洞察任何数据备份过程的性能呢?

专家解答

让我们通过一些不同的脚本来看看能够洞察到什么。为了达到这篇文章的目的,我在这个例子中创建了一个叫做BackupReport的数据库。基于测试目的,执行全日志,差异日志和事务日志来列出脚本的值。查看下面的脚本:

脚本 – 创建备份过程统计数据
SELECT s.database_name,

m.physical_device_name, cast(s.backup_size/1000000 as varchar(14))+' '+'MB' as bkSize, CAST (DATEDIFF(second,s.backup_start_date , s.backup_finish_date)AS VARCHAR(4))+' '+'Seconds' TimeTaken, s.backup_start_date, CASE s.[type] WHEN 'D' THEN 'Full' WHEN 'I' THEN 'Differential' WHEN 'L' THEN 'Transaction Log' END as BackupType, s.server_name, s.recovery_model FROM msdb.dbo.backupset s inner join msdb.dbo.backupmediafamily m ON s.media_set_id = m.media_set_id WHERE s.database_name = 'BackupReport' ORDER BY database_name, backup_start_date, backup_finish_date

这是基于我们例子的结果:

现在,我们具有某个特定数据库的所有备份过程的统计数据。有了这些数据,我们可以分析某个具体时期或不同备份类型的变化。

定制化脚本

l 这个脚本针对的是SQL Server 2005。如果你要在SQL Server 2000中运行这个脚本,那么接着你必须把列'recovery_model'从选择列表中删除。

l 这个脚本将创建由WHERE从句提供的某个特定数据库的数据。如果你想产生所有数据库的统计数据,那么只要修改上述脚本中的WHERE从句。

l 脚本的产生时间只有几秒。要获得几分钟或者几小时的时间,只需要把脚本第二行的datediff参数改成要求的时间单元。

l Msdb数据库中的backupset表具有额外的信息。如果需要额外的信息,那么下面列中的任何一列都可以增加到SELECT语句中。

列表 信息
[name] 备份的逻辑名称
[user_name] 执行备份的用户
[description] 备份的描述
[first_lsn] 第一个日志序列号
[last_lsn] 最后一个日志序列号
[checkpoint_lsn] 检查点日志序列号
[database_creation_date] 数据库的创建日期
[compatibility_level] 备份数据库的兼容性级别
[machine_name] 开始备份的SQL Server名称
[is_password_protected] 数据库备份有密码保护或者没有密码保护
[is_readonly] 数据库备份被读取或者没有读取
[is_damaged] 数据库备份损坏或者不损坏

SQL中也可以用格式字符串定制日期转字符串

热点推荐

登录注册
触屏版电脑版网站地图