When you run a distributed transaction against a linked server in Microsoft SQL Server 2000 on a computer that is running Microsoft Windows Server 2003 Enterprise Edition, you may receive the following error message:
The operation could not be performed because the OLE DB provider 'SQLOLEDB' was unable to begin a distributed transaction. OLE/DB provider returned message: New transaction cannot enlist in the specified transaction coordinator.
For information about how to edit the registry, view the "Change 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. Microsoft recommends that you back up the registry before you edit it.
To work around this problem, turn off the RPC security on your Windows Server 2003 computers. RPC security is a new DTC feature in Windows Server 2003. When you disable RPC security, the DTC authentication security level for RPC calls goes back to a level that is available in Microsoft Windows 2000 Server. To do this, follow these steps to set the DWORD value for the TurnOffRpcSecurity registry value to 1:
- Start Registry Editor (Regedt32.exe).
- Locate the following key in the registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC
- On the Edit menu, click Add Value, and then add the following registry value:
Value name Data type Value TurnOffRpcSecurity REG_DWORD 1
- Quit Registry Editor.
Steps to reproduce the behavior
- Make sure that both computers are running Windows Server 2003.
- Install SQL Server 2000 with Service Pack 3 (SP3) on both the computers.
- Make sure that MSDTC is started on both the computers.
- On the first computer, start the SQL Query Analyzer (Isqlw.exe) utility, and then connect to the local SQL Server.
- Add the second computer as the linked server. To do so, run the following Transact-SQL statement in SQL Query Analyzer:Note Replace remote_server with the name of the second computer.
EXEC sp_addlinkedserver 'remote_server', N'SQL SERVER'
- Run the following Transact-SQL statement in SQL Query Analyzer: You may receive the error message that is mentioned in the "Symptoms" section of this article.
SET xact_abort ON
BEGIN DISTRIBUTED TRANSACTION
SELECT * FROM remote_server.pubs.dbo.authors
Article ID: 827805 - Last Review: Mar 29, 2017 - Revision: 2