首页 > 解决方案 > 如何检查 SQL Server 数据库的恢复状态进度

问题描述

我是一名新晋的 SQL 程序员,正在使用具有 250GB 数据的生产数据仓库。我写了(事后看来)一个非常繁琐的大型查询,其中包含一个 for-each 循环,该循环必须在某个地方有一个无限循环,因为它运行的时间太长并且占用了越来越多的内存。此时,我决定取消查询,但它仍在执行(我现在知道它正在回滚)。

我试图杀死KILL SPID并没有真正做任何事情的回滚过程。我做了KILL SPID WITH STATUSONLY哪个返回transaction rollback in progress. Estimated rollback completion: 0%. Estimated time remaining: 0 seconds

此时,我决定服务器一定是卡住了,所以我重新启动了服务器。当它回来时,在 SSMS 中,受影响的数据库现在显示MyDatabase (In Recovery). 我知道它要么完成回滚,要么检查数据完整性?是否有任何命令可以查看它正在取得多少进展或剩余多少时间?

标签: sqlsql-serverssms

解决方案


自己找到的,其他有同样问题的人。

对象资源管理器 > YourServerName > 管理 > SQL Server 日志 >最近/当前

打开一个日志查看器,显示数据库的恢复过程:

'数据库'MyDatabase' (10) 的恢复已完成 55%(大约还剩 1066 秒)'

今天我学到了关于 SQL 中的 for-each 循环以及在恐慌中杀死服务器进程的宝贵经验。


推荐阅读