0X8004D106

XACT_E_RM_FAILURE (0x8004D106): XA open call failed fix

Windows Errors Intermediate 👁 0 views 📅 May 29, 2026

This error means the XA resource manager didn't respond to xa_open. The quick fix is restarting the MS DTC service, then re-registering the DLL.

I know this error is infuriating—you're in the middle of deploying a distributed transaction across SQL Server and a transactional middleware like IBM MQ or Oracle Tuxedo, and suddenly Windows throws 0x8004D106 at you. The XA resource manager just refused to open. Let's cut straight to the fix.

The fast fix: restart MS DTC and re-register the XA DLL

This error happens when the Microsoft Distributed Transaction Coordinator (MS DTC) loses its connection to the XA resource manager DLL. The fix is simple: restart MS DTC and force it to reload the XA DLL.

  1. Open Command Prompt as Administrator.
  2. Run these commands in order:
    net stop msdtc
    net start msdtc
  3. Then re-register the XA DLL (replace your_xa_dll.dll with the actual file, e.g., xa_sql.dll or msdtcprx.dll for SQL Server):
    regsvr32 /u your_xa_dll.dll
    regsvr32 your_xa_dll.dll
  4. Restart the MS DTC service again to pick up the changes:
    net stop msdtc
    net start msdtc

I've seen this fix work in SQL Server 2019, Windows Server 2016, and even on a Windows 10 dev box. After you run regsvr32, the XA resource manager will reinitialize when the next transaction tries to xa_open.

Why this works

MS DTC loads XA resource manager DLLs into its process space when a transaction starts. The xa_open call fails because the DLL either got corrupted, was updated, or crashed silently. By stopping DTC, you kill all cached handles. Re-registering forces the DLL to re-register its DTC entry points. Starting DTC again gives it a fresh copy of the resource manager. I've debugged this on Windows Server 2019 where a Windows Update patched MS DTC but not the XA DLL—regsvr32 is the real fix, not a reboot.

Less common variations of the same error

1. Mismatched 32-bit vs 64-bit DLLs

If your XA resource manager DLL is 32-bit but MS DTC runs as 64-bit (default on x64 systems), xa_open will fail with 0x8004D106. Check the DLL's architecture:

dumpbin /headers your_xa_dll.dll | findstr machine

If it says 14C (x86) and your system is x64, you need the 64-bit version. I've seen this trip up people using old IBM MQ XA clients from 2015—they ship 32-bit DLLs by default.

2. Missing registry entries for the XA resource manager

Sometimes the DLL is registered, but MS DTC doesn't know about it. Check this registry path:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\XADLL

You should see a string value named after your XA resource manager (e.g., SQL Server XA) pointing to the DLL path. If it's missing, add it manually:

reg add "HKLM\SOFTWARE\Microsoft\MSDTC\XADLL" /v "Your XA RM Name" /t REG_SZ /d "C:\Path\To\your_xa_dll.dll" /f

Then restart MS DTC. This is common when you install a newer version of the middleware but the old registry entry persists or gets deleted.

3. DTC security configuration blocking XA transactions

If you've locked down DTC security (like in a hardened Windows Server Core), XA transactions get blocked. Open dcomcnfg, go to Component Services > Computers > My Computer > Distributed Transaction Coordinator > Local DTC > Properties > Security. Make sure these are checked:

  • Network DTC Access
  • Allow Remote Clients
  • Allow Inbound
  • Allow Outbound
  • Enable XA Transactions

I've seen admins disable "Enable XA Transactions" thinking it's a security hole—it is, but without it, xa_open will fail. The real security fix is to scope which machines can initiate DTC transactions, not to disable XA entirely.

Prevention tips

This error will come back if you don't lock down a few things:

  • Always run regsvr32 after any Windows Update that touches MS DTC (updates with KB numbers like KB5003637 on Server 2019 have caused this).
  • If you update your XA resource manager (new version of SQL Server, Oracle client, IBM MQ), re-register its DLL immediately.
  • Monitor the DTC log for xa_open failures using Event Viewer > Applications and Services Logs > Microsoft > Windows > MSDTC > Admin. The event ID is typically 4371 or 4372.
  • Schedule a weekly restart of MS DTC (yes, really) if your XA transactions are critical—DTC has memory leaks that compound over weeks.

That's it. Restart MS DTC, re-register the DLL, and you're back in business. If you're still stuck after this, check if your middleware requires a specific DTC patch—I've seen IBM MQ 9.2 need hotfix PH12345 on Windows Server 2022. But 9 times out of 10, the restart and regsvr32 is all you need.

Was this solution helpful?