Что означает код HRESULT 0x8004D082 (XACT_E_RECOVERYINPROGRESS)?

 
Предыдущий Следующий
XACT_E_CLERKEXISTS XACT_E_TRANSACTIONCLOSED

XACT_E_RECOVERYINPROGRESS

Интерпретация HRESULT

XACT_E_RECOVERYINPROGRESS (0x8004D082) — код ошибки из области MSDTC / COM+ transactions. Короткий ориентир по имени: идёт восстановление. Для диагностики важнее определить первый API и состояние объекта в момент возврата, чем переводить символическое имя как общее сообщение.

Исходное условие в техническом описании сформулировано так: A TXF or CRM recovery operation is already in progress.. Эту формулировку следует сопоставлять с фактическим параметром, handle, файлом или state transition в trace.

Контракт операции

Проверяйте состояние самой транзакции отдельно от причины, которая привела её к этому состоянию. Для распределённого commit важны UOW, фаза протокола, голоса участников, ownership операции и терминальный outcome.

Для этого кода особенно полезно различать два признака из исходной документации: A TXF or CRM recovery operation is already in progress. и Automation interprets delayed completion as failure and launches a duplicate recovery worker.. Они задают более узкую границу, чем название facility.

Наблюдаемые признаки

  • идентификатор UOW и первый API, вернувший код
  • фаза prepare/commit/abort/recovery и текущий владелец перехода
  • голоса и состояние resource managers, включая первый отказ
  • тайм-аут, DTC trace и внешние побочные эффекты вне транзакции
  • Сопоставьте trace с исходным признаком: Record service restarts, failovers, and administrative actions that could have launched parallel passes.
  • Сопоставьте trace с исходным признаком: Service startup and an administrative repair command overlap on the same log or clerk set.
  • Сопоставьте trace с исходным признаком: A cluster failover launches CRM recovery on the new owner. A health script times out and launches the same repair command, which receives this HRESULT. The duplicate command is removed, and monitoring waits for the original pass to resolve its in-doubt transaction.

Разбор по шагам

  1. Проверьте именно границу «идёт восстановление» и зафиксируйте объект, аргумент или состояние, которое её подтверждает.
  2. Сверьте наблюдаемое состояние с отдельным исходным признаком: Use supported monitoring interfaces to inspect clerks and records without taking ownership..

Повтор и восстановление

Исправляйте конкретную фазу или ownership. Не повторяйте commit/abort на старом объекте вслепую и не создавайте новую бизнес-попытку, пока не понятен исход предыдущей транзакции.

Регрессионная проверка должна отдельно контролировать условие Confirm whether the active recovery worker is making progress or waiting for a known participant.. Положительный тест обязан проходить после узкого исправления, а отрицательный — по-прежнему воспроизводить ожидаемый отказ на заведомо неверном состоянии.

Технические ссылки


Нужно найти другой код? Найти другой код состояния или ошибки.