How to fix Error 3927 on Windows Server 2025 / Windows 11

Troubleshooting Guide: SQL Server Error 3927 (DTC Enlistment Failure)

Why This Error Happens

This error occurs when a session attempts to enlist an already active local transaction into a Distributed Transaction Coordinator (MSDTC) transaction, which violates the transaction isolation boundary SQL Server enforces. It is commonly triggered by application code that opens a local BEGIN TRANSACTION before calling EnlistTransaction() or using TransactionScope in .NET, causing a conflict between the local and distributed transaction managers. In Windows Server 2025 and Windows 11 environments, this is frequently exacerbated by misconfigured MSDTC security settings or outdated connection pooling behavior in the application driver.

Step-by-Step Resolution Guide

Step 1: Verify Application Transaction Logic

  • Review the application code for instances where a local transaction (SqlTransaction or BEGIN TRAN) is started on a connection before a TransactionScope or distributed transaction is initiated.
  • Ensure the connection object is not reused across different transaction contexts without being properly closed or reset.
  • Refactor code so that distributed transaction enlistment happens immediately upon connection opening, prior to any local transaction commands.

Step 2: Configure MSDTC Security Settings

  • Open the Component Services console by running comexp.msc from the Run dialog (Win + R).
  • Navigate to Component Services > Computers > My Computer > Distributed Transaction Coordinator > Local DTC.
  • Right-click Local DTC, select Properties, and go to the Security tab.
  • Ensure “Network DTC Access,” “Allow Inbound,” “Allow Outbound,” and “Enable XA Transactions” are checked.
  • Restart the Distributed Transaction Coordinator service via services.msc to apply changes.

Step 3: Check SQL Server Connection Pooling Settings

  • In the application’s connection string, verify that Enlist=false is not incorrectly set if distributed transactions are required, or vice versa if local pooling is causing conflicts.
  • If using ODBC or OLE DB drivers, update them to the latest version compatible with SQL Server 2025, as older drivers often mishandle the enlistment sequence.
  • Clear the connection pool manually using SqlConnection.ClearAllPools() in a test environment to rule out stale pooled connections holding a local transaction state.

Step 4: Validate Firewall and Port Configuration

  • Confirm that the Windows Firewall on Windows Server 2025 allows MSDTC traffic (TCP Port 135 and dynamically assigned RPC ports).
  • Navigate to Windows Defender Firewall > Advanced Settings > Inbound Rules and ensure “Distributed Transaction Coordinator” rules are enabled for Domain, Private, and Public profiles.

Alternative or Verification Steps

  • To verify the fix, run the application workload again and check the SQL Server Error Log or Event Viewer (Windows Logs > Application) to confirm Error 3927 no longer appears during transaction enlistment.
  • If the issue persists despite code and configuration changes, as a temporary workaround, isolate the distributed transaction logic into a separate connection object that has never executed a local BEGIN TRAN command, effectively bypassing the state conflict.