Sql-Server

如何為連結伺服器啟用分佈式事務?

  • December 26, 2017

我有一個 SQL Server 2012 實例,其連結伺服器使用 System i Access ODBC 驅動程序指向 IBM Iseries 系統上的 db2 數據庫。

我正在嘗試啟用分佈式事務。我相信該提供商確實根據IBM 文件支持它們(除非我誤解了該連結)。

我正在執行以下查詢:

BEGIN TRANSACTION
   UPDATE LINKEDSERVER.LINKEDDATABASE.SCHEMANAME.TABLENAME SET COLUMN = VALUE

   SELECT CAST('qwerty' as integer) -- we want an error here so the transaction fails
COMMIT TRANSACTION

我收到以下錯誤:

連結伺服器“LINKEDSERVER”的 OLE DB 提供程序“MSDASQL”返回消息“

$$ IBM $$$$ System i Access ODBC Driver $$在 DTC 階段登記失敗。2"。消息 7391,級別 16,狀態 2,行 2 由於連結伺服器“LINKEDSERVER”的 OLE DB 提供程序“MSDASQL”無法開始分佈式事務,因此無法執行操作。

我對這個錯誤所做的所有研究都遇到了想要禁用分佈式事務而不是讓它們工作的人。我已經在連結伺服器屬性上將“啟用分佈式事務提升”設置為 true。

有什麼想法可以讓這個工作嗎?

編輯:更多資訊/更新。當我在 Windows 日誌中註意到這一點時,我正準備暫時放棄並等待幫助:

當 XA 事務被禁用時,呼叫者試圖註冊 XA 資源。

我發現這個連結告訴我如何修改 MSDTC 的設置。在使用設置並重新啟動我的伺服器之後,事情開始工作(有點):(具體來說,我啟用了網路 DTC 訪問,允許入站/出站/啟用 XA 事務)。

在此處輸入圖像描述

目前,查詢按預期執行並送出/回滾,但有時似乎可以工作,但有時會出錯。錯誤是:

連結伺服器“LINKEDSERVER”的 OLE DB 提供程序“MSDASQL”返回消息“

$$ IBM $$$$ System i Access ODBC Driver $$內部驅動程序錯誤。”

EDIT2:現在它不再工作了。錯誤資訊:

連結伺服器“LINKEDSERVER”的 OLE DB 提供程序“MSDASQL”返回消息“ODBC 驅動程序無法啟動新事務。”。連結伺服器“LINKEDSERVER”的 OLE DB 提供程序“MSDASQL”返回消息“

$$ Microsoft $$$$ ODBC Driver Manager $$在事務伺服器組件事務中的非法操作”。

除了設置本地 DTC 屬性外,您還需要在兩台機器上打開防火牆以允許分佈式事務協調器程序通過。

允許分佈式事務協調器通過 Windows 防火牆進行通信

在查詢編輯器視窗中測試 T-SQL 時,請確保按照 Microsoft 的建議打開 XACT_ABORT。

對於大多數 OLE DB 提供程序(包括 SQL Server)的隱式或顯式事務中的數據修改語句,XACT_ABORT 必須設置為 ON。唯一不需要此選項的情況是提供程序支持嵌套事務。

就我而言,對於本地 DTC 屬性,我只需要這些: 故障診斷程式碼設置

檢查 DTC 和 SQL Browser 服務是否在正確的服務帳戶下執行。

還可以檢查以下 MS-BOL 連結以獲得更多配置幫助。

在 SQL Server 中使用分佈式事務的推薦 MSDTC 設置

您可以使用此工具來確定您的系統是否具有正確的 MSDTC 配置。

2012 年最佳實踐分析器

最後但並非最不重要的

了解 XA 事務

讓我們知道您正在嘗試的一些範例查詢。

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