今天,我有一种情况,我想取消一个表和多个索引的更新,并立即从备份恢复数据库。
我发出了kill命令来杀死更新的SPID。 然后,我发出了一个有状态的杀戮,有几万秒的等待回滚。 我需要急着恢复数据库(因此不用担心回滚) – 但是你不能杀死一个回滚的SPID(据我所知),或者恢复一个拥有优秀连接的数据库。
我决定停止sql服务,删除数据库的mdf和ldf物理文件,启动sql服务 – 显示数据库处于可疑状态。 然后恢复数据库。
有没有一个更加控制/合理的方式来处理这种情况?
正确 – 你不能杀死一个正在回滚的SPID,因为数据库将被置于事务不一致的状态(甚至可能在结构上不一致)。
所以简单的答案是,一旦启动SPID,就无法阻止SPID回滚,除非做些激烈的事情。
你的情况很难摆脱,因为没有select。 即使你反弹SQL Server,数据库也会经历崩溃恢复,你需要等到它完成。
解决这个问题的几种可能的方法
一旦处于该状态,基本上没有好的解决scheme,只能让回滚完成。 我真的不愿意宽恕你所做的事情,因为有那么多没有经验的人可能会尝试并深入到自己的深处。
谢谢
我想你是以最有效的方式做到的,但是我可能已经重命名了文件而不是删除它们,以防万一。 或将它们移动到另一个存储位置。