今天我遇到了一种情况,我想取消对表和多个索引的更新,并立即从备份中恢复数据库。
我发出了一个 kill 命令来终止更新的 SPID。然后我发出了一个只有状态的杀戮,有几万秒的回滚等待。我需要尽快恢复数据库(因此不关心回滚) - 但你不能杀死正在回滚的 SPID(据我所知),或者恢复具有未完成连接的数据库。
我决定停止 sql 服务,删除数据库的 mdf 和 ldf 物理文件,启动 sql 服务——这表明数据库处于可疑状态。然后恢复数据库。
有没有更可控/更明智的方法来处理这种情况?
今天我遇到了一种情况,我想取消对表和多个索引的更新,并立即从备份中恢复数据库。
我发出了一个 kill 命令来终止更新的 SPID。然后我发出了一个只有状态的杀戮,有几万秒的回滚等待。我需要尽快恢复数据库(因此不关心回滚) - 但你不能杀死正在回滚的 SPID(据我所知),或者恢复具有未完成连接的数据库。
我决定停止 sql 服务,删除数据库的 mdf 和 ldf 物理文件,启动 sql 服务——这表明数据库处于可疑状态。然后恢复数据库。
有没有更可控/更明智的方法来处理这种情况?
正确 - 您不能终止正在回滚的 SPID,因为数据库将进入事务不一致的状态(甚至可能在结构上不一致)。
所以简单的答案是,除了做一些激烈的事情外,没有办法阻止 SPID 一旦启动就回滚。
你的处境很难摆脱,因为真的别无选择。即使您退回 SQL Server,数据库也会经历崩溃恢复,您需要等待它完成。
解决此问题的几种可能方法:
一旦你处于那种状态,除了让回滚完成之外,基本上没有好的解决方案。我真的很犹豫要不要宽恕你的所作所为,因为很多没有经验的人可能会尝试并让自己陷入真正的深渊。
谢谢
我认为你以最有效的方式做到了,但是我可能会重命名文件而不是删除它们,以防万一。或者将它们移动到另一个存储位置。