有没有办法配置SQL Server 2008来杀死一个事务,如果它既没有被取消也没有被提交一段时间? (假设电源,网络连接或任何被切断的计算机打开它。)
要么是在一些已定义的规则集之后自动发生,要么通过调用命令行应用程序来查询SQL服务器以查找活动事务+它们一直在运行的时间......然后指示SQL Server关闭那些被“冻结”。
答案 0 :(得分:2)
引用here中的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
关于如何最好地找到哪些进程“安全”可以杀人,可能会有很多意见,我当然会担心根据任意时间跨度自动执行这样的事情。我也不确定在此过程中完成的任何数据更改都是guaranteed to be rolled-back。