Suppose we have a windows server 2008 cluster and a clustered SQL instance. We have a dedicated MSDTC resource (DTC1), and another DTC resource (DTC2) in SQL group as well . No matter DTCPing test to the DTC1 or DTC2, or WINRM test to DTC1 or DTC2, we always succeed.
While we use DTCTester.exe to simulate a distributed transaction with Clustered SQL resource involved, we always get failed due to an exception saying “ MSDTC on server ‘###’ is unavailable”.
Possible Cause and Resolution
In terms of our case, we find the culprit is that the Clustered SQL resource and the DTC resource is not mapped correctly.
To verify if the SQL resource and DTC resource are mapped correctly and list all the mappings, we can run this command in the command window:
- Msdtc -tmmappingview *
The mapped SQL resource and DTC resource should look as below in the register:
We should be able to get a result like below screenshot if the mapping is correct:
Otherwise, we will get a result as below:
If you find the issue is really caused by incorrect mapping, you can try below command to map the SQL resource and DTC resource:
- Msdtc –tmMappingSet –name <Descriptive Mapping Name> –service <service being mapped with DTC resource> –ClusterResourceName <DTC resource name>
For example, we can map a Clustered SQL instance named :SQL01 with a DTC resource named DTC01, and the descriptive mapping name is “MappingDemo” with below command:
- Msdtc –tmMappingSet –name MappingDemo –service SQL01 –ClusterResourceName DTC01
- How to Configure Multiple Instances of Distributed Transaction Coordinator (DTC) on a Windows Server Failover Cluster 2008
2. MSDTC communication is not working on a Windows 2008 and R2 Cluster using Incoming Caller Authentication
3. How to enable diagnostic tracing for MS DTC on a Windows Vista-based computer
4. Map Clustered MS DTC Resources