http://support.microsoft.com/default.aspx/kb/827805/en-us explains how to test a distributed transaction scenario between 2 SQL Servers without the need to install DTCPing.
Here is a scenario.
BTS1 server initiates a distributed transaction on VSQL, a SQL instance hosted on a Windows Cluster having the following characteristics:
- SQLN1 is the first node of the cluster
- SQLN2 is the second node
The cluster has at least the following two cluster groups
- Network Name: VSQL
- SQL Server instance resources (disks, SQL, etc.)
- other resources like IP Address
- Network Name: VCLUST
- MSDTC resource
- other resources like IP Address, quorum disk etc.
BTS1 and the cluster are on two different domains. Among other things, they don't share the same DNS. For instance, BTS1 is BTS1.domain1.net and VSQL is VSQL.domain2.net
In order to be able to ping VSQL, you can add an entry in BTS1, in its %windir%\system32\drivers\etc\hosts. file like
<ip address> VSQL
If you only do that, you might end up with an error like
The transaction has already been implicitly or explicitly committed or aborted
In order to have the distributed transaction working, you need the following to be true (this can be done with the hosts. file):
- BTS1 can ping VSQL
- SQLN1 can ping BTS1
- SQLN2 can ping BTS1
- BTS1 can ping VCLUST
NB: names must be the netbios names.
- http://support.microsoft.com/default.aspx/kb/899191/en-us (New functionality in the Distributed Transaction Coordinator service in Windows Server 2003 Service Pack 1 and in Windows XP Service Pack 2)
- http://support.microsoft.com/default.aspx/kb/827805/en-us (MSDTC fails to mutually authenticate when computers do not run in the same domain)