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

Существует ли способ почистить список SavePoint-ов в транзакции?

Пример:

begin tran
save tran t1
rollback tran t1
begin distributed tran
rollback tran


выполняется нормально, а

begin tran
save tran t1
save tran t1
rollback tran t1
begin distributed tran
rollback tran


падает.
7 авг 12, 11:20    [12973523]     Ответить | Цитировать Сообщить модератору
 Re: Save Transaction и Distributed Transaction  [new]
Glory
Member

Откуда:
Сообщений: 104751
HyaHya
падает.

С криком "АААААА!" ?
7 авг 12, 11:28    [12973601]     Ответить | Цитировать Сообщить модератору
 Re: Save Transaction и Distributed Transaction  [new]
HyaHya
Guest
Нет, с обычным сообщением
Msg 3933, Level 16, State 1, Line 5
Cannot promote the transaction to a distributed transaction because there is an active save point in this transaction.
7 авг 12, 11:34    [12973671]     Ответить | Цитировать Сообщить модератору
 Re: Save Transaction и Distributed Transaction  [new]
Glory
Member

Откуда:
Сообщений: 104751
HyaHya
Нет, с обычным сообщением

И что непонятного в сообщении ?
Как вы предлагаете серверу превратить транзакцию в распределенную при наличии точки сохранения ?
Начать всю транзакцию сначала ?
7 авг 12, 11:37    [12973706]     Ответить | Цитировать Сообщить модератору
 Re: Save Transaction и Distributed Transaction  [new]
HyaHya
Guest
Как видно из первого примера, само наличие точек не мешает серверу, если rollback их уничтожил.
Я спрашиваю - есть ли возможность их уничтожить без rollback-а? Это просто созданные ранее точки сохранения, которые не понадобились, и далее тоже не понадобятся.
7 авг 12, 11:43    [12973780]     Ответить | Цитировать Сообщить модератору
 Re: Save Transaction и Distributed Transaction  [new]
Glory
Member

Откуда:
Сообщений: 104751
HyaHya
Как видно из первого примера, само наличие точек не мешает серверу, если rollback их уничтожил.

rollback ничего не уничтожает
rollback завершает транзакцию.
7 авг 12, 11:49    [12973840]     Ответить | Цитировать Сообщить модератору
 Re: Save Transaction и Distributed Transaction  [new]
Glory
Member

Откуда:
Сообщений: 104751
HyaHya
Я спрашиваю - есть ли возможность их уничтожить без rollback-а? Это просто созданные ранее точки сохранения, которые не понадобились, и далее тоже не понадобятся.

Подумать над алгоритмом вашей задачи.
7 авг 12, 11:49    [12973851]     Ответить | Цитировать Сообщить модератору
 Re: Save Transaction и Distributed Transaction  [new]
HyaHya
Guest
begin tran
save tran t1
rollback tran t1
begin distributed tran
rollback tran


Этот код выполняется. То есть, rollback до сэйвпоинта уничтожает и сам сэйвпоинт (транзакцию он не закрывает). После чего поднятие транзакции до распределённой проходит успешно. Если же там висит непригодившийся сэйв - поднятие не выполняется.

Если метода почистить непригодившиеся сэйвы нет, то ладно, буду менять алгоритм.
7 авг 12, 12:00    [12973994]     Ответить | Цитировать Сообщить модератору
 Re: Save Transaction и Distributed Transaction  [new]
Glory
Member

Откуда:
Сообщений: 104751
HyaHya
То есть, rollback до сэйвпоинта уничтожает и сам сэйвпоинт (транзакцию он не закрывает)

И откуда такие фантазии то ?
BOL - ROLLBACK TRANSACTION

Rolls back an explicit or implicit transaction to the beginning of the transaction, or to a savepoint inside the transaction.
....

ROLLBACK TRANSACTION cannot reference a savepoint_name in distributed transactions started either explicitly with BEGIN DISTRIBUTED TRANSACTION or escalated from a local transaction.
7 авг 12, 12:04    [12974044]     Ответить | Цитировать Сообщить модератору
 Re: Save Transaction и Distributed Transaction  [new]
HyaHya
Guest
begin tran
save tran t1
save tran t1
rollback tran t1
rollback tran t1
print @@trancount
begin distributed tran
rollback tran

печатает 1 и успешно стартует распределённую транзакцию. Потому что все rollback выполнены до распределённой транзакции, и сэйвпоинтов не осталось.

begin tran
save tran t1
save tran t1
rollback tran t1
print @@trancount
begin distributed tran
rollback tran

тоже печатает 1, но распределённая транзакция не стартует из-за наличия активного сэйвпоинта.

Где тут фантазии - я не знаю. По факту ведёт себя именно как я написал.
Вот и спрашиваю - есть ли возможность убрать активный сэйвпоинт, не делая на него роллбэк?
7 авг 12, 12:28    [12974279]     Ответить | Цитировать Сообщить модератору
 Re: Save Transaction и Distributed Transaction  [new]
Glory
Member

Откуда:
Сообщений: 104751
HyaHya
По факту ведёт себя именно как я написал.

