The*_*Wes 5 sql-server sql-server-2008-r2 linked-server sql-server-2012
问题: 有时夜间作业会失败,当我调查它时,这是跨链接服务器的查询失败的结果。但由于某种原因,该查询似乎以某种方式保持“开放”状态并导致后续失败。
糟糕的解决方案: 我发现解决此问题的唯一方法是重新启动实例,这似乎可以清除所有内容。但当它发生在生产中时,显然有点麻烦。
问题: 是否有人有重置打开状态的链接服务器的策略?我什至不太确定幕后发生了什么。
进行的其他检查: -
唯一的解决方案是真正重新启动实例吗?
根据您正在运行的语句以及您如何配置链接服务器,您可能会遇到这样的情况:您需要杀死一个孤立的分布式事务。要确定是否属于这种情况,请首先运行以下查询:
SELECT DISTINCT request_owner_guid
FROM sys.dm_tran_locks
WHERE request_session_id = -2
Run Code Online (Sandbox Code Playgroud)
如果这返回记录,那么您很可能实际上遇到了这种情况。要终止这些孤立事务,您必须对上述查询返回的每条记录运行以下语句:
KILL 'UOW'
Run Code Online (Sandbox Code Playgroud)
UOW是上述查询中返回的 request_owner_guid。
我遇到过这种情况,包括链接服务器问题和从 SQL Server 进程进行外部调用的作业。无论哪种情况,我都会发现外部进程会干扰(例如网络丢失、进程被终止或意外错误等),然后事务将无法在 SQL Server 上正确终止。SQL Server 不会知道事务实际上已失败,并且事情将一直保留在那里,直到您完成此过程或像您现在所做的那样反弹服务器。
希望有帮助。
归档时间: |
|
查看次数: |
11739 次 |
最近记录: |