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
語句,您也可能會收到錯誤訊息。
使用者動作
注意
最佳做法是限制交易中的程式碼,此交易牽涉到只對遠端伺服器進行的分散式查詢。
支援能力
若要檢查驅動程式是否支援分散式交易,請連絡您在連結的伺服器查詢中使用的驅動程式廠商。
檢查目的地伺服器上的 物件是否指向第一部伺服器。 這稱為回送情況。 回送連結的伺服器 適用于測試,且不支援許多作業,例如分散式交易。
伺服器通訊
若要確定伺服器之間的通訊成功,請遵循下列步驟:
檢查您的網路名稱解析是否正常運作。 請確定伺服器可以依名稱彼此通訊,而不只是透過 IP 位址進行通訊。 雙向檢查 (例如,從伺服器 A 到伺服器 B,以及從伺服器 B 到伺服器 A)。 在執行分散式查詢之前,請先解決網路上的所有名稱解析問題。 這可能涉及更新 WINS、DNS 或 LMHost 檔案。
如果您有防火牆,請確定遠端程序呼叫 (RPC) 埠已正確開啟。 如需詳細資訊,請參閱下列文章:
檢查您在目的地伺服器上指向的物件。 如果物件是檢視或預存程式,或它造成觸發程式執行,請檢查它是否隱含指向另一部伺服器。 如果是,第三部伺服器就是問題的來源。 直接在第三部伺服器上執行查詢。 如果您無法這麼做,連結的伺服器查詢就不是問題。 請先解決基礎問題。
檢查您是否使用遠端存取服務器 (RAS) 來存取遠端伺服器。 如果是,請確定您已實作路由 RAS (RRAS)。 連結的伺服器無法在 RAS 上運作,因為 RAS 只允許單向通訊。
伺服器組態
請遵循下列步驟來設定伺服器:
在所有與分散式交易相關的伺服器上啟動分散式交易協調器 (DTC 或 MS DTC)。 如需啟用網路 DTC 存取的詳細資訊,請參閱 OLE DB 提供者 - SQL Server 的錯誤訊息。
針對 大部分的 OLE DB 提供者,將隱含或明確交易中的資料修改語句設定為 ON XACT_ABORT 選項,包括 SQL Server。 在執行查詢之前,您可以執行下列命令來執行此動作。
SET XACT_ABORT ON
注意
如果提供者支援巢狀交易,則不需要此選項。
檢查任何伺服器是否位於 Windows Server 容錯移轉叢集上。 叢集上的 MSDTC 服務必須有自己的 IP 位址。 請確定每個伺服器上都發生 DTC 服務的正確名稱解析。 DTC 的 IP 位址必須定義在名稱解析系統中(例如 WINS、DNS 或 LMHosts)。 確認每部伺服器都可以依名稱與其他伺服器上的 MSDTC 通訊,而不只是透過 IP 位址進行通訊。 檢查兩個方向。 例如,檢查從伺服器 A 到伺服器 B 的 MSDTC 服務,然後檢查伺服器 B 到伺服器 A 的 MSDTC。 執行分散式查詢之前,您必須先解決網路上的所有名稱解析問題。 若要在叢集上設定 MSDTC,請參閱 SQL 容錯移轉叢集上的 MSDTC 建議 - Microsoft 社群中樞 。
如果您使用較舊的遠端伺服器技術,而不是建議的連結伺服器,請將伺服器的遠端程式跨 組態選項設定 為
OFF
,或在執行任何分散式查詢之前執行SET REMOTE_PROC_TRANSACTIONS OFF
語句。 如果此設定設為ON
,則會在本機交易中呼叫遠端過程。 如需詳細資訊,請參閱 設定遠端程式 trans (伺服器組態選項) - SQL Server 。檢查這兩部伺服器上的系統函
@@SERVERNAME
式傳回值。 確認傳回值是否符合每部伺服器的電腦名稱稱。 如果不符合,請重新命名伺服器。確認 SQL Server 啟動帳戶具有下列登錄機碼的完整控制許可權:
HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer
下一步
意見反映
提交及檢視以下的意見反映: