Я пытаюсь проверить доказательство того, что я могу выполнять распределенную транзакцию между двумя связанными SQL-серверами, связанными с помощью sp_addlinkedserver — их имена — Server1 и Server2, оба работают в экземплярах по умолчанию. Каждый сервер содержит одну базу данных, Source и Destination соответственно, а целевая база данных содержит одну таблицу с именем Output, т.е.
Server1.Source
Server2.Destination.Output
Таблица OUTPUT имеет следующую структуру:
OUT_PKEY int identity(1,1) primary key,
OUT_TEXT nvarchar(255)
С сервера Server1 я вызвал sp_addlinkedserver 'Server2', чтобы связать две базы данных, и попытался выполнить следующий запрос, чтобы проверить, действительно ли связь работает:
Select *
From Server2.Destination.dbo.Output
Мне возвращается следующее исключение:
Доступ к удаленному серверу запрещен, так как не существует сопоставления входа в систему.
Достаточно справедливо, поэтому с сервера 1 я запускаю sp_addlinkedsrvlogin 'Server2', который, согласно документации, должен принимать учетные данные пользователя от того, кто запускает запрос удаленно (т. е. с сервера 1), и применять эти учетные данные к серверу 2. . Это означает, что, поскольку я подключен к серверу 1 с использованием проверки подлинности Windows, это должно означать, что мои учетные данные Windows также применяются к серверу 2.
Теперь сообщение об исключении меняется на:
Ошибка входа в систему для пользователя «NT AUTHORITY\ANONYMOUS LOGON».
Погуглив это исключение, я не нашел ничего полезного, что указывало бы мне в правильном направлении. Что мне не хватает? Я ожидаю, что [в случае сбоя входа в систему] исключение будет ссылаться на мои учетные данные Windows, не на учетные данные анонимного входа.
Похоже, что как только я заработаю саму ссылку, сами распределенные транзакции должны быть довольно простым делом - документация подразумевает, что мне просто нужно убедиться, что служба DTC работает на сервере 1 и что любые запросы выполняются на сервере 1, которые будут выполняться транзакциями. по ссылке:
- Включить SET XACT_ABORT ON перед инициализацией моей распределенной транзакции
- Я использую НАЧАТЬ РАСПРЕДЕЛЕННУЮ ТРАНЗАКЦИЮ вместо НАЧАТЬ ТРАНЗАКЦИЮ
- Если я хочу сослаться на нестандартный экземпляр SQL Server на сервере Server2, я заменяю все экземпляры с именем Server2 в своем запросе на [Server2\InstanceName].
Мои вопросы таковы:
- как решить эту проблему со входом? Сама по себе хранимая процедура sp_addlinkedsrvlogin, похоже, не помогает.
- Действительно ли так просто запустить распределенную транзакцию, как следует из документации?
ТИА