| Previous | Next |
| hrRecordTooBig | hrInvalidDatabase |
hrTooManyOpenDatabases
Interpretation in ESE terms
For hrTooManyOpenDatabases, read this result as a boundary in the ESE state machine, not as a generic Windows failure. The decisive boundary is a session or instance exceeded the number of simultaneously open databases.
This result is the legacy Directory Service backup/restore HRESULT form of the ESE condition normally written as JET_errTooManyOpenDatabases. Preserve the original value 0xC8000403 when a wrapper also exposes a signed JET_ERR.
The key comparison for this HRESULT is this: hrTooManyAttachedDatabases concerns attachments; an attached database need not be open in a session. The first useful observation is to inventory JET_DBID ownership and match every successful open with its close path. This evidence identifies the exhausted pool so a leak, long transaction, concurrency spike, and hard capacity limit are not confused.
The ESE objects in play
| Diagnostic layer | bounded engine, process, and storage resources |
|---|---|
| Typical API surface | instance system parameters, sessions, cursors, temporary tables, database attachment, and file growth |
| Code-specific boundary | a session or instance exceeded the number of simultaneously open databases |
| First corrective direction | close idle database handles and bound request-scoped opens |
A retry without closing owners or adding capacity often repeats the same failure and increases load. Resource codes should be tied to the exact exhausted pool rather than treated as generic low memory.
Comparison with adjacent failures
For this HRESULT, hrTooManyAttachedDatabases concerns attachments; an attached database need not be open in a session. The following neighboring results belong to the same broad subsystem but mark different boundaries:
hrTooManyAttachedDatabases | the instance reached its attached-database limit |
|---|---|
hrTooManyOpenIndexes | the engine exhausted index descriptor blocks through excessive open/index-selection activity |
hrTooManyActiveUsers | the engine reached its active-user or concurrent-session workload limit |
Keep this result in the incident record; replacing it with “database error” hides whether the next step is handle renewal, schema correction, lock reconciliation, or file preservation.
What to capture before retrying
A useful trace for this HRESULT should preserve the first failing operation and the state of the bounded engine, process, and storage resources.
- Code-specific observation: inventory JET_DBID ownership and match every successful open with its close path.
- relevant JET_param values and process or system capacity at first failure; associate it with it rather than with a later generic exception.
- the oldest transaction, longest-held cursor, or file growth operation retaining the resource; associate it with it rather than with a later generic exception.
- live resource counts grouped by session and request owner; associate it with it rather than with a later generic exception.
Log lengths, hashes, IDs, flags, and redacted samples where appropriate.
Actions that can hide or worsen the problem
- Do not raise limits before checking ownership and release paths.
- Do not create a retry storm while the exhausted resource remains unavailable.
Operational response
- Freeze the failing request context and record it,
0xC8000403, the Jet API name, and the current instance/session ownership. - Verify the code-specific precondition: inventory JET_DBID ownership and match every successful open with its close path.
- Apply the narrow correction: close idle database handles and bound request-scoped opens.
- Before retrying it, reconcile resource counts, owner cleanup, and capacity after the correction.
- Repeat the smallest read-only or disposable test that exercises the corrected precondition; then confirm both the returned HRESULT and the resulting database, cursor, or file state.
Technical references
- JET_param enumeration — used to verify the ESE object model, API ordering, or error family relevant to it.
- Transactions and save points
- ESE files and storage paths
- ESE source repository
- Microsoft: JET_ERR enumeration
Looking for a different code? Search another status or error code.