Published on

February 4, 2025

Исправление проблем MSDTC в SQL Server

Вы когда-нибудь сталкивались с проблемами распределенных транзакций в вашей среде SQL Server? Если вы столкнулись с сообщением об ошибке “MSDTC на сервере недоступен”, то этот блог-пост для вас. В этой статье мы рассмотрим шаги, предпринятые для решения этой проблемы и нормальной работы ваших распределенных транзакций.

Проблема

При попытке выполнить запрос T-SQL с использованием команды “begin distributed transaction”, вы могли столкнуться с сообщением об ошибке “MSDTC на сервере недоступен”. Эта ошибка может быть раздражающей, особенно когда служба MSDTC кажется работающей и функционирующей правильно.

Решение

Для устранения этой проблемы мы обратились в службу поддержки Microsoft SQL Server Premier. Они помогли нам выявить причину проблемы и предоставили необходимые шаги для ее устранения.

Первым шагом было убедиться, что MSDTC работает правильно. Мы использовали три инструмента из арсенала Microsoft: DTCPing, WinRM / RMClient и DTCTester. Эти инструменты подтвердили, что MSDTC функционирует без проблем.

Затем мы сосредоточились на разрешениях, назначенных учетной записи службы SQL Server. Было отмечено, что невозможность выполнения команды “begin distributed transaction” скорее всего связана с недостаточными разрешениями. Чтобы проверить разрешения, мы использовали команду sc для изучения списка контроля доступа (ACL) на сервере.

Согласно Microsoft, запись Authenticated Users (A;;CCCR;;;AU) отсутствовала в ACL. Эта запись предоставляет разрешения для Microsoft Distributed Transaction Coordinator. Чтобы добавить эту настройку, мы использовали следующую команду:

sc sdset msdtc D:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCCR;;;AU)
(A;;CCLCSWLOCRRC;;;IU)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;NS)
(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;SY)S:S:(S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)

После внесения этого изменения настройки мы снова попытались выполнить команду “begin distributed transaction”. К сожалению, мы все еще столкнулись с той же ошибкой.

На этом этапе мы подозревали, что учетная запись службы SQL Server может не иметь разрешений на запрос службы MSDTC на сервере. Чтобы решить эту проблему, мы загрузили инструмент SubInACL, который позволяет администраторам получать информацию о безопасности и передавать ее между пользователями, группами и доменами.

Используя инструмент SubInACL, мы предоставили полный контроль учетной записи службы SQL Server для службы MSDTC с помощью следующей команды:

subinacl /service msdtc /grant="USER"=F

Замените “USER” учетной записью пользователя домена, используемой для службы SQL Server.

Наконец, после предоставления полного контроля над MSDTC, мы смогли успешно выполнить команду “begin distributed transaction”.

Заключение

Если у вас возникают проблемы с распределенными транзакциями в среде SQL Server, важно убедиться, что MSDTC функционирует правильно и что необходимые разрешения установлены. Следуя описанным в этой статье шагам, вы сможете устранить проблемы с MSDTC и обеспечить бесперебойную работу ваших распределенных транзакций.

Для получения более подробной информации о том, как служба поддержки Microsoft определила причину проблемы и устранила ее, обратитесь к предыдущему совету здесь.

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.