1. 程式人生 > 其它 >[SQL Server] 配置分散式事務 DTC

[SQL Server] 配置分散式事務 DTC

資料庫設定

  1. remote proc trans
    這個是用來保證分散式事務之間的ACID的,微軟不建議開啟。
    同時開啟這個要開啟‘remote access’,用來控制從執行 SQL Server 例項的本地或遠端伺服器執行儲存過程
  2. linked server rpc(remote procedure calls)設定
    這代表遠端過程呼叫,允許您在連結伺服器上執行儲存過程。 RPC 啟用來自指定伺服器的遠端過程呼叫,RPC OUT 啟用對指定伺服器的遠端過程呼叫。

大多數 BizTalk Server 執行時操作都需要 Microsoft 分散式事務處理協調器 (MSDTC) 支援,以確保操作事務性一致。 如果沒有 MSDTC 事務支援,則相關聯的 BizTalk Server 執行時操作將無法進行。 未正確配置 MSDTC 事務支援時通常會影響的 BizTalk 元件包括(但不限於)單一登入服務、BizTalk 主機例項以及 BizTalk Server 所連線的任何 SQL Server 例項。 本部分包含的資訊描述了與 MSDTC 相關的錯誤和步驟,遵循這些步驟可幫助你診斷並解決 MSDTC 存在的問題。
未正確配置 MSDTC 事務支援時會出現的錯誤

如果未在 BizTalk 環境中的計算機上正確配置 MSDTC 事務支援,則 BizTalk Server 上可能出現如下錯誤

  • “由於 Microsoft 分散式事務處理協調器出現問題,因此無法連線到配置資料庫。 該事務管理器已經禁止了它對遠端/網路事務的支援"。

  • “由於 Microsoft 分散式事務處理協調器出現問題,因此無法連線到配置資料庫。 此事務已明地或暗地被確認或終止”。

  • “錯誤程式碼:0x8004d00a,無法在指定的事務處理協調器中登記新事務”。

  • “無法從配置儲存中檢索接收位置‘MySample ReceiveLocation’的傳輸型別資料。 主 SSO Server‘MyServer’發生故障。 RPC 伺服器不可用”。

  • “錯誤程式碼:0x8004d025,,合作伙伴事務管理器已禁用對遠端/網路事務的支援”。

  • “錯誤程式碼:0xc0002a24,無法匯入 DTC 事務。 請檢查 MSDTC 是否正確配置以用於遠端操作”。

  • “0x8004d01c

  • [0x1705] 建立內部工作項時發生失敗。確保 SQL Server 正在執行。”

    要解決 MSDTC 配置錯誤,請遵循以下步驟。

確保 BizTalk Server 與遠端伺服器之間的 NetBIOS 名稱解析成功

要在計算機之間成功完成 MSDTC 事務,客戶端計算機和伺服器計算機都必須能夠將對方的 NetBIOS 名稱解析為正確的 IP 地址。 要檢查 NetBIOS 名稱解析是否在兩個方向上(客戶端到伺服器和伺服器到客戶端)都工作正常,請按以下步驟進行操作:

備註:NetBIOS 名稱還常稱為 網路 名稱。

  1. 確定每臺計算機的 NetBIOS 名稱:
    a. 右鍵單擊“我的電腦” 以顯示“系統屬性” 對話方塊,然後單擊“計算機名” 選項卡,檢視分配給該計算機的“計算機全名” 。
    b. NetBIOS 名稱是指定為 完整計算機名稱 的名稱的第一部分,例如,如果 完整計算機名稱 為 myserver.company.domain.com,則計算機的 NetBIOS 名稱為 myserver。
  2. 確定與每臺計算機相關聯的 IP 地址:
    a. 在客戶端計算機上啟動命令提示符,鍵入以下命令,然後按 Enter:
ipconfig /all

命令提示符視窗中即會列出與客戶端計算機相關聯的 IP 地址。

b. 在伺服器計算機上啟動命令提示符,鍵入以下命令,然後按 Enter:

ipconfig /all

命令提示符視窗中即會列出與伺服器計算機相關聯的 IP 地址。
3. 檢查每臺計算機的 NetBIOS 名稱是否解析為與該計算機相關聯的 IP 地址之一:
a. 在客戶端計算機上啟動命令提示符,鍵入以下命令,然後按 Enter:

ping <NetBIOS name of server computer>

ping 命令的結果應該返回與伺服器計算機相關聯的 IP 地址。
b. 在伺服器計算機上啟動命令提示符,鍵入以下命令,然後按 Enter:

ping <NetBIOS name of client computer>

ping 命令的結果應該返回與客戶端計算機相關聯的 IP 地址。
c. 驗證每臺計算機上與 NetBIOS 名稱相關聯的 IP 地址反向名稱查詢解析為正確的計算機名。
在客戶端計算機上啟動命令提示符,鍵入以下命令,然後按 Enter:

ping -a <IP Address associated with client computer NetBIOS name>

ping 命令的結果應該返回一個 NetBIOS 名稱或與步驟 3a 中使用的 NetBIOS 名稱相對應的完全限定域名。 如果返回的名稱不與步驟 3a 中使用的 NetBIOS 名稱相匹配或對應,則 IP 地址反向查詢將失敗,這會導致 MSDTC 事務失敗。
d. 在伺服器計算機上啟動命令提示符,鍵入以下命令,然後按 Enter:

ping -a <IP Address associated with server computer NetBIOS name>

ping 命令的結果應該返回一個 NetBIOS 名稱或與步驟 3b 中使用的 NetBIOS 名稱相對應的完全限定域名。 如果返回的名稱不與步驟 3b 中使用的 NetBIOS 名稱相匹配或對應,則 IP 地址反向查詢將失敗,這會導致 MSDTC 事務失敗。
如果 NetBIOS 名稱解析在任何一個方向上不成功,或者反向名稱查詢失敗,請在 DNS 伺服器、NetBIOS 名稱伺服器、HOSTS 檔案或 LMHOSTS 檔案中新增適當的條目以糾正問題。

備註: 計算機使用的名稱解析方法隨計算機的 NetBIOS 節點型別不同而異。 有關 NetBIOS 節點型別的詳細資訊,請參閱 NetBIOS 名稱解析。

確保 BizTalk Server 與遠端伺服器之間的防火牆沒有阻塞 RPC 動態埠分配所需要的埠

通過網路實現的 MSDTC 功能取決於通過網路實現的 RPC 功能。 通過防火牆使用 RPC 功能需要開啟特定的埠,以滿足 RPC 動態埠的分配要求。 如果在 BizTalk Server 與遠端伺服器之間有防火牆,則請按照 如何配置與防火牆一起使用的 RPC 動態埠分配 中的步驟進行操作,以滿足 RPC 動態埠分配的要求。

設定相應的 MSDTC 安全配置選項

Windows 提供了用於管理如何通過網路訪問 MSDTC 的安全增強功能。 通過修改 MSDTC 安全設定,你可以控制 MSDTC 在網路中如何與遠端計算機通訊。 此表列出了配置 MSDTC 安全配置時可用選項的建議值:

配置選項 預設值 建議的值
網路 DTC 訪問 已禁用 已啟用
客戶端和管理
允許遠端客戶端 已禁用 已禁用
允許遠端管理 已禁用 已禁用
事務管理器通訊
允許入站 已禁用 已啟用
允許出站 已禁用 已啟用
要求進行相互身份驗證 已啟用 如果所有遠端計算機都執行的是 Windows Server 2003 SP1 或 Windows XP SP2 或更高版本,並且都配置有“要求相互身份驗證”,則為“已啟用”。
要求對呼叫方進行身份驗證 已禁用 如果在群集上執行 MSDTC,則為“已啟用”。
不要求進行身份驗證 已禁用 在遠端計算機為 Windows Server 2003 SP1 之前的版本或 Windows XP SP2 之前的版本時啟用。
啟用 TIP 已禁用 如果執行 BAM 門戶,則為“已啟用”。
啟用 XA 事務 已禁用 如果與基於 XA 的事務系統進行通訊(例如,使用 MQSeries 介面卡與 IBM WebSphere MQ 通訊),則為“已啟用”。

應用這些更改後,MSDTC 服務將重新啟動。
要訪問 MSDTC 安全配置選項,請按照下列步驟操作:

  1. 依次單擊 “開始”和 “執行”,再鍵入 dcomcnfg 以啟動 “元件服務”管理控制檯。
  2. 單擊以展開“元件服務” ,然後單擊以展開“計算機” 。
  3. 依次單擊以展開“我的電腦” 、“分散式事務協調器” ,右鍵單擊“本地 DTC” ,然後單擊“屬性” 。
  4. 單擊“本地 DTC 屬性” 對話方塊的“安全” 選項卡。

備註:根據所做的更改,可能需要重新啟動計算機以使更改生效。 如果在應用更改並重新啟動 MSDTC 服務後仍然遇到問題,請重新啟動在其中進行了更改的計算機,以確保更改生效。
如果啟用了“要求相互身份驗證” 或“要求對呼叫方進行驗證” 配置選項,則必須為客戶端計算機帳戶授予“從網路訪問此計算機” 使用者許可權。 如果沒有為客戶端計算機的計算機帳戶授予“從網路訪問此計算機” 使用者許可權,或者該帳戶包括在“拒絕從網路訪問這臺計算機” 使用者許可權中,則該客戶端與伺服器計算機之間的 DTC 通訊將失敗。
預設設定為向 Everyone 組授予“從網路訪問此計算機” 使用者許可權。 因此,除非修改了預設設定,否則無需更改此使用者許可權。 如果啟用了“不要求進行驗證” 配置選項,則“從網路訪問此計算機” 使用者許可權不會應用於客戶端計算機帳戶。

要更改授予了“從網路訪問此計算機”使用者許可權的使用者或組,請按以下步驟進行操作:

  1. 依次單擊 " 開始"、" 執行",鍵入 Gpedit.msc,然後單擊 "確定"。
  2. 展開“本地計算機策略”列表中的以下項:
    - 計算機配置
    - Windows 設定
    - 安全設定
    - 本地策略
  3. 單擊“使用者許可權分配”。
  4. 雙擊“從網路訪問此計算機” ,然後單擊“新增使用者或組” 。
  5. 單擊“物件型別” ,選擇“計算機” 並單擊“確定” 。
  6. 在“輸入物件名稱來選擇”區域中 新增計算機名稱或組名稱。
  7. 單擊“檢查名稱” 以驗證輸入的內容。
  8. 單擊“確定”兩次。
  9. 要更改“拒絕從網路訪問這臺計算機”使用者許可權中包括的使用者或組 ,請按以下步驟進行操作:
  10. 展開“本地計算機策略”列表中的以下項:
  • 計算機配置
  • Windows 設定
  • 安全設定
  • 本地策略
  1. 單擊“使用者許可權分配”。
  2. 雙擊“拒絕從網路訪問這臺計算機” ,然後進行單擊以選擇要從此使用者許可權中刪除的計算機名稱或組。
  3. 單擊“刪除” ,然後單擊“確定” 。

為 EnableAuthEpResolution 和 RestrictRemoteClients 選項設定相應的值

Windows 通過要求驗證對 RPC 介面的呼叫來提高安全性。 該功能可以通過 EnableAuthEpResolution 和 RestrictRemoteClients 登錄檔項來配置。 若要確保遠端計算機能夠訪問 RPC 介面,請按照下列步驟操作:

警告
對登錄檔編輯器的不當使用可能會引起問題,而必須重新安裝作業系統。 請慎用登錄檔編輯器,風險自負。 有關如何備份、還原和修改登錄檔的詳細資訊,請參閱 Microsoft 知識庫文章“Microsoft Windows 登錄檔說明”,網址為 Microsoft Windows 登錄檔說明。

  1. 依次單擊 啟動”和 執行”,鍵入 regedit.exe,然後單擊 確定” 以啟動登錄檔編輯器。
  2. 導航到 HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT
  3. 在 RPC 金鑰下,建立具有所示值的以下 DWORD 項。 如果 RPC 金鑰不存在,則必須予以建立。
    DWORD 項 預設值 建議的值
    EnableAuthEpResolution 0(禁用) 1
    RestrictRemoteClients 1(啟用) 0
  4. 關閉登錄檔編輯器。
  5. 重新啟動 MSDTC 服務。

備註:根據所做的更改,可能需要重新啟動計算機以使更改生效。 如果在應用更改並重新啟動 MSDTC 服務後仍然遇到問題,請重新啟動在其中進行了更改的計算機,以確保更改生效。

如果 Windows 防火牆正在執行,則為 MSDTC 服務新增一個例外

Windows 防火牆服務可能會阻止計算機之間的 MSDTC 通訊。 要確保未阻止計算機之間的 MSDTC 通訊,請在 Windows 防火牆服務正在執行時,將 msdtc.exe 新增到 Windows 防火牆例外列表中。

  1. 依次單擊 開始”和 “執行”,鍵入 firewall.cpl,然後單擊 確定” 以顯示 “Windows 防火牆” 對話方塊。
  2. 單擊“允許程式通過 Windows 防火牆” 以顯示“Windows 防火牆設定” 對話方塊。
  3. 單擊 “Windows 防火牆設定” 對話方塊的 “例外” 選項卡。
  4. 單擊“新增程式” 以顯示“新增程式”對話方塊 。
  5. 單擊 瀏覽” 並導航到 %system32%\msdtc.ex。
    啟動命令提示符,鍵入 echo %system32% 並按 Enter ,以確定此計算機上的 \System32 目錄的位置。
  6. 單擊以選擇 “msdtc.exe” ,然後單擊 “開啟”。
  7. 單擊 “更改作用域” ,指定將允許其進行 MSDTC 通訊的一組計算機,然後單擊 “確定”。
  8. 在 “新增程式” 對話方塊中單擊 “確定” ,並在 “Windows 防火牆設定” 對話方塊中單擊 “確定” 。
  9. 關閉 “Windows 防火牆” 對話方塊。
  10. 停止並重新啟動分散式事務處理協調器服務。
    - 啟動命令提示符,鍵入 net stop msdtc ,然後按 Enter鍵。
    - 在分散式事務處理協調器服務停止後,鍵入 net start msdtc ,然後按 Enter鍵。

