MSSQL最佳实践:如何监控备份还原进度?

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
简介:

场景引入

  由于SQL Server备份还原操作是重I/O读写操作,尤其是当数据库或数据库备份文件比较大的到时候。那么,我们就有强烈的需求去监控备份还原的过程,时时刻刻把握备份还原的进度,以获取备份还原操作完成时间的心理预期以及对系统的影响。本文主要分享如何监控SQL Server备份还原进度。

监控备份还原进度

  在SQL Server数据库中,监控数据库备份还原进度方法主要有以下三种:利用SSMS的备份、还原进度百分比;利用T-SQL的stats关键字展示百分比;利用动态视图监控备份、还原完成百分比。

利用SSMS

  监控数据库备份进度

  在SSMS中,右键点击你需要备份的数据库 => Tasks => Back Up...

MSSQL最佳实践:如何监控备份还原进度?

  在Destination中选择Disk => Add... => 选择备份文件本地存储路径 => OK

MSSQL最佳实践:如何监控备份还原进度?

  在该窗口的左下角部分,会有Process的进度展示,比如截图中的进度表示数据库已经备份完成了30%。这种方法可以看到数据库备份进程进度的百分比,但是没有更多的详细信息。

  监控数据库还原进度

  监控数据库还原进度方法与上面的方法十分类似,只是入口不同。还原数据库入口:右键点击你需要还原的数据库 => Tasks => Restore => Database...

MSSQL最佳实践:如何监控备份还原进度?

  在Restore Database页面,选择Device => 点击右侧的预览按钮 => Add => 添加本地备份文件 => OK

MSSQL最佳实践:如何监控备份还原进度?

  在接下来的数据库还原页面中的最右上角部分,有数据库的还原进度条,以及还原百分比。比如,图中的数据库还原进度是50%,参见如下截图:

MSSQL最佳实践:如何监控备份还原进度?

  利用T-SQL

  以上方法介绍使用SSMS来备份或者还原数据库进度监控查看方法。当然,有的人喜欢使用T-SQL脚本的方式来备份或者还原数据库。我们同样可以实现备份还原数据库的进度监控,方法是在语句中增加stats关键字,比如stats=10,那么系统在完成每个百分之十以后,都会在Messages中打印出** percent processed的字样。

  BACKUP DATABASE [TestBackUpRestore]

  TO DISK='C:\BACKUP1\TestBackUpRestore_FULL.bak' WITH STATS=10;

  参见如下截图,在Messages窗口中,每个10%,都有** percent processed的进度提示。

MSSQL最佳实践:如何监控备份还原进度?

  注意:还原数据库的方法相同,同样也是添加stats关键字。比如:

  USE [master]

  RESTORE DATABASE [TestBackUpRestore] FROMDISK = N'C:\BACKUP1\TestBackUpRestore_FULL.bak' WITHFILE = 4,NOUNLOAD,STATS = 10

  GO

  利用DMV

  有的人可能会遇到这样的情况:我在做数据库备份还原的时候,忘记添加stats关键字了,Messages窗口什么也没有提示。这种情况下,我该如何去监控我的备份或者还原数据库进度呢?其实,这种情况也无需紧张,我们同样有办法来监控数据库备份还原的进度,方法是使用动态管理视图sys.dm_exec_requests配合一些关键信息字段来监控进度。方法如下:

MSSQL最佳实践:如何监控备份还原进度?

MSSQL最佳实践:如何监控备份还原进度?

  由于结果集宽度过宽,人为分割为两个部分来展示查询结果集:

MSSQL最佳实践:如何监控备份还原进度?

MSSQL最佳实践:如何监控备份还原进度?

  这个结果中有非常多重要的字段信息,比如:Command: 表示命令种类,此处表示备份数据库命令sql_text: 语句详细信息,此处展示了完整的T-SQL语句percent_complete: 进度完成百分比,此处已经完成了59.67%start_time:进程开始执行时间eta_completion_time:进程预计结束时间等等。这种方法除了可以监控数据库备份还原进度外,还可以获取更多的进程信息,是比较推荐的方法。提示:这种方法不仅仅是可以用来监控你的备份还原进程,任何其他的用户进程都可以使用类似的方法来监控,你只需要把WHERE语句稍作修改即可。比如:想要监控某一个进程的进度情况,你只需要把WHERE语句修改为WHERE req.session_id=xxx即可。

  获取备份历史信息

  以上章节是介绍如何监控SQL Server备份还原进程的进度,我们有时也会遇到如下场景是:我们需要如何去探索或者发现某个数据库的备份历史记录信息。参见如下代码可以获取到数据库TestBackUpRestore的历史备份记录信息。

