MSDTC терпит неудачу периодически - PullRequest
1 голос
/ 02 декабря 2011

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

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

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

pid = 2144; tid = 2528; время = 12/02 / 2011-10: 49: 39.140; seq = 531; eventid = TRACING_STARTED ;; "MSDTC возобновляет трассировкудолгосрочные транзакции "

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

pid = 2144; tid = 3288; время = 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;= 4164; время = 12/02 / 2011-0: 49: 58,390; сл = 534;EventID = TRANSACTION_PROPOGATION_FAILED_CONNECTION_DOWN_FROM_REMOTE_TM; tx_guid = 4df1b0cf-26a0-43ba-8f41-965d80f92441, "не на распространение информации транзакции для дочернего узла 'DbServer', так как соединение с удаленным менеджером транзакций пошло вниз"

1014 * PID = 2144; TID =4164; время = 12/02 / 2011-10: 49: 58,390; сл = 535;eventid = TRANSACTION_ABORTING; tx_guid = 4df1b0cf-26a0-43ba-8f41-965d80f92441; "транзакция прерывается"

pid = 2144; tid = 4164; время = 12/02/2001-10: 49: 58,390; след.= 536;eventid = RM_ISSUED_ABORT; tx_guid = 4df1b0cf-26a0-43ba-8f41-965d80f92441; "запрос на прерывание выдан менеджеру ресурсов # 1002 для зачисления транзакции # 1"

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

pid = 2144; tid = 2528; время =12/02 / 2011-10: 49: 58,422; сл = 538;eventid = TRANSACTION_ABORTED; tx_guid = 4df1b0cf-26a0-43ba-8f41-965d80f92441; "транзакция была прервана"

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

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

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

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

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

1 Ответ

1 голос
/ 28 июня 2013

Вот статья КБ, которая помогла: 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) также должны быть открыты.

...