MS SQL Server: SP: distributed transactions - хэлп

User avatar
Win32nipuh
Уже с Приветом
Posts: 2489
Joined: 04 Feb 2002 10:01
Location: Слава Україні!

MS SQL Server: SP: distributed transactions - хэлп

Post by Win32nipuh »

есть серверы MSSQLServer 2000 SP4.

есть процедура, в ней начинаю транзакцию, после нее использую на лету создаваемые линкованные серверы через OPENDATASOURCE, OPENROWSET (заранее неизвестно какие линковать).
Это сделал
EXEC sp_configure 'remote proc trans', '1'
RECONFIGURE WITH OVERRIDE

MSDTC стартован

пока использую, тестирую эту процедуру на одном и том же сервере, базы разные
получаю:

Server: Msg 7391, Level 16, State 1, Line 1
The operation could not be performed because the OLE DB provider 'SQLOLEDB' was unable to begin a distributed transaction.
[OLE/DB provider returned message: New transaction cannot enlist in the specified transaction coordinator. ]
OLE DB error trace [OLE/DB Provider 'SQLOLEDB' ITransactionJoin::JoinTransaction returned 0x8004d00a].

Как бороться?

Является ли это результатом того, что сервер тот же самый и он сам для себя не может принципиально использовать распределенные тарнзакции?
User avatar
Dmitry67
Уже с Приветом
Posts: 28283
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Post by Dmitry67 »

Совершенно верно.
Сам с собой он не умеет начать транзакцию
Нам тоже пришлось это обходить, то есть когда сервер X есть наш сервер, то обращаться к объектам напрямую. Впрочем, так и быстрее
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
User avatar
Win32nipuh
Уже с Приветом
Posts: 2489
Joined: 04 Feb 2002 10:01
Location: Слава Україні!

Post by Win32nipuh »

Dmitry67 wrote:Совершенно верно.
Сам с собой он не умеет начать транзакцию
Нам тоже пришлось это обходить, то есть когда сервер X есть наш сервер, то обращаться к объектам напрямую. Впрочем, так и быстрее


да, так и есть, спасибо. Переписал процедуру.
User avatar
Win32nipuh
Уже с Приветом
Posts: 2489
Joined: 04 Feb 2002 10:01
Location: Слава Україні!

Post by Win32nipuh »

есть два запроса к удаленному серверу
первый выполняется успешно, второй дает ошибку
Как боротсья?

Надо сказать, что если ставлю не трастед ('UID=sa;PWD=sapwd'), то в обоих случаях срабатывает

SELECT * FROM OPENROWSET('SQLOLEDB','server=srv1;Integrated Security=SSPI;Trusted_Connection=Yes;','select [name] from db1.[dbo].[t1] where [id]=''066C6CDB-A4B5-40B1-A5BD-D535D7C411EC''')


exec OPENDATASOURCE('SQLOLEDB','server=srv1;Integrated Security=SSPI;Trusted_Connection=Yes;').db1.[dbo].[get_ids] '066C6CDB-A4B5-40B1-A5BD-D535D7C411EC'

Server: Msg 7416, Level 16, State 3, Line 1
Access to the remote server is denied because no login-mapping exists.
User avatar
Dmitry67
Уже с Приветом
Posts: 28283
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Post by Dmitry67 »

Если trusted, то второй сервер идентифицируется по пользователю, под которым работает сервис. Например, если у вас SQL server запущен под Local System Account, то он в принципе не может коннектиться используя Windows Security
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
User avatar
Win32nipuh
Уже с Приветом
Posts: 2489
Joined: 04 Feb 2002 10:01
Location: Слава Україні!

Post by Win32nipuh »

делаю эксперимент в одно мдомене между двумя серверами SQL на разных машинах.
Убрал Trusted_Connection=Yes;

Теперь второй срабатывает успешно, а первый запрос НЕ срабатывает, дает ошибку

Server: Msg 7399, Level 16, State 1, Line 1
OLE DB provider 'SQLOLEDB' reported an error.
[OLE/DB provider returned message: Invalid authorization specification]
OLE DB error trace [OLE/DB Provider 'SQLOLEDB' IDBInitialize::Initialize returned 0x80004005: ].


SELECT * FROM OPENROWSET('SQLOLEDB','server=srv1;Integrated Security=SSPI;','select [name] from db1.[dbo].[t1] where [id]=''066C6CDB-A4B5-40B1-A5BD-D535D7C411EC''')

exec OPENDATASOURCE('SQLOLEDB','server=srv1;Integrated Security=SSPI;').db1.[dbo].[get_ids] '066C6CDB-A4B5-40B1-A5BD-D535D7C411EC'

Return to “Вопросы и новости IT”