Я пытаюсь проверить концепцию того, что я могу запустить распределенную транзакцию на двух связанных 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
Мне возвращается следующее исключение:
Доступ к удаленному серверу запрещен, поскольку не существует сопоставления для входа.
Достаточно справедливо, поэтому с сервера Server1 я запускаю sp_addlinkedsrvlogin 'Server2' , который согласно документации говорит, что он должен принять учетные данные пользователя, который выполняет запрос удаленно (т. Е. С Server1), и применить эти учетные данные на сервер2. Это подразумевает, что, поскольку я подключен к Server1 с использованием аутентификации Windows, это должно означать, что мои учетные данные Windows также применяются к Server2.
Теперь сообщение об исключении меняется на:
Ошибка входа для пользователя 'NT AUTHORITY \ ANONYMOUS LOGON'.
Погуглив это исключение, я не нашел ничего полезного, что бы указывало мне правильное направление. Что мне не хватает? Я ожидаю, что [в случае неудачного входа в систему] исключение будет ссылаться на мои учетные данные Windows, , а не на учетные данные анонимного входа.
Похоже, что после того, как я получу работающую ссылку, сами распределенные транзакции должны быть довольно простым делом - документация подразумевает, что мне просто нужно убедиться, что служба DTC работает на сервере Server1 и что любые запросы выполняются на сервере Server1, которые будет осуществляться через ссылку:
- Включить УСТАНОВИТЬ XACT_ABORT ON до инициализации моей распределенной транзакции
- Я использую НАЧАЛО РАСПРЕДЕЛЕННОЙ СДЕЛКИ вместо НАЧАЛО СДЕЛКИ
- Если я хочу сослаться на экземпляр SQL Server не по умолчанию на Server2, я заменяю любые экземпляры имени Server2 в моем запросе на [Server2 \ InstanceName]
Вот мои вопросы:
- как мне пройти эту проблему с логином? Кажется, что хранимая процедура sp_addlinkedsrvlogin сама по себе не помогает.
- Действительно ли так просто запустить распределенную транзакцию, как предполагает документация?
ТИА