问题
在数据库管理员的日常任务中,数据库备份占据了很重要的位置。这个任务一般通过维护计划、定期的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] | 数据库备份损坏或者不损坏 |
ASP编码教程:如何实现/使用缓存
[ASP]2015年4月15日ASP编码教程:asp缓存的分类
[ASP]2015年4月15日ASP编码教程:何谓ASP缓存/为什么要缓存
[ASP]2015年4月15日ASP编码教程:asp实现的sha1加密解密代码
[ASP]2015年4月15日ASP编码教程:asp执行带参数的sql语句实例
[ASP]2015年4月14日