MSSQL最佳实践:如何监控备份还原进度?

MSSQL最佳实践:如何监控备份还原进度?

  截图如下:

MSSQL最佳实践:如何监控备份还原进度?

  这里需要特别注意:如果你删除数据库时,使用了msdb.dbo.sp_delete_database_backuphistory存储过程清空数据库的备份历史,将无法再获取到该数据库的备份历史。比如:

  EXEC msdb.dbo.sp_delete_database_backuphistory @database_name = N'TestBackUpRestore'

  GO

  最后总结

  继前面五篇SQL Server备份还原专题系列月报分享后,我们完成了:三种常见的数据库备份、备份策略的制定、查找备份链、数据库的三种恢复模式与备份之间的关系、利用文件组实现冷热数据隔离备份方案以及本期月报分享的如何监控备份还原进度总共六篇。


原文发布时间为:2018-05-29

本文作者:风移

本文来自云栖社区合作伙伴“IT168”,了解相关信息可以关注“IT168”。

相关文章
|
3月前
|
关系型数据库 MySQL 数据库
DZ社区 mysql日志清理 Discuz! X3.5数据库可以做定期常规清理的表
很多站长在网站日常维护中忽略了比较重要的一个环节,就是对于数据库的清理工作,造成数据库使用量增加必须多的原因一般有2个:后台站点功能开启了家园,此功能现在很少有论坛会用到,但是灌水机会灌入大量垃圾信息致使站长长时间未能发觉;再有就是程序默认的一些通知类表单会存放大量的、对于网站日常运行并无意义的通知信息。
134 2
|
运维 监控 关系型数据库
【运维知识进阶篇】zabbix5.0稳定版详解4(用脚本自定义监控项+监控MySQL状态信息)(二)
【运维知识进阶篇】zabbix5.0稳定版详解4(用脚本自定义监控项+监控MySQL状态信息)(二)
114 0
|
运维 监控 关系型数据库
【运维知识进阶篇】zabbix5.0稳定版详解4(用脚本自定义监控项+监控MySQL状态信息)(一)
【运维知识进阶篇】zabbix5.0稳定版详解4(用脚本自定义监控项+监控MySQL状态信息)
174 0
QGS
|
Oracle 关系型数据库 数据库
oracle数据库-简易巡检脚本
记oracle数据库-简易巡检脚本
QGS
306 0
oracle数据库-简易巡检脚本
|
运维 大数据 Windows
【大数据开发运维解决方案】windows定期清理指定目录文件(保留指定天数日志)
定期清理windows指定目录文件 1、编辑clean.bat脚本加入下面内容: 根据实际需要替换指定目录和时间,这里只保留F:\testbat目录最近七天的所有文件。 forfiles /p "F:\testbat" /s /m *.* /d -7 /c "cmd /c del @path" 保存退出 2、加入windows定期执行计划: 在win系统中,选择计算机管理-》系统工具-》任务计划...
【大数据开发运维解决方案】windows定期清理指定目录文件(保留指定天数日志)
|
运维 数据库 Windows
【ogg三】日常运维篇:清理归档日志,ogg进程注册服务,定期备份数据库
【ogg三】日常运维篇:清理归档日志,ogg进程注册服务,定期备份数据库
319 0
【ogg三】日常运维篇:清理归档日志,ogg进程注册服务,定期备份数据库
|
监控 Oracle 关系型数据库
Oracle巡检脚本大全,服务器可直接部署
Oracle巡检脚本大全,服务器可直接部署
316 0
Oracle巡检脚本大全,服务器可直接部署
|
运维 关系型数据库 MySQL
运维笔记- MySQL 临时文件 ibtmp1 过大的处理
发现占用空间最大的是一个临时文件ibtmp1.
533 0
运维笔记- MySQL 临时文件 ibtmp1 过大的处理
|
监控 关系型数据库 应用服务中间件
|
监控 关系型数据库 数据库
PostgreSQL 10.1 手册_部分 III. 服务器管理_第 28 章 监控数据库活动_28.4. 进度报告
28.4. 进度报告 28.4.1. VACUUM进度报告 PostgreSQL能够在命令执行期间报告某些命令的进度。目前,唯一支持 进度报告的命令是VACUUM。未来可能会添加更多命令支持。
1276 0