MSDTC периодически выходит из строя

У меня есть сервер Windows 2003, на котором работает MSDTC. Я установил для него режим без аутентификации, разрешив входящие-исходящие настройки. Мой MSDTC работает, но не выполняет первую транзакцию дня. При следующей транзакции он начнет работать.

Ошибка: транзакция уже была явно или неявно зафиксирована или прервана (исключение из HRESULT: 0x8004D00E).

Итак, я начал трассировку MSDTC, в файле трассировки это показывает:

pid = 2144; tid = 2528; time = 12/02/2011-10: 49: 39.140; seq = 531; eventid = TRACING_STARTED ;; "MSDTC возобновляет отслеживание давно существующих транзакций"

pid = 2144; tid = 2528; time = 12.02.2011-10: 49: 39.140; seq = 532; eventid = TRANSACTION_BEGUN; tx_guid = 4df1b0cf-26a0-43ba-8f41-965d80f92441; "транзакция началась, описание: ''"

pid = 2144; tid = 3288; time = 12.02.2011-10: 49: 39.140; seq = 533; eventid = RM_ENLISTED_IN_TRANSACTION; tx_guid = 4df1b0cf-26a0-43ba-8f41-965d80f92441; "менеджер ресурсов № 1002 внесен в список транзакций № 1. RM guid = '4e45a393-b02a-42bf-8f66-62bcb17fee8e'"

pid = 2144; tid = 4164; time = 12.02.2011-0: 49: 58.390; seq = 534; eventid = TRANSACTION_PROPOGATION_FAILED_CONNECTION_DOWN_FROM_REMOTE_TM; tx_guid = 4df1b0cf-26a0-43ba-8f41-965d80f92441; "не удалось передать транзакцию дочернему узлу DBSERVER", потому что соединение с удаленным диспетчером транзакций прервалось

pid = 2144; tid = 4164; time = 12.02.2011-10: 49: 58.390; seq = 535; eventid = TRANSACTION_ABORTING; tx_guid = 4df1b0cf-26a0-43ba-8f41-965d80f92441; "транзакция прерывается"

pid = 2144; tid = 4164; time = 12.02.2011-10: 49: 58.390; seq = 536; eventid = RM_ISSUED_ABORT; tx_guid = 4df1b0cf-26a0-43ba-8f41-965d80f92441; "запрос на прерывание, выданный диспетчеру ресурсов № 1002 для включения транзакции № 1"

pid = 2144; tid = 2528; time = 12.02.2011-10: 49: 58.422; seq = 537; eventid = RM_ACKNOWLEDGED_ABORT; tx_guid = 4df1b0cf-26a0-43ba-8f41-965d80f92441; "получено подтверждение запроса на прерывание от диспетчера ресурсов №1002 для включения транзакции №1"

pid = 2144; tid = 2528; time = 12.02.2011-10: 49: 58.422; seq = 538; eventid = TRANSACTION_ABORTED; tx_guid = 4df1b0cf-26a0-43ba-8f41-965d80f92441; "транзакция была прервана"

pid = 2144; tid = 3640; time = 12/02/2011-10: 50: 29.437; seq = 539; eventid = TRACING_STOPPED ;; "MSDTC приостанавливает отслеживание долгоживущих транзакций из-за отсутствия активности"

Я применил взлом Дэви Бриона отсюда, http://davybrion.com/blog/2010/03/msdtc-woes-with-nservicebus-and-nhibernate/

Также установите интервал ожидания 10 минут в параметрах транзакции.

Если сервер снова некоторое время бездействует, транзакция завершится ошибкой.

Заранее спасибо..


person Bhoomi    schedule 02.12.2011    source источник
comment
Вы читали эту статью базы знаний: support.microsoft.com/kb/922430. Похоже, это очень похоже на вашу проблему. Похоже, у вас 2 сервера: сервер приложений и DBServer? На обоих серверах одинаковые настройки DTC? Есть ли между серверами брандмауэр? Если у вас есть брандмауэр, он иногда может помочь отследить активность брандмауэра.   -  person Randy supports Monica    schedule 02.12.2011
comment
Спасибо Tuzo, мои серверы находятся в локальной сети, и у них нет брандмауэра, хотя один был в рабочей группе, а другой - в домене. Теперь я переместил их обоих в Домен. Никогда не видел эту статью. Я поменял реестр на сервере согласно статье. Я опубликую статус, если он исправлен или нет. Спасибо   -  person Bhoomi    schedule 02.12.2011
comment
Спасибо Тузо. Была та же проблема. Выручка в статье кб выручила меня. Моя проблема исправлена.   -  person Bhoomi    schedule 13.01.2012


Ответы (1)


Вот статья в базе знаний, которая помогла: 922430

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

Click Start, click Run, type regedit, and then click OK.
Locate the following registry subkey:
HKEY_LOCAL_MACHINE\Software\Microsoft\MSDTC
Right-click MSDTC, point to New, and then click DWORD Value.
Type CmMaxNumberBindRetries, and then press ENTER.
Right-click CmMaxNumberBindRetries, and then click Modify.
Click Decimal.
In the Value data box, type 60. 

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

Примечание. Значение 60 - это только рекомендуемое значение. Может потребоваться дополнительное тестирование вашей конфигурации. Щелкните ОК. Перезапустите MS DTC. Примечание. Для сценария медленного ответа убедитесь, что порты, которые требуются для проверки подлинности Kerberos (UDP 88 и TCP 88), открыты, когда брандмауэр задействован в сети периметра. Порты UDP 389 и TCP 389 (оба для LDAP, чтобы найти KDC) также должны быть открыты.

person Bhoomi    schedule 28.06.2013