使用 DTCTester 或 DTCPing 通過網路檢查 MSDTC 功能

如果在兩臺計算機中的一臺上安裝了 SQL Server,則可以使用 DTCTester 實用程式檢查這兩臺計算機之間是否支援事務處理。 DTCTester 實用程式使用 ODBC 檢查 SQL Server 資料庫是否支援事務處理。 有關 DTCTester 的詳細資訊,請參閱 如何使用 DTCTester 工具。

如果兩臺計算機中都沒有安裝 SQL Server,則可以使用 DTCPing 檢查這兩臺計算機之間是否支援事務處理。 DTCPing 是在兩臺計算機中都沒有安裝 SQL Server 的情況下替代 DTCTester 實用程式的良好工具,使用時必須既在客戶端計算機上執行,也在伺服器計算機上執行。 有關 DTCPing 的詳細資訊,請參閱 如何對 MS DTC 防火牆問題進行故障排除 和 配置 MICROSOFT 分散式事務處理協調器 (DTC) 通過防火牆進行操作。

重要:如果 DCTPing 返回警告:“警告:兩臺測試機器的 CID 值相同”,請按照 確保為 MSDTC 分配唯一的 CID 值 一節中的步驟在測試機器之間調整適當的 MSDTC 功能。

確保為 MSDTC 分配唯一的 CID 值

Windows 作業系統的 MSDTC 功能要求唯一的 CID 值以確保計算機間的 MSDTC 功能正常工作。 Windows 安裝的磁碟重複映像必須具有唯一的 CID 值,否則,MSDTC 功能將受到影響。 在使用虛擬硬碟將一個作業系統部署到虛擬機器上時,可能會發生這種情況。
要確定執行 Windows 作業系統的計算機的 MSDTC CID 值是否唯一,請檢查兩臺計算機上 HKEY_CLASSES_ROOT\CID 登錄檔項下的各條目值。 如果這些值對於每臺計算機並不是唯一的,請按照 如果其他疑難解答步驟不成功,請考慮重新安裝分散式事務協調器服務 一節中的步驟在其中一臺計算機上重新安裝 MSDTC,為該計算機生成唯一的 MSDTC CID 值並調整相應的 MSDTC 操作。

如果關閉了客戶端計算機與伺服器計算機之間的 MSDTC 連線,則出現錯誤“無法在指定事務協調器中登記新事務(0x8004d00a)”

在某些情況下,客戶端與伺服器之間的現有 MSDTC 連線可能會關閉,並且後續嘗試使用此連線將導致以下錯誤訊息: "新建事務無法登記到指定的事務協調器 (0x8004d00a) 有關詳細資訊,請參閱 嘗試在 MS DTC 中啟動事務時出現錯誤訊息: "無法在指定的事務處理協調器中登記新事務"。
如果其他疑難解答步驟不成功,請考慮重新安裝分散式事務協調器服務

如果嘗試解決 MSDTC 問題的其他操作不成功,請考慮解除安裝並重新安裝 MSDTC。 請按照下列步驟解除安裝並重新安裝 MSDTC:

1.以管理員身份開啟命令提示符。
a. 在命令提示符下,鍵入以下命令以解除安裝分散式事務處理協調器服務: msdtc -uninstall
b. 在命令提示符下,鍵入以下命令以安裝分散式事務處理協調器服務: msdtc –install

重要:重新安裝 MSDTC 可能會更改分散式事務處理協調器服務的預設行為。 重新安裝 MSDTC 後,請按照下列步驟以確保分散式事務處理協調器服務能夠正常工作:

  • 重新安裝 MSDTC 可能會將 MSDTC 安全配置選項重置回預設值。 驗證重新安裝 MSDTC 後 MSDTC 安全配置選項是否設定為相應的值。
    - 重新安裝 MSDTC 可能會更改分散式事務處理協調器服務的 “啟動型別” 值。 驗證重新安裝 MSDTC 後分布式事務協調器服務的“啟動型別” 值已設定為“自動” 。
    - 重新安裝 MSDTC 可能需要重啟計算機。 若要確保分散式事務處理協調器服務工作正常,可在重新安裝 MSDTC 後重啟計算機。