The information in this article applies to:
BUG #: 18764 (SQLBUG_65) SYMPTOMS
Enlisting multiple connections in the same Distributed Transaction Coordinator (DTC) transaction context can lead to SQL Server connections (SPIDs) not responding.
CAUSEWhen enlisting multiple connections (SPIDs) in the same DTC transaction context, the SQL Server must consider the SPIDs as bound. The following is from the SQL Server 7.0 Books Online, in the "Using Bound Connections" topic: Bound connections allow two or more connections (SPIDs) to share the same transaction and locks. Bound connections can work on the same data without lock conflicts.SQL Server experiences a synchronization problem keeping the bound connections synchronized with the DTC transaction. During enlistment, the SPIDs can infinitely block each other as they attempt to maintain synchronization and propagate with the designated Distributed Transaction Coordinator. The client attempting to enlist in the DTC transaction will encounter a wait in SQLSetConnectOption. RESOLUTIONA supported fix that corrects this problem is now available from Microsoft, but
it has not been fully regression tested and should be applied only to systems
experiencing this specific problem. If you are not severely affected by this
specific problem, Microsoft recommends that you wait for the next SQL Server service pack
that contains this fix. http://www.microsoft.com/support/supportnet/overview/overview.aspThe English version of this fix should have the following file attributes or later: NOTE: Due to file dependencies, the most recent hotfix or feature that contains the above files may also contain additional files.WORKAROUNDTo work around this problem, limit the number of connections (SPIDs) bound to a single DTC transaction to a single connection. STATUSMicrosoft has confirmed this to be a problem in SQL Server version 6.5. MORE INFORMATION
When establishing a connection to the SQL Server, it is possible to enlist (join) the connection in an active DTC transaction. This is commonly done from the Microsoft Transaction Server (MTS) environment to enforce the transactional property settings of the package.
NOTE: Similar behavior can be obtained with the DB-Library API or an OLE DB provider.
For more information on the DTC transaction code, see DtcGetTransactionManager and the ITransactionDispenser BeginTransaction method. For more information on the MTS transaction scopes, refer to the MTS documentation and the GetContextObject method. The opposite attempt to create two DTC transactions and attempt to enlist the same ODBC connection in both is not standard protocol. The client should abort the first transaction before attempting the second enlistment. The attempt to enlist the same connection in the second DTC scope will lead to a connection block in the SQLSetConnectOption. The DTC monitor will show two active transactions but will never change from the active state. Additional query words: hang hangs hung sync synch dtc transaction xact
Keywords : |
Last Reviewed: November 2, 1999 © 2000 Microsoft Corporation. All rights reserved. Terms of Use. |