有没有办法配置 SQL Server 2008 来终止一个事务,如果它既没有被取消也没有提交一段时间?(比如说电源、网络连接或任何在打开计算机时被切断的东西。)
要么是在一些定义的规则集之后自动发生,要么是通过创建和调用命令行应用程序来查询 SQL Server 的活动事务+它们运行的时间......然后指示 SQL Server 关闭那些“冻结的” ”。
有没有办法配置 SQL Server 2008 来终止一个事务,如果它既没有被取消也没有提交一段时间?(比如说电源、网络连接或任何在打开计算机时被切断的东西。)
要么是在一些定义的规则集之后自动发生,要么是通过创建和调用命令行应用程序来查询 SQL Server 的活动事务+它们运行的时间......然后指示 SQL Server 关闭那些“冻结的” ”。
从这里引用 Gail Shaw 的话:
SQL Server 不会使查询超时,连接的应用程序(在本例中为查询分析器)会。
无论您使用哪种技术进行连接(ADO 等),都可能具有连接超时和执行超时属性,您可以在调用代码中更改这些属性。默认值通常为 30 秒。
你可能会在一个循环中包装这样的东西来杀死每个有问题的 spid:
select datediff(second, last_batch, getdate()) as secs_running, *
from sys.sysprocesses
where hostname != ''
and open_tran = 1
关于如何最好地找到哪些进程是“安全的”可以杀死的,可能会有很多意见,我当然会有点担心根据任意时间跨度自动做这样的事情。我也不确定在此过程中完成的任何数据更改都可以保证被回滚。