Новая транзакция не может быть включена в указанный координатор транзакций при попытке запустить транзакцию в MS DTC

Эта статья поможет устранить проблему при запуске транзакции в координаторе распределенных транзакций Майкрософт (MS DTC).

Исходная версия продукта: Windows
Оригинальный номер базы знаний: 922430

Важно!

В статье содержатся сведения об изменении реестра. Перед внесением любых изменений в реестр, создайте его резервную копию. и изучить процедуру его восстановления на случай возникновения проблемы. Дополнительные сведения о резервном копировании, восстановлении и изменении реестра см. в разделе Сведения о реестре Windows для опытных пользователей.

Симптомы

Рассмотрим следующий сценарий.

  • У вас есть клиентский компьютер, который взаимодействует с серверным компьютером.
  • Ms DTC устанавливается на обоих компьютерах.
  • Выполняются одно или несколько из следующих условий:
    • Перезагрузите любой из компьютеров.
    • Вы перезапустите MS DTC на любом из компьютеров.
    • Компьютеры находятся в разных доменах.

В этом сценарии при попытке запустить транзакцию в MS DTC появляется следующее сообщение об ошибке:

Новая транзакция не может быть включена в указанный координатор транзакций (0x8004d00a)

Кроме того, первая транзакция завершается сбоем. Последующие транзакции выполняются на некоторое время. Однако последующие транзакции могут снова завершиться ошибкой. Если последующие транзакции завершаются сбоем, появляется следующее сообщение об ошибке:

Новая транзакция не может быть включена в указанный координатор транзакций (0x8004d00e)

Причина

Эта проблема может возникнуть при закрытии подключения MS DTC между клиентским компьютером и серверным компьютером. Например, время ожидания простоя, время ожидания удаленного вызова процедуры (RPC) или брандмауэр может закрыть подключение MS DTC между клиентским компьютером и серверным компьютером. При выполнении нового запроса транзакции клиентский компьютер должен повторно установить подключение MS DTC с серверным компьютером.

Когда клиентский компьютер пытается восстановить подключение MS DTC с серверным компьютером, клиентский компьютер отправляет пакет. Затем клиентский компьютер ожидает ответа пакета привязки от сервера. По умолчанию клиентский компьютер останавливает транзакцию, если клиентский компьютер не получает ответ от серверного компьютера в течение 4 секунд. Ответ с серверного компьютера может быть отложен из-за проблем с задержкой сети или задержкой проверки подлинности. Когда ответ с серверного компьютера наконец достигает клиентского компьютера, последующие транзакции будут успешно выполнены.

Первая транзакция может занять много времени, и последующий запрос на выполнение распределенной транзакции может быть немедленно завершен. Эта проблема может возникнуть, если на стороне клиента MS DTC возникла проблема при обмене данными с сервером Kerberos (KDC). Как правило, эта проблема возникает, если клиент и сервер находятся в разных доменах с брандмауэром между ними.

Например, эта проблема возникает в следующем сценарии:

  • Веб-служба находится в сети периметра в домене. Веб-служба должна использовать транзакции с сервером базы данных в другом домене в интрасети.
  • Брандмауэр находится между сетью периметра и интрасетью. Чрезмерная задержка первой транзакции возникает из-за блокировки порта 88 (Kerberos) протокола UDP.
  • Повторная попытка и интервал повтора для запроса Kerberos равны чрезмерной задержке (более 100 секунд).

Разрешение

Предупреждение

При неправильном изменении реестра с использованием редактора реестра или другого способа могут случиться серьезные проблемы. Из-за них может потребоваться переустановка операционной системы. Компания Microsoft не может гарантировать, что эти проблемы могут быть решены. Вносите изменения в реестр на ваш страх и риск.

Чтобы убедиться, что у вас возникла проблема, описанная в этой статье, убедитесь, что файл журнала трассировки транзакций MS DTC содержит следующие данные:

; eventid=TRANSACTION_PROPOGATION_FAILED_CONNECTION_DOWN_FROM_REMOTE_TM ; tx_guid=f11cd9c9-7b8a-41e3-a904-4840123bacf7 ;" Не удалось пропустить транзакцию на дочерний узел "Имя_компьютера", так как подключение с удаленным диспетчером транзакций не работает"

Примечание.

В этих данных слово propogation является опечаткой для распространения слов. Слово propogate — это орфографическая ошибка для слова распространения.

Если файл журнала трассировки транзакций MS DTC содержит эти данные, выполните следующие действия:

  1. Нажмите кнопку Пуск, выберите пункт Выполнить, введите команду regedit и нажмите кнопку ОК.

  2. Найдите следующий подраздел реестра:
    HKEY_LOCAL_MACHINE\Software\Microsoft\MSDTC

  3. Щелкните правой кнопкой мыши MSDTC, наведите указатель мыши на пункт Создать, а затем выберите значение DWORD.

  4. Введите CmMaxNumberBindRetries и нажмите клавишу ВВОД.

  5. Щелкните правой кнопкой мыши CmMaxNumberBindRetries и выберите команду Изменить.

  6. Выберите Десятичный.

  7. В поле Значение введите60.

    Это значение увеличивает время ожидания клиентским компьютером ответа пакета привязки от серверного компьютера. Это значение в два раза превышает количество секунд до остановки транзакции клиентским компьютером, если клиентский компьютер не получит ответ пакета привязки. Например, значение 60 равно 30 секундам. Значение 60 — это только рекомендуемое значение. Может потребоваться дополнительное тестирование конфигурации.

  8. Нажмите ОК.

  9. Перезапустите MS DTC.

Примечание.

В сценарии медленного реагирования убедитесь, что порты, необходимые для проверки подлинности Kerberos (UDP 88 и TCP 88), открыты, когда брандмауэр участвует в сети периметра. Порты UDP 389 и TCP 389 (как для протокола LDAP) для поиска центра распространения ключей (KDC)) также должны быть открыты.