sql - 如何检查 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)
. 我知道它要么完成回滚,要么检查数据完整性?是否有任何命令可以查看它正在取得多少进展或剩余多少时间?
解决方案
自己找到的,其他有同样问题的人。
对象资源管理器 > YourServerName > 管理 > SQL Server 日志 >最近/当前
打开一个日志查看器,显示数据库的恢复过程:
'数据库'MyDatabase' (10) 的恢复已完成 55%(大约还剩 1066 秒)'
今天我学到了关于 SQL 中的 for-each 循环以及在恐慌中杀死服务器进程的宝贵经验。
推荐阅读
- node.js - 为什么在所有更新服务方法中都调用 Hook
- django - GCP:gunicorn.errors.HaltServer:
- javascript - 是否可以使用公钥/私钥签名方法验证我的 JavaScript 库?
- python - Python tkinter如何定义图像变量
- react-native - 显示加载条的条件错误
- python - 如何使用 Kivy 和 mapview 部署 PyCharm 项目?
- python-3.x - 如何使用 Flask 和 Docker 处理相对导入?
- reactjs - 内部调用函数从外部反应功能组件
- c# - NotMapped 属性可以用于不映射到数据库表的实体框架核心实体吗?
- javascript - 如何格式化基于 ajax 的 Select2 预填充?