Verify Communication Between Two or More Computers
When a transactional COM component on one system accesses a SQL Server database on another system, MS DTC propagates the MS DTC transaction from the first or "primary" system to the secondary system. Transaction propagation can only occur if the MS DTC process on the primary system can communicate with the MS DTC process on the secondary system. Actually, the MS DTC processes establish RPC connections in both directions, so a network configuration problem on either system can prevent the MS DTC processes from successfully communicating with one another. This will cause a "Failed to enlist error" to be returned by ODBC.
If a communication error occurs, the following MS DTC event may be recorded in the Windows 2000 Application event log.
MS DTC is unable to communicate with MS DTC on a remote system. MS DTC on the primary system established an RPC binding with MS DTC on the secondary system. However, the secondary system did not create the reverse RPC binding to the primary MS DTC system before the timeout period expired. Please ensure that there is network connectivity between the two systems.
This error indicates that MS DTC on your system was able to bind to MS DTC on your SQL Server system, but MS DTC on the SQL Server system could not perform the reverse bind to MS DTC on your system.
If your network configuration is incorrect, every attempt to connect to the remote SQL Server database will result in a "Failed to enlist" error. If you consistently get a "Failed to enlist" error even after MS DTC has been started on both systems, the most likely cause of the failure is a network configuration error.
To verify network communication between two computers
- Use Notepad to create a file called Pingtest.bat, and then paste the following batch file commands in it.
echo offREM Usage pingtest OtherMachineNameREM Must use a machine name and NOT an IP addressping -n 1 %computername%ping -n 1 %1ipconfig /allecho on
The batch file uses %computername% to display the local IP address. It then displays the IP address of the remote machine you specify in the command line when executing the batch file. When you invoke the batch file, you must specify the name of the remote machine and not its IP address. Using the machine name forces Ping to resolve the machine name exactly as MS DTC does when it binds to the remote MS DTC machine.
- Run Pingtest.bat on your primary system to determine if you can "ping" your secondary system by name. Capture the output from the batch file in a text file. For example, if your primary system is machine "A" and your secondary system is machine "B," do the following:
Pingtest B > AResults.txt
- Run Pingtest.bat on your secondary system to determine if you can "ping" your primary system by name. Capture the output from the batch file in a text file. For example, if your primary system is machine "A" and your secondary system is machine "B," do the following:
Pingtest A > BResults.txt
- Examine the two resulting text files to ensure that the two machines can ping one another successfully.
If you use Hosts or Lmhosts files for TCP/IP name resolution, check these files very carefully to ensure that they contain valid computer name-to-IP address mappings. To do this, check the "Hosts" and the "Lmhosts" files in the %windir%>system32\drivers\etc\ directory on both the Component Services system and the SQL Server system. Frequently, the file on one system will be correct, while that on the other system is incorrect.
MS DTC runs under the identity of the System account by default. The MS DTC on one computer can communicate with the MS DTC on another computer only if the Guest accounts on both computers are enabled. If you disable the Guest account on either machine or in the Windows 2000 domain to which they belong, you must configure MS DTC to run under some other user name that can communicate with the remote computer.