簡體   English   中英

如何在 SQL Server 上啟用 MSDTC?

[英]How do I enable MSDTC on SQL Server?

這甚至是一個有效的問題嗎? 我有一個使用 MSTDC 的 .NET Windows 應用程序,它拋出異常:

System.Transactions.TransactionManagerCommunicationException:分布式事務管理器 (MSDTC) 的網絡訪問已被禁用。 請使用組件服務管理工具在 MSDTC 的安全配置中為網絡訪問啟用 DTC ---> System.Runtime.InteropServices.COMException (0x8004D024):事務管理器已禁用對遠程/網絡事務的支持。 (來自 HRESULT 的異常:0x8004D024)在 System.Transactions.Oletx.IDtcProxyShimFactory.ReceiveTransaction(UInt32 propgationTokenSize, Byte[] propgationToken, IntPtr managedIdentifier, Guid& transactionIdentifier, OletxTransactionIsolationLevel&isolationLevel&translationLevel&IShimShimShim)....

我按照Kbalertz 指南在安裝了該應用程序的 PC 上啟用了 MSDTC ,但仍然出現錯誤。

我想知道這是不是數據庫問題? 如果是這樣,我該如何解決?

用於Windows Server 2008 r2和Windows Server 2012 R2

  1. 單擊“ 開始” ,單擊“運行” ,鍵入dcomcnfg ,然后單擊“ 確定”以打開“ 組件服務”

  2. 在控制台樹中,單擊以展開“ 組件服務” ,單擊以展開“ 計算機” ,單擊以展開“ 我的電腦” ,單擊以展開“ 分布式事務處理協調器” ,然后單擊“ 本地DTC”

  3. 右鍵單擊“ 本地DTC” ,然后單擊“ 屬性”以顯示“ 本地DTC屬性”對話框。

  4. 單擊“ 安全”選項卡。

  5. 選中“網絡DTC訪問”復選框。

  6. 最后選中“允許入站”“允許出站”復選框。

  7. 單擊應用確定

  8. 將彈出有關重新啟動服務的消息。

  9. 單擊“ 確定” ,這就是全部。

參考: https//msdn.microsoft.com/en-us/library/dd327979.aspx

注意:有時本地計算機或服務器上的網絡防火牆可能會中斷您的連接,因此請確保為C:\\Windows\\System32\\msdtc.exe創建“允許入站”“允許出站”連接的規則

你甚至需要MSDTC嗎? 您遇到的升級通常是由在單個TransactionScope中創建多個連接引起的。

如果確實需要它,則需要按照錯誤消息中的說明啟用它。 在XP上:

  • 轉到“管理工具” - >“組件服務”
  • 展開組件服務 - >計算機 - >
  • 右鍵單擊 - >屬性 - > MSDTC選項卡
  • 點擊安全配置按鈕

我發現最好的調試方法是使用名為DTCPing的微軟工具

  1. 將文件復制到服務器(DB)和客戶端(應用程序服務器/客戶端PC)
    • 在服務器和客戶端啟動它
    • 在服務器上:填寫客戶端netbios計算機名稱並嘗試設置DTC連接
    • 重啟兩個應用程序
    • 在客戶端:填寫服務器netbios計算機名稱並嘗試設置DTC連接

我在舊的公司網絡中遇到了問題,我有一些提示:

  • 如果您收到錯誤消息“Gethostbyname failed”,則表示計算機無法通過其netbios名稱找到其他計算機。 例如,服務器可以解析並ping客戶端,但這可以在DNS級別上運行。 不在netbios查找級別。 使用WINS服務器或更改LMHOST(臟)將解決此問題。
  • 如果出現“Acces Denied”錯誤,則安全設置不匹配。 您應該比較msdtc的安全選項卡,並使服務器和客戶端匹配。 另一件需要注意的是RestrictRemoteClients值。 根據您的操作系統版本以及更重要的Service Pack,此值可能不同。
  • 其他連接問題:
    • 服務器和客戶端之間的防火牆必須允許通過端口135進行通信。更重要的是,可以從兩個站點啟動連接(我的公司中的防火牆人員遇到很多問題因為他們假設只有服務器會打開連接到那個港口)
    • 該協議返回一個隨機端口以連接到實際的事務通信。 防火牆的人不喜歡這樣,他們喜歡將端口限制在一定范圍內。 您可以使用密鑰將RPC動態端口生成限制到某個范圍,如如何配置RPC動態端口分配以使用防火牆中所述

根據我的經驗,如果DTCPing能夠設置從客戶端發起並從服務器啟動的DTC連接,那么您的交易不再是問題。

還可以在此處查看如何從控制面板的services.msc打開MSDTC。

在觸發器所在的服務器上,您需要打開MSDTC服務。 您可以通過單擊開始>設置>控制面板>管理工具>服務來實現此目的。 找到名為“分布式事務處理協調器”的服務並右鍵單擊(在其上並選擇)>啟動。

必須在服務器和客戶端兩個系統上啟用MSDTC。
此外,請確保阻止RPC的系統之間沒有防火牆。
DTCTest是一個很好的小應用程序,可以幫助您解決任何其他問題。

@擔,

我是否不需要啟用msdtc才能使事務有效?

僅分布式事務 - 涉及多個連接的事務。 確保您只在交易中打開一個連接並且不會升級 - 性能也會好得多。

MSDTC 可以使用 MsDtc PowerShell 模塊進行配置,例如:

# Import the module
Import-Module -Name MsDtc

# Set the DTC config
$dtcNetworkSetting = @{
    DtcName                           = 'Local'
    AuthenticationLevel               = 'NoAuth'
    InboundTransactionsEnabled        = $true
    OutboundTransactionsEnabled       = $true
    RemoteClientAccessEnabled         = $true
    RemoteAdministrationAccessEnabled = $true
    XATransactionsEnabled             = $false
    LUTransactionsEnabled             = $true
}
Set-DtcNetworkSetting @dtcNetworkSetting

# Restart the MsDtc service
Get-Service -Name MsDtc | Restart-Service

在支持分布式事務的每台機器上運行(即運行 MSDTC 服務的機器)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM