есть серверы 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].
Как бороться?
Является ли это результатом того, что сервер тот же самый и он сам для себя не может принципиально использовать распределенные тарнзакции?
MS SQL Server: SP: distributed transactions - хэлп
-
- Уже с Приветом
- Posts: 2489
- Joined: 04 Feb 2002 10:01
- Location: Слава Україні!
-
- Уже с Приветом
- Posts: 28283
- Joined: 29 Aug 2000 09:01
- Location: SPB --> Gloucester, MA, US --> SPB --> Paris
-
- Уже с Приветом
- Posts: 2489
- Joined: 04 Feb 2002 10:01
- Location: Слава Україні!
-
- Уже с Приветом
- Posts: 2489
- Joined: 04 Feb 2002 10:01
- Location: Слава Україні!
есть два запроса к удаленному серверу
первый выполняется успешно, второй дает ошибку
Как боротсья?
Надо сказать, что если ставлю не трастед ('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.
первый выполняется успешно, второй дает ошибку
Как боротсья?
Надо сказать, что если ставлю не трастед ('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.
-
- Уже с Приветом
- Posts: 28283
- Joined: 29 Aug 2000 09:01
- Location: SPB --> Gloucester, MA, US --> SPB --> Paris
Если trusted, то второй сервер идентифицируется по пользователю, под которым работает сервис. Например, если у вас SQL server запущен под Local System Account, то он в принципе не может коннектиться используя Windows Security
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
-
- Уже с Приветом
- Posts: 2489
- Joined: 04 Feb 2002 10:01
- Location: Слава Україні!
делаю эксперимент в одно мдомене между двумя серверами 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'
Убрал 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'