几分钟后终止 SQL Server 事务
Posted
技术标签:
【中文标题】几分钟后终止 SQL Server 事务【英文标题】:Kill SQL Server transactions after some minutes 【发布时间】:2012-04-11 14:23:05 【问题描述】:是否有任何方法可以配置 SQL Server 2008 以在某个事务既未取消也未提交一段时间后终止该事务? (比如电源、网络连接或任何在打开计算机时被切断的东西。)
要么在一些定义的规则集之后自动发生,要么通过创建和调用一个命令行应用程序来查询 SQL Server 的活动事务+它们运行的时间......然后指示 SQL Server 关闭那些被“冻结”了。
【问题讨论】:
【参考方案1】:引用here的盖尔·肖的话:
SQL Server 不会超时查询,连接应用程序(在本例中为查询分析器)会。
您用于连接的任何技术(ADO 等)都可能具有连接超时和执行超时属性,您可以在调用代码中更改这些属性。默认值通常为 30 秒。
您可以可能将这样的内容包装在一个循环中,以杀死每个有问题的 spid:
select datediff(second, last_batch, getdate()) as secs_running, *
from sys.sysprocesses
where hostname != ''
and open_tran = 1
关于如何最好地找到哪些进程是“安全”可以杀死的,可能会有很多意见,我当然会有点担心根据任意时间跨度自动执行这样的事情。我也不确定在此过程中所做的任何数据更改是guaranteed to be rolled-back。
【讨论】:
感谢您的回答。我会保留它作为最后的手段:) 更改将被回滚,也就是说,任何在被终止时正在进行的事务都将被回滚。链接的问题是在没有包含事务的情况下进行许多单独的删除 - 因此已经完成的那些不受影响。以上是关于几分钟后终止 SQL Server 事务的主要内容,如果未能解决你的问题,请参考以下文章