What does HRESULT 0x8004D00B (XACT_E_NOISORETAIN) mean?

 
Previous Next
XACT_E_NOENLIST XACT_E_NORESOURCE

XACT_E_NOISORETAIN

XACT_E_NOISORETAIN is the failure HRESULT 0x8004D00B (signed decimal -2147168245, unsigned decimal 2147799051). Its severity bit is 1, facility is 4 (FACILITY_ITF), and the facility-specific code field is 0xD00B.

Retaining commit or abort cannot preserve the requested isolation semantics

This HRESULT rejects requested isolation-retention semantics across a retaining commit or abort boundary. Microsoft also documents it when the isolation flag input is not zero for contracts that require zero. The failure concerns the next transaction boundary, not the validity of every isolation level.

AllStat records the Windows message as: “The requested semantics of retention of isolation across retaining commit and abort boundaries cannot be supported by this transaction implementation, or isoFlags was not equal to zero.” This text should be interpreted at the transaction stage described below rather than as a generic COM failure.

The contract boundary to identify

A retaining completion ends one unit of work while automatically continuing with another transaction on the same session. The implementation must decide what isolation state carries across that boundary. If it cannot honor the requested retain behavior, it must fail rather than silently weaken concurrency guarantees.

Likely causes to separate

  • The caller requested retaining commit or abort on a provider that supports only nonretaining completion.
  • The supplied isoFlags value is nonzero even though the method requires zero.
  • A session abstraction assumes isolation options survive into the next nested or retained transaction.
  • Promotion to another transaction manager changes the retention capabilities available to the session.

Evidence worth preserving

  • Preserve the requested isolation level, isoFlags, retaining flags, and current transaction nesting level.
  • Record whether the result arose while starting a local transaction or completing one with retain semantics.
  • Capture open rowsets and session state that the caller expected to survive the boundary.
  • Document the concurrency guarantee required by the business operation before changing isolation behavior.

Diagnostic sequence

  • Verify that isoFlags is exactly zero where the Microsoft contract requires it.
  • Test a nonretaining commit or abort and explicitly start the next transaction with its desired isolation level.
  • Check provider documentation for nested and retaining transaction support rather than inferring it from successful ordinary commits.
  • Revalidate application invariants if the proposed fix changes session lifetime or the moment locks are released.

Retry and recovery

Prefer a nonretaining boundary followed by an explicit new transaction whose isolation is set and checked independently. Retrying unchanged retain flags will not help. Do not simply lower isolation to suppress the HRESULT because that may introduce nonrepeatable reads or other correctness defects.

What this HRESULT does not establish

This result does not say the requested isolation level itself is unsupported; that is XACT_E_ISOLATIONLEVEL. It also does not prove that the current transaction has committed or aborted.

Difference from nearby transaction results

XACT_E_CANTRETAIN concerns inability to retain the transaction generally. XACT_E_NOISORETAIN is specifically about retaining isolation semantics or invalid isolation flags.

Practical scenario

An OLE DB component commits with retain enabled and expects the next unit of work to inherit the same isolation state. The provider rejects that contract. The component changes to nonretaining commit, starts a fresh transaction, and verifies the isolation level before issuing new commands.

Guidance for software and telemetry

Log retention and isolation as separate fields. Code reviews should treat a retaining transaction as a new state transition with explicit guarantees, not as a convenient shorthand for two independent calls.

Official Microsoft references


Looking for a different code? Search another status or error code.