SQL: MSDTC: The partner transaction manager has disabled its support for remote/network transactions

4-mar-2019

MSDTC to jedna z usług, o której… lepiej nie słyszeć, bo jeśli o niej nie słyszysz, to znaczy, że wszystko działa, a jak już ktoś coś o niej powie, to często zaczyna się szukanie igły w stogu siana. Na szczęście konfiguracja usługi nie jest aż tak bardzo kłopotliwa.

Ta opowieść zaczyna się od kontaktu ze strony administratora, który stwierdził, że jego aplikacja nie łączy się do MS Distributed Transaction Coordinator-a.

Oczywiście należy zacząć od sprawdzenia czy usługa MSDTC w ogóle działa! Jeśli akcja działaby się na pojedyńczym serwerze wystarczyłoby przejrzeć usługi. W przypadku clustra, MSDTC jest zwykle konfigurowane jako usługa roli clustra:

Get-ClusterResource | where {$_.ResourceType -eq 'Distributed Transaction Coordinator'}

Name                                    State  OwnerGroup   ResourceType
----                                    -----  ----------   ------------
New Distributed Transaction Coordinator Online SERVER_00123 Distributed Transaction Coordinator

Status online świadczy o tym, że usługa działa.

Kolejny pomysł to oczywiście pozamykane porty. Połączenie z MSDTC zaczyna się na porcie 135, a potem jest losowany port z zakresu 1024 do 65525. Po stronie serwera zazwyczaj istnieją już odpowiednie reguły w definicji firewall, wystarczy je włączyć.

To polecenie wyświetla reguły, które mają coś wspólnego z „distributed” lub „DTC”:

Get-NetFirewallRule | where { $_.name -like '*distributed*' -or $_.name -like '*DTC*' } | 
    select name,profile,enabled,direction, displayname

Name        : MSDTC-In-TCP
Profile     : Any
Enabled     : False
Direction   : Inbound
DisplayName : Distributed Transaction Coordinator (TCP-In)

Name        : MSDTC-Out-TCP
Profile     : Any
Enabled     : False
Direction   : Outbound
DisplayName : Distributed Transaction Coordinator (TCP-Out)

Name        : MSDTC-KTMRM-In-TCP
Profile     : Any
Enabled     : False
Direction   : Inbound
DisplayName : Distributed Transaction Coordinator (RPC)

Name        : MSDTC-RPCSS-In-TCP
Profile     : Any
Enabled     : False
Direction   : Inbound
DisplayName : Distributed Transaction Coordinator (RPC-EPMAP)

Jak widać, tutaj dostęp przez sieć do MSDTS jest wyłączony, więc wypada go włączyć:

Get-NetFirewallRule | where { $_.name -like '*distributed*' -or $_.name -like '*DTC*' } |
    Enable-NetFirewallRule

Oczywiście każdą z tych czynności można też wykonywać z interfejsu graficznego – jak się woli 🙂

Na tym etapie komunikat o błędzie zmienił się z „nieokreślonego niedziałania” na

The partner transaction manager has disabled its support for remote/network transactions Exception from HRESULT: 0x8004D025

Taki komunikat wskazuje na to, że połaczenie się udaje, ale jest odrzucane przez MSDTC. Narzędzie  do konfiguracji

 

Kolejna rzecz to konfiguracja MSDTC. Konfigurację wykonuje się programem „Component Services”. Odpowiedni program znajduje się w menu:

Jeżeli problem występuje na clustrze, to możliwości konfiguracji jest troche więcej, bo konfigurować można niezależnie MSDTC lokalne oraz clustrowane. W moim przypadku należało się przyjrzeć wersji clustrowej. Wystarczy rozwinąć drzewko i wybrać właściwości:

W tym przypadku, wystarczyło sprawdzić, czy jest włączony zdalny dostęp do MSDTC. Tutaj niezaznaczone opcje do zmiany to [x] Allow Remote Clients, [x] Allow inbound, [x] Allow Outbound:

Po takich zmianach MSDTC należy zrestartować:

Get-ClusterResource | where {$_.ResourceType -eq 'Distributed Transaction Coordinator’} | Stop-ClusterResource

Get-ClusterResource | where {$_.ResourceType -eq 'Distributed Transaction Coordinator’} | Start-ClusterResource

Od tej pory można już na spokojnie przyglądać się rosnącym statykom, które są do znalezienia w programie Component Services w pozycji Transaction Statistics:

Tu jeszcze 2 linki pozwalające na diagnozowanie problemów z MSDTC:

https://msdn.microsoft.com/en-us/library/aa561924.aspx

https://blogs.msdn.microsoft.com/distributedservices/2009/02/06/the-hidden-tool-msdtc-transaction-tracing/

O MSDTC pisałem też:

MSDTC – The Transaction Manager is not available

MSDTC – zagadkowa usługa

 

Komentarze są wyłączone

Autor: Rafał Kraik