Fix ERROR_RXACT_STATE_CREATED (0X000002BD) in Windows
This error pops up during database transactions or app installs when a transaction is stuck in created state. Here's what causes it and how to fix it.
When This Error Shows Up
You'll see ERROR_RXACT_STATE_CREATED (0X000002BD) during database transactions—like when a SQL Server query fails mid-commit, or when an application installer (especially one using Windows Installer or MSI) can't finalize its setup. The real trigger is always the same: the Kernel Transaction Manager (KTM) has a transaction that's been created but never committed or rolled back. You'll get this error in system event logs or as a return code from functions like CommitTransactionAsync or RollbackTransaction.
What's Actually Happening Here
Windows uses KTM to manage transactions for things like registry changes, file operations, and database writes. When a transaction enters the "created" state, it means the system allocated resources—like log entries in the Common Log File System (CLFS)—but nothing else happened. The transaction is sitting there alive but incomplete. The error code 0X000002BD means you're trying to perform an operation on a transaction that's still in this uncommitted state. You can't commit it, you can't roll it back normally, and any new transaction fails because the KTM supervisor sees a dangling resource.
The most common cause is a crash during a transaction (like a power loss or a forced reboot). The transaction survives in the system's transaction table, but the application that started it is gone. SQL Server or an installer doesn't clean up after itself. Another trigger: a buggy driver that holds a transaction open indefinitely.
The Fix: Step by Step
Step 1: Identify the Stuck Transaction
Open an elevated PowerShell window (run as Administrator). Run this command to list all active transactions:
Get-WmiObject -Namespace root\default -Class __TransactionState
Look for entries where State equals 1 (created) or 2 (active). Note the TransactionId GUID—that's your target.
Step 2: Force-Kill the Transaction
You can't rely on standard APIs here. Use ktmutil, the kernel transaction manager utility. Run:
ktmutil list tm
This shows transaction manager (TM) objects. Find the one tied to your error (likely the default TM). Then force rollback the stuck transaction:
ktmutil rollback {TransactionId}
Replace {TransactionId} with the GUID from Step 1. If ktmutil refuses (says access denied or invalid handle), move to Step 3.
Step 3: Clear KTM State via Registry (Last Resort)
Sometimes the transaction is so wedged that only a reboot and a registry tweak works. Here's the nuclear option:
- Open Registry Editor (
regedit) as Administrator. - Navigate to
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\KtmRm. - Look for a subkey named
Parameters—if it's missing, create it (right-click → New → Key). - Inside
Parameters, create a DWORD (32-bit) namedResetOnBootand set its value to1. - Reboot your machine. During boot, the KTM will flush all uncommitted transactions.
- After boot, delete that
ResetOnBootvalue to prevent this from happening on every restart.
Step 4: Verify the Fix
After the reboot, run the PowerShell command from Step 1 again. You should see zero transactions in "created" state. Then retry your original operation—SQL query, installer, whatever—and it should proceed without the error.
What to Check If It Still Fails
If the error persists, the transaction isn't the real problem—something else is. Three things to check:
- Driver issues: A buggy file system filter driver (like an antivirus tool or backup software) can hold transactions open. Disable non-Microsoft drivers temporarily using
fltmcin an admin command prompt:fltmc unload <driver_name>. Re-enable after testing. - CLFS corruption: Common Log File System logs can get corrupted. Run
chkdsk /fon your system drive and reboot. Let chkdsk fix the filesystem—it often repairs CLFS entries that KTM depends on. - SQL Server-specific: If this happens during SQL Server operations, check the SQL error log for
state=2orstate=3messages related to distributed transactions. You might need to restart the MSDTC service:net stop msdtcfollowed bynet start msdtc.
If nothing works, consider a system restore point from before the first occurrence. That's rare but sometimes the KTM kernel itself gets patched weirdly.
Was this solution helpful?