This article was previously published under Q191168
Note This error message may be associated with error number
-2147168246 (8004d00a).
Important This article contains information about editing the registry.
Before you edit the registry, make sure you understand how to restore it if a
problem occurs. For information about how to do this, view the "Restoring the
Registry" Help topic in Regedit.exe or the "Restoring a Registry Key" Help
topic in Regedt32.exe.
If you are a Small Business customer, find additional troubleshooting and learning resources at the Support for Small Business site.
What does the message "Failed to Enlist on calling object's
transaction" mean?
The ODBC Driver Manager reports this error when a
transactional Microsoft Transaction Server component attempts to open a
database connection and the Driver Manager cannot enlist the database
connection in the current transaction. The ODBC Driver Manager enlists the
database connection in the current transaction by calling the ODBC driver's
SQLSetConnectionAttr (SQL_ATTR_ENLIST_IN_DTC) procedure. The ODBC Driver
Manager displays the "Failed to Enlist" message if the call to the
SQLSetConnectionAttr procedure fails.
For additional information, click the
article number below to view the article in the Microsoft Knowledge Base:
If this error occurs when your transactional Microsoft
Transaction Server component is accessing a Microsoft SQL Server database,
check the following:
Make sure that the Microsoft Distributed Transaction
Coordinator(MS DTC) Service is started.
Make certain that the MS DTC
Service is started on the system on which your Microsoft Transaction Server
components are deployed. If your Microsoft Transaction Server application is
accessing a Microsoft SQL Server database on a remote system, make sure that
the MS DTC Service is started on that system also. This is frequently the cause
of the "Failed to Enlist Error."
Perform the following steps to
check the status of the MS DTC Service:
On the Start menu, select Settings, and then click Control Panel.
Select the Services icon.
Scroll through the Services list and confirm that the
Status of the MS DTC service is Started. If the MS DTC Status is blank (not
started), you can start it by selecting MSDTC and then clicking Start.
Check Your Network Configuration.
When a
transactional Microsoft Transaction Server component on one system accesses a
SQL Server database on another system, MS DTC propagates the DTC transaction
from the first or primary system to the secondary system. Transaction
propagation can only occur if the DTC process on the primary system can
communicate with the DTC process on the secondary system. The DTC processes
establish remote procedure call (RPC) connections in both directions, which
means that a network configuration problem on either system can prevent the DTC
processes from successfully communicating with one another. This causes ODBC to
return a "Failed to Enlist" error.
Often the following MS DTC event
is recorded in the Windows NT Application event log:
Primary: Session Bind Failed. Primary Timed Out while waiting for the
secondary to Bind.
This error indicates that DTC on the Microsoft Transaction Server
computer was able to bind to DTC on the SQL Server, but DTC on the SQL Server
could not perform the reverse bind to the Microsoft Transaction Server
computer.
If your network configuration is incorrect, every attempt
to connect to the remote SQL Server database results in a "failed to enlist"
error. If you consistently get a "failed to enlist" error even after Microsoft
DTC has been started on both systems, the most likely cause of the failure is a
network configuration error.
If this occurs, check your network
configuration using Pingtest.bat as follows:
Use a text editor (such as Notepad) to create a file
named Pingtest.bat. Copy the following batch file commands into it.
echo off
REM Usage pingtest OtherMachineName
REM Must use a machine name and NOT an IP address
ping -n 1 %computername%
ping -n 1 %1
ipconfig /all
echo on
The batch file uses %computername% to display the local IP address. It
then displays the IP address of the remote computer you specify in the command
line when you run the batch file. When you invoke the batch file, you must
specify the name of the remote computer and not its IP address. Using the
computer name forces ping to resolve the machine name exactly the same as MS
DTC does when it binds to the remote MS DTC computer.
Run Pingtest.bat on the Microsoft Transaction Server
computer to determine if you can ping the SQL Server computer by name. Capture
the output from the batch file in a text file. For example, if Microsoft
Transaction Server is running on computer A and SQL Server is running on
computer B, use the following command:
Pingtest B > AResults.txt
Run Pingtest.bat on the SQL Server computer to
determine if you can ping the Microsoft Transaction Server computer by name.
Capture the output from the batch file in a text file. For example, if
Microsoft Transaction Server is running on computer A and SQL Server is running
on computer B, use the following command:
Pingtest A > BResults.txt
Examine the contents of the two text files to ensure
that the two computers can ping one another successfully.
If you use
Hosts or Lmhosts files for TCP/IP name resolution, check these files very
carefully to make sure that they contain valid computer name to IP address
mappings. To do this, check the Hosts and the Lmhosts files in the
Winnt40\System32\Drivers\Etc directory on both The Microsoft Transaction Server
computer and the SQL Server computer. Frequently, the file on one system will
be correct, while that on the other system is incorrect.
Configure the SQL Server to use TCP/IP rather than Named
Pipes.
If you only see the "failed to enlist" error intermittently,
then using Named Pipes rather than TCP/IP may be the cause of the problem.
Using Named Pipes can result in intermittent "Failed to Enlist" errors.
Microsoft strongly recommends that you configure the SQL Server to use TCP/IP
rather than Named Pipes. Using Named Pipes can result in Intermittent "Failed
to Enlist" errors.
On the Start menu, select Programs, select Microsoft SQL Server 6.5, and then
click SQL Client Configuration Utility.
Click the Net Library tab.
In the Default Network list, select TCP/IP
Sockets.
Click Done.
Check Transaction Timeout.
The component's
transaction may have stopped due to transaction time-out before the database
enlistment completed. You can increase the transaction time-out value through
the Microsoft Transaction Server Explorer. Use the following steps to increase
the time-out value:
Start the Microsoft Transaction Server Explorer and
select Computers.
Right-click the computer where the transaction was
initiated and click Properties.
Click the Options tab and specify a longer time-out value.
This is unlikely to be the problem unless your transactions
take an unusually long time. However, it may be helpful to temporarily increase
the time-out value to eliminate this as a potential source of trouble.
When Using Oracle
If this error occurs when your transactional Microsoft
Transaction Server component is accessing an Oracle database, check the
following:
Make sure that the MS DTC Service is started.
Make certain that the Microsoft DTC Service is "Started" on the system on which
your Microsoft Transaction Server components are deployed. Use the
following steps to check its status:
On the Start menu, select Settings, and then click Control Panel.
Select the Services icon.
Scroll through the Services list and confirm that the
Status of the MS DTC service is Started. If the MS DTC Status is blank (not
started), you can start it by selecting MSDTC and then clicking Start.
Install the latest Oracle Client software on the Microsoft
Transaction Server computer.
Make sure that the latest Oracle 7.3 or
Oracle 8 Client software patch release is installed on the system that contains
the Microsoft Transaction Server components. Note that it is common to upgrade
the Oracle software on the system that contains the Oracle database but fail to
upgrade the Oracle software on the system that contains the Microsoft
Transaction Server components. You must upgrade the Oracle software on the
client system.
You can obtain the latest Oracle patches Windows NT
from the Oracle FTP site. Go to:
and select "server", "wgt-tech", "server", and "windowsNT"
Install the latest Oracle Server software on your Oracle Database
Server System.
If the Microsoft Transaction Server application
accesses an Oracle database on a Windows NT or UNIX system, make sure that the
latest Oracle patch is installed on that system.
You can obtain the
latest Oracle patches for Windows NT from the Oracle FTP site. Go to:
and select "server", "wgt-tech", "server", and "windowsNT"
Use the Microsoft Oracle ODBC Driver.
Make
certain that Microsoft Transaction Server is using the Microsoft Oracle ODBC
driver. No other Oracle ODBC driver supports Microsoft Transaction Server
transactions.
You must install one of the following Microsoft Oracle
ODBC drivers if you wish to use Microsoft Transaction Server transactions from
an Intel x86 platform.
Collapse this tableExpand this table
MS Oracle ODBC Driver
Version
Number
Release Vehicles
2.0 updated
2.73.7283.03
MDAC 1.5b
MDAC 1.5c Windows NT 4.0 Option pack
2.0 updated
2.73.7356
ODBC 3.5 SDK
2.5
2.573.2927
Visual Studio 6.0
Data Access SDK 2.0 MDAC 2.0
You must install the Microsoft Oracle ODBC 2.5 driver
version 2.573.2927, if you want to use Microsoft Transaction Server
transactions from a Compaq Alpha platform. Earlier versions of the Microsoft
Oracle ODBC driver did not support the Compaq Alpha platform.
You can
obtain the Microsoft Oracle ODBC Driver 2.5 from:
If you wish to access an Oracle
database, we suggest that you use the Microsoft Oracle ODBC Driver 2.0 or later
driver even if you do not require transaction support. This new driver offers
better performance than the Microsoft Oracle ODBC 1.0 driver it replaced The
Oracle 1.0 driver serialized all activity at the driver level; requests were
single-threaded through the driver. The Microsoft Oracle 2.0 and later drivers
serialize all activities at the connection level. This allows different
database connections to be used in parallel.
Make sure that Oracle XA support is enabled.
Check to be sure that Oracle XA transaction support has been enabled. For more
information, refer to the section titled "Enabling Oracle XA Transaction
Support" in the "Using Oracle Databases with Microsoft Transaction Server"
document.
If you are using Oracle 7.3, make sure that V$XATRANS$
exists. This view should have been created when the XA library was installed.
If this view does not exist, your Oracle system administrator must create it by
running the Oracle-supplied script named "XAVIEW.SQL". This file can be found
in C:\ORANT\RDBMS73\ADMIN. This SQL script must be executed as the Oracle user
"SYS".
If you are using Oracle8, this view should exist. You should
not need to create it.
For both Oracle 7.3 and Oracle8, the Oracle system
administrator must grant SELECT access to the public on the
DBA_PENDING_TRANSACTIONS view.
Grant Select on V$XATRANS$ to public.
In the Oracle Instance Manager, click Advanced Mode on the View menu and select "Initialization Parameters" in the left-pane. In
the right-pane, select "Advanced Tuning" and increase the
"distributed_transactions" parameter to allow more concurrent MTS transactions
to update the database at a single time.
Consult your Oracle Server documentation for more
information about configuring Oracle XA transaction support.
Make sure that Oracle numeric characters are configured
correctly.
Warning Using Registry Editor incorrectly can cause serious problems that
may require you to reinstall your operating system. Microsoft cannot guarantee
that problems resulting from the incorrect use of Registry Editor can be
solved. Use Registry Editor at your own risk.
For information about
how to edit the registry, view the "Changing Keys And Values" Help topic in
Registry Editor (Regedit.exe) or the "Add and Delete Information in the
Registry" and "Edit Registry Data" Help topics in Regedt32.exe. Note that you
should back up the registry before you edit it.
Customers who have
systems located outside the United States may need to configure Oracle numeric
character support. In the Windows NT registry, locate the following registry
key:
HKEY_LOCAL_MACHINE\SOFTWARE\Oracle
and add this entry:
"NLS_NUMERIC_CHARACTERS"=".,"
NOTE: The characters inside the quoted string above are a period and a
comma, in that order.
Make sure that Oracle is configured with adequate
connections.
If you want to create more than a few dozen connections
to an Oracle database, ensure that Oracle is configured to support additional
database connections. For more information, refer to the section titled
"Configuring Oracle to Support a Large Number of Connections" in the document
"Using Oracle Databases with Microsoft Transaction Server" .
Make sure that you have a connection to the Oracle database
if you use Oracle Integrated Security.
If you use Oracle Integrated
Security, make certain that MS DTC is running under a login ID and password
that is authorized to connect to the Oracle database. For more information,
refer to the section titled "Configuring Integrated Security" in the document
"Using Oracle Databases with Microsoft Transaction Server".
Run the TestOracleXAConfig program.
Run the
TestOracleXAConfig program to make sure that you can successfully connect to
the Oracle database without using Microsoft Transaction Server. For more
information, refer to the section titled "Testing Installation and
Configuration of MTS Support for Oracle" in the "Using an Oracle Database with
Microsoft Transaction Server" document.
Run the Sample Bank program.
Run the Sample Bank
program to make sure that you can successfully connect to the Oracle database
from a Microsoft Transaction Server program. For more information, refer to the
section titled "Validating Oracle Installation and Configuration Using the
Sample Bank Application" in the document "Using Oracle Databases with Microsoft
Transaction Server".
Enable Oracle Tracing.
Oracle is capable of
generating trace files that record the information sent between the Oracle
client and server. These trace files can be extremely helpful in diagnosing
problems. You can make sure Oracle tracing as follows:
Make that the Mtxoci.dll installed on your MTS system
is version 1998.08.762.0 or later. Version 1998.08.762.0 was released with the
NT4 Service Pack 4 release. It was the first version of the Mtxoci.dll that
allows you to enable Oracle tracing and control the location of Oracle trace
files.
Use the Explorer to find and delete any existing Oracle
trace files on your system. These files have names ending with the suffix
".trc". By deleting any obsolete trace files, you make it easier to find any
newly created ones.
You may choose a different disk drive and directory for the trace
files if you want.
Use the Explorer to create the Oracle trace file
directory. In our example, create the directory "OraTrace" on the "C"
drive.
Stop the MTS package that is accessing the Oracle
database. By stopping the package you ensure that all existing Oracle database
connections are closed and that new Oracle database connections are opened when
the MTS component is next invoked. These newly opened Oracle database
connections have Oracle tracing enabled.
Invoke the Microsoft Transaction Server component that
is opening the Oracle database.
Examine the newly created Oracle trace
files.
Enable MTS/Oracle Error Tracing
MTS is capable of
capturing additional information regarding Oracle errors in the Windows
Application Event log. You can capture this information as follows:
Stop the MTS package that is accessing the Oracle
database. By stopping the package you ensure that the Mtxoci.dll performs
tracing when it is restarted.
Invoke the Microsoft Transaction Server component that
is opening the Oracle database.
Use the Windows Event Viewer to examine the Application
event log. Look for events generated by MTXOCI. You may see events like the
following:
String message: sqlld2 call failed with
error 0x849.
The error value is displayed in octal. You can use the
Calculator program to convert the error value into decimal. In this example,
"0x849" translates into the Oracle error value 2121.
Check Transaction time-out.
Consider whether the
Microsoft Transaction Server component's transaction may have ended before the
database enlistment completed. This may occur if the transaction time-out
expires before the Oracle database enlistment completes.
You can
increase the transaction time-out value through the Microsoft Transaction
Server Explorer. To do this, use these steps:
Run Microsoft Transaction Server Explorer and select
Computers.
Right-click the computer where the transaction was
initiated and select Properties on the shortcut menu.
Select the Options tab and specify a longer time-out value.
This is unlikely to be the problem unless your transactions
last for more than one minute. However, it may be helpful to temporarily
increase the time-out value to eliminate this as a potential source of trouble.
What to Do If You Still Get This Error
If you still get this error after doing everything described
here, you should report the error to the Microsoft Product Support
organization. Please supply the following information with your problem report.
Describe the problem. Does the "Failed to Enlist" error
occur every time you attempt to use Microsoft Transaction Server transactions
or is the failure intermittent? If the failure is intermittent, how often does
it occur?
Describe your application and system configuration.
Describe the system the Microsoft Transaction Server
application components are installed on. If you are using an Oracle database,
provide the version of both the Oracle client software and the Microsoft Oracle
ODBC driver are you using.
Are you using a Microsoft SQL database or an Oracle
database? Is the database on the same computer as the Microsoft Transaction
Server application components or is it on a separate computer? If you are using
an Oracle database, what kind of system is the Oracle database installed on and
what version of Oracle software is installed?
What network transport are you using: TCP/IP, Named
Pipes, IPX/SPX, and so forth? What name service are you using: WINS, DNS, Host
files, and so on?
Does the TestOracleXAConfig program run?
If you
are using an Oracle database, try to run the TestOracleXAConfig program. If
this program fails, the problem lies with Oracle. Please report the problem to
Oracle Customer Support.
Does the Sample Bank program run?
Try to run the
Sample Bank program with Microsoft SQL Server. If you are using an Oracle
database, does the Sample Bank application run with Oracle? If not, what error
are you experiencing?
What errors are reported in the Oracle trace
files?
If you are using an Oracle database, what information is
present in the Oracle trace files? To capture this information, first find and
deleting all existing Oracle trace files on the system. These files have names
ending with the .trc extension. After you delete all existing trace files, run
the failing Microsoft Transaction Server component and provide Microsoft with
the contents of the Oracle trace files.
What errors are reported in the Windows NT event
log?
Check the Windows NT event log and report all DTC events that
were recorded at or near the time of the failure.
Are you using Oracle Integrated Security?
Report
whether you are using Oracle Integrated Security.
What is the transaction time-out value?
Please
tell Microsoft what transaction time-out value is configured in Microsoft
Transaction Server.
This article was written about products for which Microsoft no longer offers support. Therefore, this article is offered "as is" and will no longer be updated.