MSSQLSERVER_7391

Применимо к:SQL Server

Атрибут значение
Продукт SQL Server
Идентификатор события 7391
Источник событий MSSQLSERVER
Компонент SQLEngine
Символическое имя RMT_TRANS_JOIN_FAIL
Текст сообщения Операция не может быть выполнена, так как поставщику OLE DB "%ls" для связанного сервера "%ls" не удалось начать распределенную транзакцию.

Пояснение

Эта ошибка возникает из-за того, что служба координатора распределенных транзакций Майкрософт (MSDTC) не запущена или отключена сетевой доступ.

В некоторых случаях также может появиться ошибка 8522:

Microsoft Distributed Transaction Coordinator (MS DTC) has stopped this transaction.

Числа ошибок, которые находятся в диапазоне от 7300 до 7399, указывают на проблему, которая влияет на поставщика. Так как у каждого поставщика могут быть разные возможности и отображаться различные сведения, может не появиться полное сообщение об ошибке. Чтобы получить полное сообщение об ошибке от поставщиков, выполните следующую команду перед выполнением запроса, создающего ошибку:

DBCC TRACEON (3604, 7300)

Если вы получаете ошибку 7391 из процесса, например репликации SQL Server или служб SQL Server Integration Services (SSIS), вы также можете получить сообщение об ошибке, если код содержит инструкцию BEGIN DISTRIBUTED TRAN .

Действие пользователя

Заметка

Рекомендуется ограничить код в транзакции, которая включает распределенный запрос, который выполняется только на удаленном сервере.

Возможность поддержки

  • Чтобы проверить, поддерживает ли драйвер распределенные транзакции, обратитесь к поставщику драйвера, используемого в запросе связанного сервера.

  • Проверьте, указывает ли объект на целевом сервере обратно на первый сервер. Это называется ситуацией обратного цикла. Связанные серверы цикла предназначены для тестирования и не поддерживаются для многих операций, таких как распределенные транзакции.

Взаимодействие с сервером

Чтобы убедиться, что обмен данными между серверами выполнен успешно, выполните следующие действия.

  1. Проверьте, работает ли разрешение имен сети. Убедитесь, что серверы могут взаимодействовать друг с другом по имени и не только по IP-адресу. Проверьте оба направления (например, от сервера A к серверу B и с сервера B на сервер А). Перед выполнением распределенного запроса устраните все проблемы разрешения имен в сети. Это может потребовать обновления файлов WINS, DNS или LMHost.

  2. Если у вас есть брандмауэр, убедитесь, что порты удаленного вызова процедур (RPC) открываются правильно. Для получения дополнительных сведений см. следующие статьи:

  3. Проверьте объект, на который вы указываете на целевой сервер. Если объект является представлением или хранимой процедурой или вызывает запуск триггера, проверьте, указывает ли он неявно на другой сервер. В этом случае третий сервер является источником проблемы. Запустите запрос непосредственно на третьем сервере. Если этого не удается сделать, запрос связанного сервера не является проблемой. Сначала устраните основную проблему.

  4. Проверьте, используется ли сервер удаленного доступа (RAS) для доступа к удаленным серверам. Если это так, убедитесь, что вы реализовали маршрутизацию RAS (RRAS). Связанные серверы не работают в RAS, так как RAS разрешает только односторонняя связь.

Конфигурация сервера

Выполните следующие действия для настройки серверов:

  1. Запустите координатор распределенных транзакций (DTC или MS DTC) на всех серверах, участвующих в распределенной транзакции. Сведения о включении доступа к сети DTC см. в сообщении об ошибке поставщика OLE DB — SQL Server.

  2. Установите параметр XACT_ABORT значение ON для инструкций изменения данных в неявной или явной транзакции для большинства поставщиков OLE DB, включая SQL Server. Это можно сделать, выполнив следующую команду перед выполнением запроса.

    SET XACT_ABORT ON
    

    Заметка

    Этот параметр не требуется, если поставщик поддерживает вложенные транзакции.

  3. Проверьте, находятся ли какие-либо серверы в отказоустойчивом кластере Windows Server. Служба MSDTC в кластере должна иметь собственный IP-адрес. Убедитесь, что правильное разрешение имен службы DTC происходит на каждом сервере. IP-адрес DTC должен быть определен в системе разрешения имен (например, WINS, DNS или LMHosts). Убедитесь, что каждый сервер может взаимодействовать с MSDTC на других серверах по имени и не только по IP-адресу. Проверьте оба направления. Например, проверьте с сервера A на службу MSDTC сервера B, а затем проверьте с сервера B на сервер MSDTC сервера A. Перед выполнением распределенного запроса необходимо устранить все проблемы разрешения имен в сети. Сведения о настройке MSDTC в кластере см. в рекомендациях MSDTC по отказоустойчивой кластеру SQL — Microsoft Community Hub.

  4. Если вы используете более старые технологии удаленных серверов вместо рекомендуемых связанных серверов, задайте параметр OFF конфигурации удаленного прокси-сервера для сервера или запустите SET REMOTE_PROC_TRANSACTIONS OFF инструкцию перед выполнением любого распределенного запроса. Если этот параметр задан ON, удаленные вызовы процедур выполняются в локальной транзакции. Дополнительные сведения см. в разделе "Настройка удаленного прокси-сервера" (параметр конфигурации сервера) — SQL Server.

  5. Проверьте возвращаемое значение системной функции @@SERVERNAME на обоих серверах. Проверьте, совпадает ли возвращаемое значение с именем компьютера каждого сервера. Если он не соответствует, переименуйте сервер.

  6. Убедитесь, что у учетной записи запуска SQL Server есть разрешения на полный контроль в следующем разделе реестра:

    HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer

Далее