我集群的一个 SAN 上的控制器会定期自行重启。显然它可以通过固件更新来修复,但在我们可以在几天内应用更新之前,我必须忍受这个问题。问题是,如果其中一个在 DBCC CHECKDB 运行时发生故障(在夜间维护期间),则 CHECKDB 会挂起。我似乎无法杀死它......它表明它正在等待 ASYNC_IO_COMPLETION 永远。我需要循环实例,还是有其他方法可以杀死 CHECKDB?
SQL Server 2005 RTM & SP2 实例。
我集群的一个 SAN 上的控制器会定期自行重启。显然它可以通过固件更新来修复,但在我们可以在几天内应用更新之前,我必须忍受这个问题。问题是,如果其中一个在 DBCC CHECKDB 运行时发生故障(在夜间维护期间),则 CHECKDB 会挂起。我似乎无法杀死它......它表明它正在等待 ASYNC_IO_COMPLETION 永远。我需要循环实例,还是有其他方法可以杀死 CHECKDB?
SQL Server 2005 RTM & SP2 实例。
好的 - 这是正确的行为。发生的情况是您在 DBCC CHECKDB 仍在创建所需的数据库快照时杀死了它。创建快照的一部分是在被检查的数据库上运行崩溃恢复,但在数据库快照的上下文中。无法停止崩溃恢复,并且无法杀死正在运行的 spid。所以——你唯一的选择是等待它完成,或者循环实例——这将删除快照。当我将 CHECKDB 更改为使用数据库快照时,我们知道这将是一个潜在问题,但别无选择。
查看这篇博文,我在其中进行了更多解释:DBCC CHECKDB 运行时事务回滚吗?
干杯
当您说您似乎无法杀死它时,您是在试图取消工作吗?或者你是从活动监视器中杀死 SPID 吗?