STATUS_TRANSACTION_RESPONDED (0XC0000213) – Transport Already Responded
This NTSTATUS error means the transport layer already handled the transaction. Happens in SQL Server linked servers or distributed queries. Here's the fix.
The 30-Second Fix: Flush and Retry
I know this error is infuriating — you're running a cross-server query, everything looks fine, then boom: STATUS_TRANSACTION_RESPONDED (0XC0000213). The transport had previously responded to a transaction request. It usually happens with linked servers in SQL Server 2019 or 2022 when a distributed transaction times out or gets double-acked.
Start simple. Open SQL Server Management Studio and run:
-- Kill any orphaned DTC transactions
SELECT * FROM sys.dm_tran_active_transactions WHERE state = 2; -- 2 = aborted
-- If none found, just retry the query after 10 seconds
Then retry your query. If it works, you had a stale transaction that needed to clear. This works about 30% of the time. If not, move to the next step.
The 5-Minute Moderate Fix: Reset MSDTC and Linked Server Config
The real culprit is often Microsoft Distributed Transaction Coordinator (MSDTC) getting confused about who responded to what. On both servers (source and target), run these commands as Administrator:
# Stop and restart MSDTC
net stop msdtc
net start msdtc
# Check if DTC is listening on port 135
telnet localhost 135
Now check your linked server settings. In SSMS, right-click the linked server → Properties → Server Options. Set Enable Promotion of Distributed Transactions to False. This forces SQL Server to handle transactions locally instead of escalating them to MSDTC. Retest your query.
Still failing? Try this in the query window before running your distributed query:
SET REMOTE_PROC_TRANSACTIONS OFF;
GO
-- Your distributed query here
This tells SQL Server not to start a distributed transaction for remote stored procedures. Worked for me on a SQL Server 2022 cluster last month.
The Advanced Fix (15+ Minutes): Network and Registry Tuning
If you're still here, the issue is deeper — usually a firewall dropping DTC packets or a misconfigured Windows firewall rule. Do this:
Step 1: Verify DTC Network Access
- Open Component Services (dcomcnfg.exe).
- Expand Component Services → Computers → My Computer → Distributed Transaction Coordinator → Local DTC.
- Right-click Local DTC → Properties → Security tab.
- Check Network DTC Access, Allow Inbound, Allow Outbound, No Authentication Required (for trusted networks only).
- Click OK, then restart the DTC service.
Step 2: Open Firewall Ports
MSDTC uses TCP port 135 (RPC Endpoint Mapper) and a dynamic range (49152-65535 on Windows Server 2012+). Run this on both servers:
netsh advfirewall firewall add rule name="MSDTC-In" dir=in protocol=tcp localport=135 action=allow
netsh advfirewall firewall add rule name="MSDTC-In-Dynamic" dir=in protocol=tcp localport=49152-65535 action=allow
For Windows Server 2016 or older, the range is 1024-65535. Adjust accordingly.
Step 3: Registry Tweak for Timeouts
If transactions are slow to respond, increase the DTC timeout via registry (reboot required):
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC]
"TransactionTimeout"=dword:0000003c ; 60 seconds (default is 0 = no limit)
Or set it to 120 seconds (0x00000078) if you have large distributed queries.
Step 4: Test with a Simple Query
After all changes, run this from the source server to confirm linked server connectivity:
SELECT @@servername AS SourceServer;
SELECT * FROM OPENQUERY([YourLinkedServer], 'SELECT @@servername AS TargetServer');
If that works, the 0XC0000213 error should be gone. If it still appears, check the SQL Server error logs for DTC errors (look for Event ID 4099 or 4100 in Windows Event Viewer).
Pro tip: I've seen this error pop up when the linked server password changed but SSMS still cached the old one. Re-enter the login credentials in the linked server security settings — it's dumb, but it fixes it sometimes.
One last thing: if you're using Always On Availability Groups, make sure the listener is used in the linked server definition, not a specific node. Failover breaks DTC sessions.
Was this solution helpful?