MSSQLSERVER_7391

適用於:SQL Server

屬性
Products SQL Server
事件識別碼 7391
事件來源 MSSQLSERVER
元件 SQLEngine
符號名稱 RMT_TRANS_JOIN_FAIL
訊息文字 無法執行作業,因為連結伺服器 "%ls" 的 OLE DB 提供者 "%ls" 無法開始分散式交易。

說明

發生此錯誤的原因是 Microsoft 分散式交易協調器 (MSDTC) 服務未執行或已停用網路存取。

在某些情況下,您可能也會收到錯誤 8522:

Microsoft Distributed Transaction Coordinator (MS DTC) has stopped this transaction.

7300 到 7399 範圍內的錯誤號碼表示會影響提供者的問題。 因為每個提供者可能有不同的功能並顯示不同的詳細資料,因此您可能不會收到完整的錯誤訊息。 若要從提供者擷取完整的錯誤訊息,請先執行下列命令,再執行產生錯誤的查詢:

DBCC TRACEON (3604, 7300)

如果您從 SQL Server 複寫或 SQL Server Integration Services (SSIS) 等進程收到錯誤 7391,則如果程式碼包含 BEGIN DISTRIBUTED TRAN 語句,您也可能會收到錯誤訊息。

使用者動作

注意

最佳做法是限制交易中的程式碼,此交易牽涉到只對遠端伺服器進行的分散式查詢。

支援能力

  • 若要檢查驅動程式是否支援分散式交易,請連絡您在連結的伺服器查詢中使用的驅動程式廠商。

  • 檢查目的地伺服器上的 物件是否指向第一部伺服器。 這稱為回送情況。 回送連結的伺服器 適用于測試,且不支援許多作業,例如分散式交易。

伺服器通訊

若要確定伺服器之間的通訊成功,請遵循下列步驟:

  1. 檢查您的網路名稱解析是否正常運作。 請確定伺服器可以依名稱彼此通訊,而不只是透過 IP 位址進行通訊。 雙向檢查 (例如,從伺服器 A 到伺服器 B,以及從伺服器 B 到伺服器 A)。 在執行分散式查詢之前,請先解決網路上的所有名稱解析問題。 這可能涉及更新 WINS、DNS 或 LMHost 檔案。

  2. 如果您有防火牆,請確定遠端程序呼叫 (RPC) 埠已正確開啟。 如需詳細資訊,請參閱下列文章:

  3. 檢查您在目的地伺服器上指向的物件。 如果物件是檢視或預存程式,或它造成觸發程式執行,請檢查它是否隱含指向另一部伺服器。 如果是,第三部伺服器就是問題的來源。 直接在第三部伺服器上執行查詢。 如果您無法這麼做,連結的伺服器查詢就不是問題。 請先解決基礎問題。

  4. 檢查您是否使用遠端存取服務器 (RAS) 來存取遠端伺服器。 如果是,請確定您已實作路由 RAS (RRAS)。 連結的伺服器無法在 RAS 上運作,因為 RAS 只允許單向通訊。

伺服器組態

請遵循下列步驟來設定伺服器:

  1. 在所有與分散式交易相關的伺服器上啟動分散式交易協調器 (DTC 或 MS DTC)。 如需啟用網路 DTC 存取的詳細資訊,請參閱 OLE DB 提供者 - SQL Server 的錯誤訊息。

  2. 針對 大部分的 OLE DB 提供者,將隱含或明確交易中的資料修改語句設定為 ON XACT_ABORT 選項,包括 SQL Server。 在執行查詢之前,您可以執行下列命令來執行此動作。

    SET XACT_ABORT ON
    

    注意

    如果提供者支援巢狀交易,則不需要此選項。

  3. 檢查任何伺服器是否位於 Windows Server 容錯移轉叢集上。 叢集上的 MSDTC 服務必須有自己的 IP 位址。 請確定每個伺服器上都發生 DTC 服務的正確名稱解析。 DTC 的 IP 位址必須定義在名稱解析系統中(例如 WINS、DNS 或 LMHosts)。 確認每部伺服器都可以依名稱與其他伺服器上的 MSDTC 通訊,而不只是透過 IP 位址進行通訊。 檢查兩個方向。 例如,檢查從伺服器 A 到伺服器 B 的 MSDTC 服務,然後檢查伺服器 B 到伺服器 A 的 MSDTC。 執行分散式查詢之前,您必須先解決網路上的所有名稱解析問題。 若要在叢集上設定 MSDTC,請參閱 SQL 容錯移轉叢集上的 MSDTC 建議 - Microsoft 社群中樞

  4. 如果您使用較舊的遠端伺服器技術,而不是建議的連結伺服器,請將伺服器的遠端程式跨 組態選項設定 OFF ,或在執行任何分散式查詢之前執行 SET REMOTE_PROC_TRANSACTIONS OFF 語句。 如果此設定設為 ON ,則會在本機交易中呼叫遠端過程。 如需詳細資訊,請參閱 設定遠端程式 trans (伺服器組態選項) - SQL Server

  5. 檢查這兩部伺服器上的系統函 @@SERVERNAME 式傳回值。 確認傳回值是否符合每部伺服器的電腦名稱稱。 如果不符合,請重新命名伺服器。

  6. 確認 SQL Server 啟動帳戶具有下列登錄機碼的完整控制許可權:

    HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer

下一步