Troubleshooting Guide: Error 3933 — Cannot Promote Transaction Due to Active Save Point
Why This Error Happens
This error occurs because SQL Server’s MS DTC (Distributed Transaction Coordinator) cannot promote a local transaction to a distributed one while a SAVE TRANSACTION save point is still active within that transaction scope. Save points are inherently incompatible with distributed transaction promotion because the transaction manager cannot guarantee rollback consistency across multiple resource managers when a partial rollback point exists. This typically surfaces in applications using System.Transactions.TransactionScope or ORM frameworks (like Entity Framework) that implicitly open save points, then later attempt a cross-database or linked-server call that forces promotion.
Step-by-Step Resolution Guide
Step 1: Identify the Code Path Creating the Save Point
- Review application code or stored procedures for explicit
SAVE TRANSACTION savepoint_namestatements. - Check ORM configurations (e.g., Entity Framework Core, NHibernate) — some versions auto-create save points when nested
TransactionScopeblocks are used. - Use SQL Server Profiler or Extended Events (
sqlserver.save_transaction_completed) to trace where the save point is issued relative to the distributed call.
Step 2: Restructure the Transaction Scope
- Remove or avoid nested
TransactionScopeblocks that trigger implicit save points before a linked-server or cross-database query executes. - In .NET code, ensure
TransactionScopeOption.RequiresNewis used only when necessary, and move any cross-server/distributed calls to occur before any save point is created, not after. - If using raw T-SQL, reorder statements so
SAVE TRANSACTIONis issued only after all distributed operations (e.g., calls to linked servers viaOPENQUERYor four-part names) have completed.
Step 3: Force Early Promotion Where Required
- If the distributed call must happen regardless of save points, explicitly force promotion early using
BEGIN DISTRIBUTED TRANSACTIONat the start of the batch, before anySAVE TRANSACTIONis issued. - Validate that MS DTC is properly configured and running on both Windows Server 2025 and the client via
Component Services(dcomcnfg.exe→ Distributed Transaction Coordinator → Local DTC → Security tab → enable “Network DTC Access” and “Allow Inbound/Outbound”). - Restart the MSDTC service after configuration changes:
net stop msdtc && net start msdtc
Step 4: Patch and Update SQL Server
- Confirm SQL Server 2025 is updated to the latest Cumulative Update, as earlier builds had known issues with save point handling in promoted transactions.
- Check via:
SELECT @@VERSION;and compare against Microsoft’s latest CU release notes.
Alternative or Verification Steps
- Verify the fix by re-running the transaction workflow while capturing an Extended Events session filtered on
error_reportedfor Error 3933 — confirm no occurrences remain. - As an alternative, if save points are functionally required, isolate the distributed operation into a separate, independent transaction scope (using
TransactionScopeOption.Suppressor a new connection) so it is not affected by the save point in the parent transaction.