MSDTC transaction to a SQL cluster on a different domain

https://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
    • SQL group
      • Network Name: VSQL
      • SQL Server instance resources (disks, SQL, etc.)
      • other resources like IP Address
    • Cluster group
      • 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.

 

Additional information: