Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Почему-то не могу отключиить на линкованном сервере remote proc transaction promotion  [new]
sposad
Member

Откуда:
Сообщений: 62187
Странно , делаю

EXEC master.dbo.sp_serveroption @server = 'LINK',@optname = 'remote proc transaction promotion', @optvalue = 'false'


а пишет
An invalid parameter or option was specified for procedure 'sys.sp_serveroption'

Почему? Вроде раньше проходило
6 фев 17, 16:18    [20185415]     Ответить | Цитировать Сообщить модератору
 Re: Почему-то не могу отключиить на линкованном сервере remote proc transaction promotion  [new]
invm
Member

Откуда: Москва
Сообщений: 9633
sposad
Почему?
Потому что данная опция появилась начиная с 2008-го сервера.
6 фев 17, 16:24    [20185441]     Ответить | Цитировать Сообщить модератору
 Re: Почему-то не могу отключиить на линкованном сервере remote proc transaction promotion  [new]
sposad
Member

Откуда:
Сообщений: 62187
invm
sposad
Почему?
Потому что данная опция появилась начиная с 2008-го сервера.
млин, а я пытаюсь провернуть на 2005... А как надо тогда на 2005?
6 фев 17, 16:33    [20185490]     Ответить | Цитировать Сообщить модератору
 Re: Почему-то не могу отключиить на линкованном сервере remote proc transaction promotion  [new]
invm
Member

Откуда: Москва
Сообщений: 9633
sposad
А как надо тогда на 2005?
На 2005 такое "провернуть" нельзя.
6 фев 17, 16:39    [20185531]     Ответить | Цитировать Сообщить модератору
 Re: Почему-то не могу отключиить на линкованном сервере remote proc transaction promotion  [new]
sposad
Member

Откуда:
Сообщений: 62187
invm
sposad
А как надо тогда на 2005?
На 2005 такое "провернуть" нельзя.

а что же тогда делать при ошибке
The operation could not be performed because OLE DB provider "SQLNCLI" for linked server "LINK" was unable to begin a distributed transaction.
на 2005?
6 фев 17, 16:45    [20185578]     Ответить | Цитировать Сообщить модератору
 Re: Почему-то не могу отключиить на линкованном сервере remote proc transaction promotion  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
sposad,

SET REMOTE_PROC_TRANSACTIONS OFF
6 фев 17, 17:03    [20185706]     Ответить | Цитировать Сообщить модератору
 Re: Почему-то не могу отключиить на линкованном сервере remote proc transaction promotion  [new]
invm
Member

Откуда: Москва
Сообщений: 9633
sposad
а что же тогда делать при ошибке
The operation could not be performed because OLE DB provider "SQLNCLI" for linked server "LINK" was unable to begin a distributed transaction.
на 2005?
Найти причину ошибки и устранить ее.
6 фев 17, 17:06    [20185732]     Ответить | Цитировать Сообщить модератору
 Re: Почему-то не могу отключиить на линкованном сервере remote proc transaction promotion  [new]
sposad
Member

Откуда:
Сообщений: 62187
invm
sposad
а что же тогда делать при ошибке
The operation could not be performed because OLE DB provider "SQLNCLI" for linked server "LINK" was unable to begin a distributed transaction.
на 2005?
Найти причину ошибки и устранить ее.

так нет тут вроде ошибок

declare @t table(ID bigint)
insert into @t
exec('if not exists(select [CONTRACT] from [dbo].[CNTRCTS] where [CONTRACT]='''+@ContNumber+''')
insert into [dbo].[CNTRCTS] ([CONTRACT]) values('''+@ContNumber+''')
Select SCOPE_IDENTITY()') at [LINK]
7 фев 17, 08:37    [20187227]     Ответить | Цитировать Сообщить модератору
 Re: Почему-то не могу отключиить на линкованном сервере remote proc transaction promotion  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
sposad,

такая конструкция требует распределённой транзакции. тут либо OPENQUERY которого вроде ещё нет в 2005 либо отключить вообще как я писал или на уровне инстанса
7 фев 17, 10:07    [20187559]     Ответить | Цитировать Сообщить модератору
 Re: Почему-то не могу отключиить на линкованном сервере remote proc transaction promotion  [new]
invm
Member

Откуда: Москва
Сообщений: 9633
sposad
так нет тут вроде ошибок
Угу. У вас не запущен или не настроен должным образом MSDTC - отсюда и ошибка.

TaPaK
SET REMOTE_PROC_TRANSACTIONS OFF
Неприменимо к линкед-серверам.
TaPaK
тут либо OPENQUERY
С OPENQUERY тоже будет распределенная транзакция.
7 фев 17, 10:51    [20187745]     Ответить | Цитировать Сообщить модератору
 Re: Почему-то не могу отключиить на линкованном сервере remote proc transaction promotion  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
invm
sposad
так нет тут вроде ошибок
Угу. У вас не запущен или не настроен должным образом MSDTC - отсюда и ошибка.

TaPaK
SET REMOTE_PROC_TRANSACTIONS OFF
Неприменимо к линкед-серверам.
TaPaK
тут либо OPENQUERY
С OPENQUERY тоже будет распределенная транзакция.

то вы не умеете их готовить
7 фев 17, 10:52    [20187750]     Ответить | Цитировать Сообщить модератору
 Re: Почему-то не могу отключиить на линкованном сервере remote proc transaction promotion  [new]
invm
Member

Откуда: Москва
Сообщений: 9633
TaPaK
то вы не умеете их готовить
Угу. Несомненно.
7 фев 17, 10:59    [20187791]     Ответить | Цитировать Сообщить модератору
 Re: Почему-то не могу отключиить на линкованном сервере remote proc transaction promotion  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
invm
TaPaK
то вы не умеете их готовить
Угу. Несомненно.

ну если коротко то INSERT INTO ... SELECT ... FROM OPENQUERY и нет никакой распределённой транзацкции
7 фев 17, 10:59    [20187797]     Ответить | Цитировать Сообщить модератору
 Re: Почему-то не могу отключиить на линкованном сервере remote proc transaction promotion  [new]
invm
Member

Откуда: Москва
Сообщений: 9633
sposad
declare @t table(ID bigint)
insert into @t
exec('if not exists(select [CONTRACT] from [dbo].[CNTRCTS] where [CONTRACT]='''+@ContNumber+''')
insert into [dbo].[CNTRCTS] ([CONTRACT]) values('''+@ContNumber+''')
Select SCOPE_IDENTITY()') at [LINK]


Если этот фрагмент выполняется вне транзакции, то можно заменить на:
declare @ID bigint, @sql nvarchar(max);

select @sql = N'declare @ID bigint;
if not exists(select [CONTRACT] from [dbo].[CNTRCTS] where [CONTRACT]= @ContNumber)
insert into [dbo].[CNTRCTS] ([CONTRACT]) values(@ContNumber)
Select @ID = SCOPE_IDENTITY()';

exec [LINK].MyDB.sys.sp_executesql @sql, N'@ContNumber varchar(100), @ID bigint output', @ContNumber, @ID output;

declare @t table(ID bigint)
insert into @t values (@ID);
7 фев 17, 11:04    [20187831]     Ответить | Цитировать Сообщить модератору
 Re: Почему-то не могу отключиить на линкованном сервере remote proc transaction promotion  [new]
invm
Member

Откуда: Москва
Сообщений: 9633
TaPaK
ну если коротко то INSERT INTO ... SELECT ... FROM OPENQUERY и нет никакой распределённой транзацкции
Немного длиннее:
use master;
go

exec sp_addlinkedserver @server = N'TestLoopback', @srvproduct = N'', @provider = N'SQLNCLI', @datasrc = @@servername;
exec dbo.sp_serveroption @server = N'TestLoopback', @optname = N'remote proc transaction promotion', @optvalue = N'true';
go

declare @t table (tc int);

insert into @t
 select * from openquery(TestLoopback, 'select @@trancount');

select * from @t;
go

exec sp_dropserver @server = N'TestLoopback';
go
7 фев 17, 11:12    [20187878]     Ответить | Цитировать Сообщить модератору
 Re: Почему-то не могу отключиить на линкованном сервере remote proc transaction promotion  [new]
sposad
Member

Откуда:
Сообщений: 62187
invm
sposad
declare @t table(ID bigint)
insert into @t
exec('if not exists(select [CONTRACT] from [dbo].[CNTRCTS] where [CONTRACT]='''+@ContNumber+''')
insert into [dbo].[CNTRCTS] ([CONTRACT]) values('''+@ContNumber+''')
Select SCOPE_IDENTITY()') at [LINK]


Если этот фрагмент выполняется вне транзакции, то можно заменить на:
declare @ID bigint, @sql nvarchar(max);

select @sql = N'declare @ID bigint;
if not exists(select [CONTRACT] from [dbo].[CNTRCTS] where [CONTRACT]= @ContNumber)
insert into [dbo].[CNTRCTS] ([CONTRACT]) values(@ContNumber)
Select @ID = SCOPE_IDENTITY()';

exec [LINK].MyDB.sys.sp_executesql @sql, N'@ContNumber varchar(100), @ID bigint output', @ContNumber, @ID output;

declare @t table(ID bigint)
insert into @t values (@ID);


Спасибо. Я правда уже отработал свой код (помог админ с настройкой линка) но этот вариант попробую тоже, не всегда админы добрые такие:)
7 фев 17, 11:13    [20187884]     Ответить | Цитировать Сообщить модератору
 Re: Почему-то не могу отключиить на линкованном сервере remote proc transaction promotion  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
invm,

и?
7 фев 17, 11:14    [20187887]     Ответить | Цитировать Сообщить модератору
 Re: Почему-то не могу отключиить на линкованном сервере remote proc transaction promotion  [new]
invm
Member

Откуда: Москва
Сообщений: 9633
TaPaK,

Что и?
7 фев 17, 11:17    [20187906]     Ответить | Цитировать Сообщить модератору
 Re: Почему-то не могу отключиить на линкованном сервере remote proc transaction promotion  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
invm
TaPaK,

Что и?
где там DTC
7 фев 17, 11:18    [20187913]     Ответить | Цитировать Сообщить модератору
 Re: Почему-то не могу отключиить на линкованном сервере remote proc transaction promotion  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
invm,
use master;
GO
CREATE PROC dbo.TESTPRC
AS
SELECT ROW_NUMBER() OVER (ORDER BY 1/0) FROM sys.objects

go

exec sp_addlinkedserver @server = N'TestLoopback', @srvproduct = N'', @provider = N'SQLNCLI', @datasrc = @@servername;
exec dbo.sp_serveroption @server = N'TestLoopback', @optname = N'remote proc transaction promotion', @optvalue = N'true';
go

declare @t table (tc int);

INSERT INTO @T SELECT * FROM OPENQUERY([TestLoopback],N'EXEC master.dbo.TESTPRC')

insert into @t EXEC [TestLoopback].master.dbo.TESTPRC

select * from @t;
go

exec sp_dropserver @server = N'TestLoopback';
go
DROP PROC dbo.TESTPRC
GO
7 фев 17, 11:28    [20187978]     Ответить | Цитировать Сообщить модератору
 Re: Почему-то не могу отключиить на линкованном сервере remote proc transaction promotion  [new]
invm
Member

Откуда: Москва
Сообщений: 9633
TaPaK,

Ваш код нерабочий.
А в моем примере да, DTC нету.
7 фев 17, 13:35    [20188703]     Ответить | Цитировать Сообщить модератору
 Re: Почему-то не могу отключиить на линкованном сервере remote proc transaction promotion  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
invm
TaPaK,

Ваш код нерабочий.
А в моем примере да, DTC нету.
ну хз, у меня рабочий
7 фев 17, 13:38    [20188728]     Ответить | Цитировать Сообщить модератору
 Re: Почему-то не могу отключиить на линкованном сервере remote proc transaction promotion  [new]
invm
Member

Откуда: Москва
Сообщений: 9633
TaPaK
ну хз, у меня рабочий
Ну если игнорировать ошибку "Сервер "TestLoopback" не настроен для RPC.", то да, чего-то делает :)
7 фев 17, 13:49    [20188788]     Ответить | Цитировать Сообщить модератору
 Re: Почему-то не могу отключиить на линкованном сервере remote proc transaction promotion  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
invm
TaPaK
ну хз, у меня рабочий
Ну если игнорировать ошибку "Сервер "TestLoopback" не настроен для RPC.", то да, чего-то делает :)

ну я думаю rpc вы сможете включить
7 фев 17, 13:52    [20188805]     Ответить | Цитировать Сообщить модератору
 Re: Почему-то не могу отключиить на линкованном сервере remote proc transaction promotion  [new]
invm
Member

Откуда: Москва
Сообщений: 9633
TaPaK
ну я думаю rpc вы сможете включить
Могу. Только где видно наличие/отсутствие DTC?
7 фев 17, 14:03    [20188872]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить