Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Откат действий процедуры запущенной через линк сервер  [new]
andrew shalaev
Member

Откуда: Moscow
Сообщений: 610
Доброго времени суток!

СУБД: Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86) Nov 24 2008 13:01:59 Copyright (c) 1988-2005 Microsoft Corporation Developer Edition on Windows NT 5.2 (Build 3790: Service Pack 2)

Такая ситуация:
На сервере 1 запускаем процедуру через линк сервер на 2 сервере
Во время выполнения процедуры рвется связь между 1 и 2 сервером, процедура продолжает выполняться на 2-м сервере, а на 1-м сарвере получаем сообщение о ошибке.

Можно ли как то сделать что бы при обрыве связи откатывалась процедура на 2-м сервере?
31 июл 12, 16:25    [12942003]     Ответить | Цитировать Сообщить модератору
 Re: Откат действий процедуры запущенной через линк сервер  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37202
Читать про distributed transactions.
31 июл 12, 16:26    [12942011]     Ответить | Цитировать Сообщить модератору
 Re: Откат действий процедуры запущенной через линк сервер  [new]
andrew shalaev
Member

Откуда: Moscow
Сообщений: 610
Гавриленко Сергей Алексеевич,

в процедуре которая выполняется на 2-м сервере есть конструкция

save tran t1


с ней невозможно использовать распределенные транзакции. А менять код процедуры нельзя!
31 июл 12, 16:46    [12942182]     Ответить | Цитировать Сообщить модератору
 Re: Откат действий процедуры запущенной через линк сервер  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37202
andrew shalaev
Гавриленко Сергей Алексеевич,

в процедуре которая выполняется на 2-м сервере есть конструкция

save tran t1


с ней невозможно использовать распределенные транзакции. А менять код процедуры нельзя!
Распределенную транзакцию должен стартовать сервер, вызывающий процедуру через линк сервер на 2 сервере. Иначе она никакая не распределенная получается.

Сообщение было отредактировано: 31 июл 12, 16:49
31 июл 12, 16:49    [12942202]     Ответить | Цитировать Сообщить модератору
 Re: Откат действий процедуры запущенной через линк сервер  [new]
andrew shalaev
Member

Откуда: Moscow
Сообщений: 610
Гавриленко Сергей Алексеевич
andrew shalaev
Гавриленко Сергей Алексеевич,

в процедуре которая выполняется на 2-м сервере есть конструкция

save tran t1


с ней невозможно использовать распределенные транзакции. А менять код процедуры нельзя!
Распределенную транзакцию должен стартовать сервер, вызывающий процедуру через линк сервер на 2 сервере. Иначе она никакая не распределенная получается.



не совсем понял
пример:

на сервере А запускаем

begin tran

EXECUTE @RC = serverB.[DB].[dbo].[proc_a] 
   @IDDocument 

commit tran


сама proc_a лежит на сервере B

в результате получаем ошибку

Msg 627, Level 16, State 1, Procedure proc_a, Line 42
Cannot use SAVE TRANSACTION within a distributed transaction.
Msg 8522, Level 18, State 1, Line 13
Microsoft Distributed Transaction Coordinator (MS DTC) has stopped this transaction.
31 июл 12, 17:04    [12942317]     Ответить | Цитировать Сообщить модератору
 Re: Откат действий процедуры запущенной через линк сервер  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37202
Тогда без изменения кода процедуры ничего не выйдет.

Сообщение было отредактировано: 31 июл 12, 17:06
31 июл 12, 17:05    [12942323]     Ответить | Цитировать Сообщить модератору
 Re: Откат действий процедуры запущенной через линк сервер  [new]
andrew shalaev
Member

Откуда: Moscow
Сообщений: 610
Гавриленко Сергей Алексеевич,

Нет никаких дополнительных настроек в linked server(без использования begin tran) что бы он сам видел что есть обрыв связи и серверВ откатил бы транзакцию?
31 июл 12, 17:10    [12942350]     Ответить | Цитировать Сообщить модератору
 Re: Откат действий процедуры запущенной через линк сервер  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37202
andrew shalaev
Гавриленко Сергей Алексеевич,

Нет никаких дополнительных настроек в linked server(без использования begin tran) что бы он сам видел что есть обрыв связи и серверВ откатил бы транзакцию?
За разруливание транзакций отвечает координатор. Зачем еще где-то какие-то настройки?
31 июл 12, 17:11    [12942368]     Ответить | Цитировать Сообщить модератору
 Re: Откат действий процедуры запущенной через линк сервер  [new]
andrew shalaev
Member

Откуда: Moscow
Сообщений: 610
Гавриленко Сергей Алексеевич,

т.е. без правки кода процедуры никак?
31 июл 12, 17:16    [12942408]     Ответить | Цитировать Сообщить модератору
 Re: Откат действий процедуры запущенной через линк сервер  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37202
andrew shalaev
Гавриленко Сергей Алексеевич,

т.е. без правки кода процедуры никак?
Ну или код править, чтобы он нравился MS DTC координатору, или координатор менять (если вообще возможно), чтобы ему нравился текущий код. Или подход менять в принципе.
31 июл 12, 17:22    [12942453]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить