Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, баз данных и сетевого оборудования. Перед выполнением действий обязательно создайте резервную копию. При отсутствии необходимой квалификации обратитесь к ИТ-специалистам.

MSSQL Ошибка 7391: OLE DB provider unable to begin a distributed transaction

Обновлено: 25.08.2026  ·  Официальная база знаний
  • Выполнение распределенного запроса (INSERT INTO ... EXEC или BEGIN DISTRIBUTED TRANSACTION) завершается сбоем: Msg 7391, Level 16, State 2: The operation could not be performed because OLE DB provider was unable to begin a distributed transaction.
  • В журнале Windows Event Log фиксируются ошибки MSDTC Client unable to establish connection with DTC service.
  • Пакетные операции обмена 1С:Предприятие между узлами РИБ зависают и откатываются.
  • Служба MSDTC остановлена или заблокирована корпоративным фаерволом.

1. Настройка параметров безопасности MSDTC в Component Services

На обоих серверах (локальном и удаленном):

  1. Откройте dcomcnfg (Службы компонентов).
  2. Перейдите: Службы компонентов -> Компьютеры -> Мой компьютер -> Distributed Transaction Coordinator -> Локальный DTC.
  3. Откройте свойства и во вкладке Безопасность (Security) включите:
    • Сетевой доступ к DTC (Network DTC Access);
    • Разрешить входящие (Allow Inbound) и Разрешить исходящие (Allow Outbound);
    • Аутентификация не требуется (No Authentication Required) (при междоменных транзакциях) либо Mutual Authentication (внутри одного домена);
    • Включить XA-транзакции (Enable XA Transactions).

2. Перезапуск службы MSDTC

# Выполнить в PowerShell от администратора
Restart-Service -Name MSDTC -Force
Get-Service -Name MSDTC

3. Настройка портов Windows Firewall для RPC и MSDTC

# Разрешение динамических портов RPC и трафика MSDTC
New-NetFirewallRule -DisplayName "MSDTC-In-TCP" -Direction Inbound -Protocol TCP -LocalPort 135 -Action Allow
New-NetFirewallRule -DisplayName "MSDTC-Out-TCP" -Direction Outbound -Protocol TCP -LocalPort 135 -Action Allow
New-NetFirewallRule -DisplayName "MSDTC-Service" -Program "%SystemRoot%\system32\msdtc.exe" -Action Allow

4. Отключение распределенных транзакций для сессии или сервера

Если распределенные двухфазные транзакции не требуются, отключите их продвижение через T-SQL:

-- Отключение автоматического промоушена распределенных транзакций на Linked Server
EXEC sp_serveroption @server = 'LINKED_SERVER_NAME', @optname = 'remote proc transaction promotion', @optvalue = 'false';

-- Использование явного XACT_ABORT
SET XACT_ABORT ON;
Практический опыт инженера: Если MSSQL и базы 1С работают в среде Always On Availability Groups, помните, что поддержка DTC требует обязательного включения опции DTC_SUPPORT = PER_DB при создании группы доступности.

Частые вопросы (FAQ)

Почему простой SELECT вызывает ошибку распределенной транзакции 7391?

Если на сервере включен параметр sp_serveroption 'remote proc transaction promotion' = 'true', любой вызов хранимой процедуры или модификации данных через связанный сервер внутри открытой локальной транзакции (BEGIN TRAN) автоматически пытается перевести транзакцию в статус распределенной под управлением MSDTC.

Как проверить сетевую доступность DTC между серверами?

Используйте официальную утилиту Microsoft DTCPing. Запустите ее одновременно на двух серверах и протестируйте двусторонний RPC-обмен на порту 135 и в динамическом диапазоне портов (49152-65535).

Что делать, если серверы находятся в разных рабочих группах или недоверенных доменах?

В свойствах безопасности MSDTC на обоих хостах необходимо выбрать режим 'No Authentication Required' и убедиться, что NetBIOS-имена серверов резолвятся в IP-адреса через DNS или hosts.

Как исправить ошибку 7391 без настройки MSDTC?

Установите для связанного сервера параметр remote proc transaction promotion в значение false и оберните внешние вызовы в конструкцию OPENQUERY, которая выполняется вне контекста двухфазного коммита.