Вы написали "rollback до сэйвпоинта уничтожает и сам сэйвпоинт "
Еще раз - rollback ничего не уничтожает
То что вы 2 раза сделали save tran t1 с одним именеи не означает, что у вас 1 точка сохранения.
У вас 2 точки сохранения. Просто имена у них одинаковые.
И один rollback tran t1 отменят все только до одного save tran t1. А еще один save tran t1 остается
7 авг 12, 12:46    [12974461]     Ответить | Цитировать Сообщить модератору
 Re: Save Transaction и Distributed Transaction  [new]
HyaHya
Guest
Как не уничтожает? rollback не только откатывает всё до сэйвпоинта, но и уничтожает сам сэйвпоинт (его больше нет в транзакции).
Вопрос основной - можно ли уничтожить сэйвпоинт, не делая на него роллбэк? Ну не пригодился он мне, и никогда уже не пригодится, только мешает.
7 авг 12, 12:51    [12974529]     Ответить | Цитировать Сообщить модератору
 Re: Save Transaction и Distributed Transaction  [new]
Glory
Member

Откуда:
Сообщений: 104751
HyaHya
Вопрос основной - можно ли уничтожить сэйвпоинт, не делая на него роллбэк?

Силой мысли что ли ? Без выполнения какой либо команды что ли ?
7 авг 12, 13:03    [12974644]     Ответить | Цитировать Сообщить модератору
 Re: Save Transaction и Distributed Transaction  [new]
HyaHya
Guest
Хоть молитвой, хоть командой. Желательно командой, командам я больше доверяю.
7 авг 12, 13:09    [12974703]     Ответить | Цитировать Сообщить модератору
 Re: Save Transaction и Distributed Transaction  [new]
Glory
Member

Откуда:
Сообщений: 104751
HyaHya
Хоть молитвой, хоть командой. Желательно командой, командам я больше доверяю.

Ну так rollback tran t1 что делает не так ?
7 авг 12, 13:10    [12974725]     Ответить | Цитировать Сообщить модератору
 Re: Save Transaction и Distributed Transaction  [new]
HyaHya
Guest
Если делать rollback всех сэйвов, то в них и смысла нет. Нужна команда их уничтожения, но без роллбэка.
8 авг 12, 00:20    [12978393]     Ответить | Цитировать Сообщить модератору
 Re: Save Transaction и Distributed Transaction  [new]
Glory
Member

Откуда:
Сообщений: 104751
HyaHya
Нужна команда их уничтожения, но без роллбэка.

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

HyaHya
Если делать rollback всех сэйвов, то в них и смысла нет.

Ну так об этом думал создатель этих save-ов ?
8 авг 12, 00:36    [12978423]     Ответить | Цитировать Сообщить модератору
 Re: Save Transaction и Distributed Transaction  [new]
HyaHya
Guest
Сэйвы написаны до того, как появилась необходимость в распределённой транзакции.

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


Зачем все? Которая помечает сэйвы неактивными, или обещает серверу, что я ими не воспользуюсь, или что угодно - лишь бы была возможность стартовать распределённую транзакцию. Сэйвпоинты дальше по коду нигде не используются вообще.
8 авг 12, 13:51    [12981511]     Ответить | Цитировать Сообщить модератору
 Re: Save Transaction и Distributed Transaction  [new]
Glory
Member

Откуда:
Сообщений: 104751
HyaHya
Зачем все? Которая помечает сэйвы неактивными, или обещает серверу, что я ими не воспользуюсь, или что угодно - лишь бы была возможность стартовать распределённую транзакцию. Сэйвпоинты дальше по коду нигде не используются вообще.

Ну так круто бы иметь команду, которая вместо переписывания плохого кода, просто бы отменяла все его команды. Профит очевиден. Легким движением плохой код превращаем в хороший.
8 авг 12, 14:01    [12981599]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Save Transaction и Distributed Transaction  [new]
Фындгь17
Guest
Glory
HyaHya
Зачем все? Которая помечает сэйвы неактивными, или обещает серверу, что я ими не воспользуюсь, или что угодно - лишь бы была возможность стартовать распределённую транзакцию. Сэйвпоинты дальше по коду нигде не используются вообще.

Ну так круто бы иметь команду, которая вместо переписывания плохого кода, просто бы отменяла все его команды. Профит очевиден. Легким движением плохой код превращаем в хороший.



Пользователь может установить точку сохранения или маркер, внутри транзакции. Точка сохранения определяет место, к которому может возвратиться транзакция, если часть транзакции условно отменена. Если транзакция откатывается к точке сохранения, то ее выполнение должно быть продолжено до завершения с обработкой дополнительных инструкций языка Transact-SQL, если необходимо, и инструкции COMMIT TRANSACTION, либо транзакция должна быть полностью отменена откатом к началу. Для отмены всей транзакции используйте инструкцию ROLLBACK TRANSACTION transaction_name. Отменяются все инструкции или процедуры транзакции.

В транзакции разрешены дублирующие имена точек сохранения, но инструкция ROLLBACK TRANSACTION, содержащая имя точки сохранения, откатывает транзакцию к точке сохранения последней инструкции SAVE TRANSACTION, использовавшей это имя.

Инструкцию SAVE TRANSACTION нельзя применять в распределенных транзакциях, запускаемых явно с применением инструкции BEGIN DISTRIBUTED TRANSACTION, или повышением уровня с локальной транзакции.
11 окт 13, 17:23    [14957821]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить