Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

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

MSSQL 7391 1С:Предприятие и СУБД

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, которая выполняется вне контекста двухфазного коммита.

Полезные материалы
Рекомендуем