Як увімкнути MSDTC на SQL сервері?


106

Це навіть справедливе питання? У мене є .NET Windows додаток, яке використовує MSTDC, і воно кидає виняток:

System.Transaction.TransactionManagerCommunicationException: доступ до мережі для диспетчера розподілених транзакцій (MSDTC) відключений. Будь ласка, увімкніть DTC для доступу до мережі в конфігурації безпеки для MSDTC за допомогою інструменту Адміністратор компонентів ---> System.Runtime.InteropServices.COMException (0x8004D024): менеджер транзакцій відключив підтримку віддалених / мережевих транзакцій. (Виняток від HRESULT: 0x8004D024) у System.Transaction.Oletx.IDtcProxyShimFactory.ReceiveTransaction (UInt32 propgationTokenSize, Byte [] propgationToken, IntPtr ManagedIdentifier, Guid &actionIdentifier, OletxTransactionIsolaction & TranslactionInsimationInsimlationInsimlationInsimlationInsimlationInsimlationInsimationInsimlationInsimlationInsimationIsoimisation;

Я дотримувався керівництва Kbalertz, щоб увімкнути MSDTC на ПК, на якому встановлено додаток, але помилка все ж виникає.

Мені було цікаво, чи це проблема з базою даних? Якщо так, то як це можна вирішити?


Якщо згадані рішення не вирішили проблему, перевірте це посилання
Shahab J

Відповіді:


127

Використовуйте це для Windows Server 2008 r2 та Windows Server 2012 R2

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

  2. У дереві консолі натисніть, щоб розгорнути Служби компонентів , натисніть, щоб розгорнути Комп'ютери , натисніть, щоб розгорнути Мій комп'ютер , натисніть, щоб розгорнути Координатор розподілених транзакцій, а потім натисніть Місцевий DTC .

  3. Клацніть правою кнопкою миші Local DTC і натисніть Properties (Властивості), щоб відобразити діалогове вікно Local DTC Properties .

  4. Перейдіть на вкладку Безпека .

  5. Поставте прапорець "Мережевий доступ до DTC" .

  6. Нарешті позначте прапорець "Дозволити вхідне" та "Дозволити вихідний" .

  7. Клацніть Застосувати , Гаразд .

  8. З'явиться повідомлення про перезапуск послуги.

  9. Натисніть кнопку ОК і все.

Довідка: https://msdn.microsoft.com/en-us/library/dd327979.aspx

Примітка. Іноді мережевий брандмауер на локальному комп’ютері чи сервері може перервати ваше з'єднання, тому переконайтеся, що ви створили правила для "Дозволити вхідне" та "Дозволити вихідне" дляC:\Windows\System32\msdtc.exe


Працює і для Windows Server 2012 R2. Дякуємо за чіткі вказівки. Ніколи б не знайшов цього самостійно!
jonazu

@jonazu зараз я оновив відповідь і для Windows Server 2012 R2 :)
Shiv Singh

Гарна робота ShivSingh!
Супер Кодер

Правильний шлях msdtc.exe- це:c:\windows\system32\msdtc.exe
firepol

1
Здається, виникла помилка, коли ці властивості не тримаються під час встановлення через інтерфейс користувача, принаймні, на кластерних вузлах Server 2016. Рішення полягає в тому, щоб встановити ці властивості вручну в реєстрі: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\Security. Більше інформації про властивості тут .
Павло

102

Вам навіть потрібен MSDTC? Ескалація, яку ви переживаєте, часто спричиняється створенням декількох з'єднань в одному TransactionScope.

Якщо вам це потрібно, вам потрібно ввімкнути його, як зазначено в повідомленні про помилку. У XP:

  • Перейдіть у розділ Адміністративні інструменти -> Послуги компонентів
  • Розгорніть Послуги компонентів -> Комп'ютери ->
  • Клацніть правою кнопкою миші -> Властивості -> вкладка MSDTC
  • Натисніть кнопку "Конфігурація безпеки"

2
Також у брандмауері Windows я відкрив порт 135 TCP і додав c: \ windows \ msdtc.exe як виняток
Sameer Alibhai

20
Дякуємо за коментар щодо помилки, викликаної створенням декількох з'єднань в одному TransactionScope. Я отримував помилку, і це була саме проблема. Я не хотів використовувати MSDTC, тому знайшов нове підключення та повторно використав існуюче. Дякую!
Джим Маккіт

10
Я в Windows 7 і 8, і є лише розділ "Координатор за замовчуванням". Де я можу отримати конфігурацію безпеки, про яку ви говорите?
qdev76

2
1) Клацніть правою кнопкою миші на локальному DTC та виберіть властивості
Роб Седгвік

19

Я виявив, що найкращим способом налагодження є використання інструменту мікрософт під назвою DTCPing

  1. Скопіюйте файл на сервер (DB) та клієнт (сервер додатків / клієнт ПК)
    • Запустіть його на сервері та клієнті
    • На сервері: заповніть ім’я комп'ютера netbios і спробуйте встановити DTC-з'єднання
    • Перезавантажте обидва додатки.
    • У клієнта: заповніть ім'я комп'ютера сервера netbios і спробуйте встановити DTC-з'єднання

У моєї старої мережі компанії у мене виникли проблеми з проїздом, і я отримав кілька порад:

  • якщо ви отримаєте повідомлення про помилку "Gethostbyname не вдалося", це означає, що комп'ютер не може знайти інший комп'ютер за його назвою netbios . Наприклад, сервер міг би вирішити та пінг клієнта, але це працює на рівні DNS. Не на рівні пошуку netbios. Використання WINS-серверів або зміна LMHOST (брудно) вирішить цю проблему.
  • якщо ви отримаєте помилку "Acces Denied", налаштування безпеки не відповідають. Ви повинні порівняти вкладку безпеки для msdtc і домогтися відповідності сервера та клієнта. Ще одне, на що слід звернути увагу, - це значення RestrictRemoteClients . Залежно від версії ОС та, що ще важливіше, пакета послуг, це значення може бути різним.
  • Інші проблеми з підключенням:
    • Брандмауер між сервером і клієнтом повинен дозволити спілкування через порт 135. І що ще важливіше, з'єднання можна ініціювати з обох сайтів (у мене було багато проблем із брандмауером у моїй компанії, оскільки вони припускали, що тільки сервер відкриє з'єднання на той порт)
    • Протокол повертає випадковий порт для підключення для реального зв'язку транзакцій. Люди з брандмауера не люблять цього, вони люблять обмежувати порти певним діапазоном. Ви можете обмежити генерацію динамічного порту RPC до певного діапазону, використовуючи клавіші, як описано в розділі Як налаштувати розподіл динамічного порту RPC для роботи з брандмауерами .

На мій досвід, якщо DTCPing може встановити з'єднання DTC, ініційоване від клієнта та ініційоване з сервера, ваші транзакції вже не є проблемою.


6

Можна також побачити тут про те , як включити MSDTC від services.msc контрольної панелі.

На сервері, де знаходиться тригер, потрібно увімкнути послугу MSDTC. Для цього можна натиснути СТАРТ> НАСТРОЙКИ> ПАНЕЛЬ КОНТРОЛЮ> АДМІНІСТРАТИВНІ ІНСТРУМЕНТИ> ПОСЛУГИ. Знайдіть службу під назвою «Координатор розподілених транзакцій» та ПРАВИЙ КЛІК (на ній та виберіть)> Пуск.


4

MSDTC має бути ввімкнено для обох систем, як сервера, так і клієнта.
Також переконайтеся, що між системами, що блокують RPC, немає брандмауера.
DTCTest - це приємний додаток, яке допомагає вирішити будь-які інші проблеми.


Я думаю, що це нове місце microsoft.com/en-us/download/details.aspx?id=30746
Air2

4

@Dan,

Чи не потрібен msdtc, щоб транзакції працювали?

Тільки розподілені транзакції - ті, що передбачають більше, ніж одне з'єднання. Переконайтеся вдвічі, що ви відкриваєте лише одне з'єднання в рамках транзакції, і воно не зростатиме - продуктивність також буде набагато кращою.


Чи не потрібен msdtc, щоб транзакції працювали? Так чи інакше, наскільки я не знаю, кілька з'єднань не здійснюються. Я вже виконував ці кроки на клієнтському ПК, ти кажеш, я також повинен робити ці дії на сервері баз даних?
День

@Dan, вам не потрібно вмикати DTC, якщо ви використовуєте транзакції ado.net. Вам потрібно включити MSDTC на сервері, лише якщо ви використовуєте Розподілені транзакції
Niraj
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.