Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как обойти: Msg 7391 SQLOLEDB was unable to begin a distributed transaction  [new]
kha
Member

Откуда: ☭
Сообщений: 360
MSSQL2000

имеем linked server MSSQL2000 через OLEDB provider 'remoteserver'

есть хп приблизительно следующего содержания

CREATE sp_1
as
CREATE TABLE #t (...)
INSERT INTO #t
EXEC ('SELECT ... FROM remoteserver.db.....')

SELECT * FROM #t

при выполнении этой хп вываливается следующуя ошибка

Server: Msg 7391, Level 16, State 1, Line 2
The operation could not be performed because the OLE DB provider 'SQLOLEDB' was unable to begin a distributed transaction.
[OLE/DB provider returned message: Новая транзакция не может быть учтена указанным координатором транзакций. ]
OLE DB error trace [OLE/DB Provider 'SQLOLEDB' ITransactionJoin::JoinTransaction returned 0x8004d00a].


Как обойти данную проблему
10 мар 09, 12:36    [6904543]     Ответить | Цитировать Сообщить модератору
 Re: Как обойти: Msg 7391 SQLOLEDB was unable to begin a distributed transaction  [new]
kha
Member

Откуда: ☭
Сообщений: 360
Что делать?

Имеем такие настройки

exec sp_configure 'remote proc trans'

name minimum maximum config_value run_value
----------------------------------- ----------- ----------- ------------ -----------
remote proc trans 0 1 0 0
10 мар 09, 13:16    [6904836]     Ответить | Цитировать Сообщить модератору
 Re: Как обойти: Msg 7391 SQLOLEDB was unable to begin a distributed transaction  [new]
Crimean
Member

Откуда:
Сообщений: 13148
под 2000 для отказа от MS DTC нужно пользовать RemoteServer или openquery
для 2005 - только openquery
только вот тиражировать решения с openquery не очень удобно
10 мар 09, 13:19    [6904871]     Ответить | Цитировать Сообщить модератору
 Re: Как обойти: Msg 7391 SQLOLEDB was unable to begin a distributed transaction  [new]
kha
Member

Откуда: ☭
Сообщений: 360
Crimean,

Спасибо за ответ,

[ОФФТОП]Вы из Донецка?[/ОФФТОП]
10 мар 09, 13:40    [6905054]     Ответить | Цитировать Сообщить модератору
 Re: Как обойти: Msg 7391 SQLOLEDB was unable to begin a distributed transaction  [new]
ГостеГ
Guest
Посмотрите еще вот здесь. Мне помогло)

http://support.microsoft.com/kb/839279

На удаленном сервере службе DTC может быть не был разрешен доступ по сети.
30 мар 09, 18:42    [6995179]     Ответить | Цитировать Сообщить модератору
 Re: Как обойти: Msg 7391 SQLOLEDB was unable to begin a distributed transaction  [new]
Crimean
Member

Откуда:
Сообщений: 13148
ГостеГ
Посмотрите еще вот здесь. Мне помогло)

http://support.microsoft.com/kb/839279

На удаленном сервере службе DTC может быть не был разрешен доступ по сети.


да, оно, конечно, поможет, но сразу другие вопросы пойдут :)
30 мар 09, 19:17    [6995276]     Ответить | Цитировать Сообщить модератору
 Re: Как обойти: Msg 7391 SQLOLEDB was unable to begin a distributed transaction  [new]
OlegDX
Guest
А вот как я обошёл транзакции стороной:
Суть задачи вызвать на удалённом сервере процедуру которая вернет таблицу и таблицу сохранить во временную таблицу

  IF exists(SELECT *FROM master.dbo.sysservers WHERE SRVNAME=N'SRV_TEST') 
  BEGIN
    EXEC sp_droplinkedsrvlogin 'SRV_TEST', 'SA'
    EXEC sp_dropserver 'SRV_TEST'
  END
  ---------------------------------------------
  IF not exists(SELECT *FROM master.dbo.sysservers WHERE SRVNAME=N'SRV_TEST') 
  BEGIN
    EXEC sp_addlinkedserver 
    @server     = N'SRV_TEST', 
    @srvproduct = N'SRV_TEST',
    @provider   = N'SQLOLEDB.1',
    @datasrc    = N'TEST_SERVER',
    @location   = null,
    @provstr    = null,
    @catalog    = N'TEST_DB'
    EXEC sp_serveroption N'SRV_TEST', N'rpc', 'TRUE'
    EXEC sp_serveroption N'SRV_TEST', N'rpc out', 'TRUE'
    EXEC sp_serveroption N'SRV_TEST', N'data access', 'TRUE'
    EXEC sp_addlinkedsrvlogin 'SRV_TEST', 'false', 'sa', 'MyLogin', 'MyPassword'
  END

SRV_TEST- это линкин удалённого SQL сервера
ReceiptSummaryInformationByID - это процедура удалённого SQL сервера

  if (select object_id('tempdb..#MyTempTableReceipt')) is not null drop table #MyTempTableReceipt
  CREATE TABLE #MyTempTableReceipt 
  (
  ....
  )

    DECLARE @CMD NVarChar(256)

SET @CMD   = 'INSERT INTO #MyTempTableReceipt Select * FROM OPENQUERY (SRV_BOOWLING, ''exec usp_ReceiptSummaryInformationByID '+Cast(4026 as Varchar(10))+''')'
EXEC(@CMD)

SELECT * From #MyTempTableReceipt
24 сен 09, 00:49    [7700729]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить