| Предыдущий | Следующий |
| XACT_E_LU_TX_DISABLED | XACT_E_CLERKEXISTS |
XACT_E_CLERKNOTFOUND
Диагностический смысл
XACT_E_CLERKNOTFOUND (0x8004D080) — код ошибки из области MSDTC / COM+ transactions. Короткий ориентир по имени: recovery clerk не найден. Для диагностики важнее определить первый API и состояние объекта в момент возврата, чем переводить символическое имя как общее сообщение.
Исходное условие в техническом описании сформулировано так: A requested TXF or CRM recovery clerk could not be located.
. Эту формулировку следует сопоставлять с фактическим параметром, handle, файлом или state transition в trace.
Объект и состояние
Проверяйте состояние самой транзакции отдельно от причины, которая привела её к этому состоянию. Для распределённого commit важны UOW, фаза протокола, голоса участников, ownership операции и терминальный outcome.
Для этого кода особенно полезно различать два признака из исходной документации: A requested TXF or CRM recovery clerk could not be located.
и Avoid retaining monitor objects or clerk identifiers across COM+ application restarts.
. Они задают более узкую границу, чем название facility.
Сведения для воспроизведения
- идентификатор UOW и первый API, вернувший код
- фаза prepare/commit/abort/recovery и текущий владелец перехода
- голоса и состояние resource managers, включая первый отказ
- тайм-аут, DTC trace и внешние побочные эффекты вне транзакции
- Сопоставьте trace с исходным признаком:
COM+ Compensating Resource Manager documentation uses clerks to hold durable log records for a transaction and exposes monitoring interfaces for clerk state. A concrete diagnosis still requires the returning interface, clerk identifier, transaction UOW, and product component; the constant name is not enough to claim a particular method.
- Сопоставьте trace с исходным признаком:
Serialize enumeration and lookup if the API contract does not guarantee a stable snapshot.
- Сопоставьте trace с исходным признаком:
XACT_E_CLERKEXISTS represents the opposite identity conflict. XACT_E_RECOVERYINPROGRESS indicates that recovery activity, rather than absence alone, blocks the requested operation.
Последовательность действий
- Проверьте именно границу «recovery clerk не найден» и зафиксируйте объект, аргумент или состояние, которое её подтверждает.
- Сверьте наблюдаемое состояние с отдельным исходным признаком:
The application expects CRM infrastructure on a code path that did not register or durably create a clerk.
.
Что считать исправлением
Исправляйте конкретную фазу или ownership. Не повторяйте commit/abort на старом объекте вслепую и не создавайте новую бизнес-попытку, пока не понятен исход предыдущей транзакции.
Регрессионная проверка должна отдельно контролировать условие Refresh the clerk inventory and reacquire the object from the current recovery context. Do not fabricate a clerk or delete logs to bypass the lookup. If the transaction is incomplete, preserve durable records until the owning component determines the correct recovery action.
. Положительный тест обязан проходить после узкого исправления, а отрицательный — по-прежнему воспроизводить ожидаемый отказ на заведомо неверном состоянии.
Технические ссылки
- Microsoft: COM transaction error codes
- Microsoft: HRESULT values in MS-ERREF
- Microsoft: COM+ Compensating Resource Manager
- Microsoft: COM+ interfaces in comsvcs.h
- Microsoft: ICrmLogControl
Нужно найти другой код? Найти другой код состояния или ошибки.
