| Предыдущий | Следующий |
| FSRM_E_MODULE_TIMEOUT | XACT_E_CANTRETAIN |
XACT_E_ALREADYOTHERSINGLEPHASE
Только один участник может получить делегированные полномочия однофазной фиксации
XACT_E_ALREADYOTHERSINGLEPHASE означает, что в транзакции уже назначен диспетчер ресурсов для оптимизации однофазной фиксации. Эта оптимизация доступна только тогда, когда координатор может делегировать окончательный результат одному подходящему участнику первой фазы; разрешение двум независимым ресурсам принимать решение разрушило бы атомарное согласие.
Проверьте порядок зачисления и флаги каждого диспетчера ресурсов. Компонент, который лишь предпочитает однофазное завершение, всё равно должен принимать обычные уведомления prepare и второй фазы, если оптимизацию уже получил другой постоянный участник. Не устраняйте ошибку удалением второго зачисления, если оно защищает реальные постоянные данные; оба ресурса должны участвовать в обычной двухфазной фиксации.
Данные для определения конкурирующих зачислений
- Идентификаторы диспетчеров ресурсов и порядок зачисления.
- Участник, запросивший или принявший однофазную фиксацию.
- Был ли неожиданный постоянный ресурс повышен до участия в транзакции.
- Результаты callback prepare и single-phase обоих диспетчеров ресурсов.
Ссылки
- Microsoft MS-DTCO: правила однофазной фиксации
- Microsoft: контракт зачисления диспетчера ресурсов
- The Open Group: модель распределённых транзакций XA
Нужно найти другой код? Найти другой код состояния или ошибки.