Sql-Server

在不重新啟動 SQL Server 實例的情況下修復連結伺服器

  • July 26, 2020

問題: 有時夜間作業會失敗,當我查看它時,它是跨連結伺服器的查詢失敗的結果。但由於某種原因,該查詢似乎以某種方式保持“開放”並導致後續失敗。

糟糕的解決方案: 我發現解決此問題的唯一方法是重新啟動似乎可以清除所有內容的實例。但是當它發生在生產中時,顯然有點麻煩。

問題: 是否有人有重置卡在打開狀態的連結伺服器的策略?我什至不確定引擎蓋下發生了什麼。

其他檢查:

  • 在連結到的伺服器上測試了查詢。我可以在那邊很好地選擇數據
  • 使用連結測試了伺服器上的所有其他內容。那裡一切正常,只是當它嘗試通過該連結查詢時失敗。

是真正重啟實例的唯一解決方案嗎?

根據您正在執行的語句以及您如何配置連結伺服器,您可能會遇到需要殺死的孤立分佈式事務的情況。要確定是否是這種情況,請首先執行以下查詢:

SELECT  DISTINCT request_owner_guid
FROM    sys.dm_tran_locks 
WHERE   request_session_id = -2

如果這返回記錄,則很有可能您實際上正遇到這種情況。要終止這些孤立的事務,您必須為上述查詢返回的每條記錄執行以下語句:

KILL 'UOW'

UOW是上述查詢中返回的 request_owner_guid。

我在連結伺服器問題和從 SQL Server 程序外部進行呼叫的作業都遇到了這種情況。在任何一種情況下,我都會發現外部程序會干擾(例如網路失去、程序被終止或意外錯誤等),然後事務不會在 SQL Server 上正確終止。SQL Server 不會知道事務實際上已經失敗,並且事情會一直呆在那裡,直到您完成此過程或像您現在已經做的那樣反彈伺服器。

希望有幫助。

提供商的未選中“允許處理中”屬性

使用程序外提供程序設置連結伺服器所需的文章權限:http: //blogs.msdn.com/b/dataaccesstechnologies/archive/2010/08/19/permissions-needed-to-set-up-linked- server-with-out-of-process-provider.aspx

引用自:https://dba.stackexchange.com/questions/68054