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

在SQL Server数据库中,监控数据库备份还原进度方法主要有以下三种:

利用SSMS的备份、还原进度百分比

利用T-SQL的stats关键字展示百分比

利用动态视图监控备份、还原完成百分比

监控数据库备份进度

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

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

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

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

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

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

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

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

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

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

这个结果中有非常多重要的字段信息,比如:

sql_text: 语句详细信息,此处展示了完整的T-SQL语句

percent_complete: 进度完成百分比,此处已经完成了59.67%

start_time:进程开始执行时间

eta_completion_time:进程预计结束时间

等等。这种方法除了可以监控数据库备份还原进度外,还可以获取更多的进程信息,是比较推荐的方法。

提示: 这种方法不仅仅是可以用来监控你的备份还原进程,任何其他的用户进程都可以使用类似的方法来监控,你只需要把WHERE语句稍作修改即可。比如:想要监控某一个进程的进度情况,你只需要把WHERE语句修改为WHERE req.session_id=xxx即可。

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

截图如下: 09.png

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