| Предыдущий | Следующий |
| XACT_E_CANTRETAIN | XACT_E_COMMITPREVENTED |
XACT_E_COMMITFAILED
HRESULT сообщает результат, а журналы участников раскрывают причину
XACT_E_COMMITFAILED означает, что MSDTC не смог завершить фиксацию и разрешил транзакцию как отменённую. Внешний код не определяет, какой участник проголосовал против, превысил тайм-аут, потерял устойчивое состояние или завершился сбоем при подготовке, поэтому наиболее полезны связанные сведения по идентификатору транзакции у координатора и каждого подключённого диспетчера ресурсов.
Не повторяйте бизнес-операцию, пока не понятны её идемпотентность и внешние побочные эффекты. Сначала установите, началась ли первая фаза, какие участники достигли Prepared и выполнялось ли нетранзакционное действие вне распределённой единицы работы. Результат транзакции — отмена, но повтор уровня приложения всё равно может продублировать работу систем, не участвовавших в транзакции.
Временная шкала сбоя фиксации
- Идентификатор распределённой транзакции или единицы работы.
- Голос подготовки и время каждого устойчивого участника.
- Трассировка или событие MSDTC с первым решением об отмене.
- Нетранзакционные вызовы, выполненные до запроса фиксации.
Ссылки
- Microsoft MS-DTCO: голосование первой фазы
- Microsoft MS-DTCO: распространение окончательного результата
- PostgreSQL: подготовленные транзакции в системе двухфазной фиксации
Нужно найти другой код? Найти другой код состояния или ошибки.