Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Сравнение СУБД Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3 4 5 6 7   вперед  Ctrl      все
 nested transaction vs savepoint  [new]
Dmitry Arefiev
Member

Откуда:
Сообщений: 9993
Привет Всем

Возник спор - вложенные транзакции (nested transaction) и точки сохранения (savepoint) это:
1) одно и то же, но названное по разному;
2) или существуют принципиальные факты различий в их поведении.
Интересует больше концепция, но будут интересны и реализации.

Что скажете ?

PS: Я за (1).

Удачи,
Дмитрий

--
AnyDAC (www.da-soft.com) - компоненты для доступа к Oracle, MySQL, MSSQL,
MSAccess, IBM DB2, Advantage DS, Sybase ASA, DbExpress, ODBC .
26 сен 07, 20:13    [4720615]     Ответить | Цитировать Сообщить модератору
 Re: nested transaction vs savepoint  [new]
SergSuper
Member

Откуда: SPb
Сообщений: 5488
мне кажется ни то ни другое

если вы пишите вложенные транзакции, то при откатывании в любом месте откатыватся будет всё, независимо от того, что какие-то вложенные транзакции завершились

save tran фиксирует текущее состояние и откатываться тогда будет до него


или Вы другое имели в виду?
26 сен 07, 22:45    [4721094]     Ответить | Цитировать Сообщить модератору
 Re: nested transaction vs savepoint  [new]
hvlad
Member

Откуда:
Сообщений: 11554
2 Dmitry Arefiev : одно и то же.

SergSuper
save tran фиксирует текущее состояние и откатываться тогда будет до него
Это в где ???
Транзакция или вся выполняется, или вся не выполняется. Всё остальное - не транзакция
27 сен 07, 00:02    [4721200]     Ответить | Цитировать Сообщить модератору
 Re: nested transaction vs savepoint  [new]
Пьяный Лох
Member

Откуда:
Сообщений: 3652
2 Dmitry Arefiev
Это принципиально разные вещи.
Основное принципиальное отличие в том, что вложенные транзакции в классическом понимании транзакций - вообще невозможны.

Если есть одна транзакция (внешняя), внутри которой запускается еще одна (внутренняя), то ACID-ное durability требует, чтобы изменения, прибитые внутренним commit'ом были навсегда. Но тогда непонятно что должен делать случившийся позже внешний rollback, он ни оставить внутренние изменения не может (иначе это не rollback), ни откатить (иначе лесом пошло внутреннее durability).

Можно модифицировать понятие durability, внеся туда понятие "области видимости". Так, например, сделано в MS Access (интерсно, где еще?).
Можно ввести суррогатные сейвпоинты.
В простых случаях поведение и использование - идентично, в более сложных - нет.
27 сен 07, 01:07    [4721248]     Ответить | Цитировать Сообщить модератору
 Re: nested transaction vs savepoint  [new]
hvlad
Member

Откуда:
Сообщений: 11554
Пьяный Лох
2 Dmitry Arefiev
Это принципиально разные вещи.
Основное принципиальное отличие в том, что вложенные транзакции в классическом понимании транзакций - вообще невозможны.
Да, конечно.
Я имел в виду практическую сторону вопроса, ибо некоторые производители называют сейвпойнты вложенными тр-циями
27 сен 07, 01:39    [4721277]     Ответить | Цитировать Сообщить модератору
 Re: nested transaction vs savepoint  [new]
GoldSquid
Member

Откуда: ORA-00604
Сообщений: 6112
Вложенных транзакций не бывает!

-----------
Dad el rublo!
27 сен 07, 08:47    [4721498]     Ответить | Цитировать Сообщить модератору
 Re: nested transaction vs savepoint  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
hvlad
SergSuper
save tran фиксирует текущее состояние и откатываться тогда будет до него
Это в где ???


Это в Oracle :) Ну и наверное там где ЕСТЬ savepoint-ы
Так что таки НЕТ это не одно и то-же
27 сен 07, 08:59    [4721534]     Ответить | Цитировать Сообщить модератору
 Re: nested transaction vs savepoint  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
GoldSquid
Вложенных транзакций не бывает!

-----------
Dad el rublo!


бывают
27 сен 07, 09:01    [4721543]     Ответить | Цитировать Сообщить модератору
 Re: nested transaction vs savepoint  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
Gluk (Kazan)
hvlad
SergSuper
save tran фиксирует текущее состояние и откатываться тогда будет до него
Это в где ???


Это в Oracle :) Ну и наверное там где ЕСТЬ savepoint-ы
Так что таки НЕТ это не одно и то-же


если в rollback указано, что откатываться надо до savepoint-а
27 сен 07, 09:03    [4721549]     Ответить | Цитировать Сообщить модератору
 Re: nested transaction vs savepoint  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Gluk (Kazan)
GoldSquid
Вложенных транзакций не бывает!

-----------
Dad el rublo!


бывают


Ну, а если почитать:

Committing inner transactions is ignored by Microsoft® SQL Server™. The transaction is either committed or rolled back based on the action taken at the end of the outermost transaction. If the outer transaction is committed, the inner nested transactions are also committed. If the outer transaction is rolled back, then all inner transactions are also rolled back, regardless of whether or not the inner transactions were individually committed.

;)
27 сен 07, 09:32    [4721682]     Ответить | Цитировать Сообщить модератору
 Re: nested transaction vs savepoint  [new]
Dmitry Arefiev
Member

Откуда:
Сообщений: 9993
Пьяный Лох
ACID-ное durability требует, чтобы изменения, прибитые внутренним commit'ом были навсегда

Это про транзакции. А ACID для вложенных транзакций где-то описывается ?
Пьяный Лох
Можно модифицировать понятие durability, внеся туда понятие "области видимости".

Тогда это становится savepoint'ом, который nested transaction.
Пьяный Лох
В простых случаях поведение и использование - идентично, в более сложных - нет.

Да, вот и хотелось бы увидить хотя бы один случай, где они разные ...
27 сен 07, 09:43    [4721728]     Ответить | Цитировать Сообщить модератору
 Re: nested transaction vs savepoint  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
pkarklin
Gluk (Kazan)
GoldSquid
Вложенных транзакций не бывает!

-----------
Dad el rublo!


бывают


Ну, а если почитать:

Committing inner transactions is ignored by Microsoft® SQL Server™. The transaction is either committed or rolled back based on the action taken at the end of the outermost transaction. If the outer transaction is committed, the inner nested transactions are also committed. If the outer transaction is rolled back, then all inner transactions are also rolled back, regardless of whether or not the inner transactions were individually committed.

;)


Они НАЗЫВАЮТСЯ вложенными транзакциями ;)
Для Microsoft вообще характерно называть вещи не своими именами (из самыхблагих маркетинговых соображений разумеется)
27 сен 07, 09:46    [4721745]     Ответить | Цитировать Сообщить модератору
 Re: nested transaction vs savepoint  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
Dmitry Arefiev

Да, вот и хотелось бы увидить хотя бы один случай, где они разные ...


В Oracle savepoint неявно ставится перед каждым DML-оператором, что позволяет откатить этот оператор при возникновении ошибки. Попробуйте сделять то-же с помощью "вложенных" транзакций.

Кстати, в Oracle есть еще автономные транзакции, которые тоже не имеют никакого отношения к "вложенным"
27 сен 07, 09:49    [4721763]     Ответить | Цитировать Сообщить модератору
 Re: nested transaction vs savepoint  [new]
Dmitry Arefiev
Member

Откуда:
Сообщений: 9993
Gluk (Kazan)
Попробуйте сделять то-же с помощью "вложенных" транзакций.

И в чем проблема ?
Gluk (Kazan)
Кстати, в Oracle есть еще автономные транзакции, которые тоже не имеют никакого отношения к "вложенным"

Автономные транзакции скорее ближе к множественным транзакциям Interbase. Т.е. они скорее всего параллельные а не вложенные :)
27 сен 07, 09:54    [4721795]     Ответить | Цитировать Сообщить модератору
 Re: nested transaction vs savepoint  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
Dmitry Arefiev
Gluk (Kazan)
Попробуйте сделять то-же с помощью "вложенных" транзакций.

И в чем проблема ?


В том чтобы откатить деятельность оператора, а не всю транзакцию
27 сен 07, 10:08    [4721876]     Ответить | Цитировать Сообщить модератору
 Re: nested transaction vs savepoint  [new]
Dmitry Arefiev
Member

Откуда:
Сообщений: 9993
Gluk (Kazan)
В том чтобы откатить деятельность оператора, а не всю транзакцию

Ну так откатывайте себе на здоровье, используя хоть вложенные транзакции, хоть точки сохранения. Только обрамляя каждый оператор блоком обработки исключительных ситуаций.
27 сен 07, 10:23    [4721991]     Ответить | Цитировать Сообщить модератору
 Re: nested transaction vs savepoint  [new]
teras
Member

Откуда:
Сообщений: 293
Насколько я понимаю, разница между savepoint и nested transactions заключается в том, что вложенные транзакции позволяют образуют независимый собственный домен блокировок, в то время, как точки сохранения используют один общий домен - родительскую транзакцию.
Кстати, существуют и такой подход, когда текстуально вложенная транзакция подтверждается независимо от статуса завершения объемлющей. На практике они используются практически в любой БД, применяющей UNDO/REDO протоколирование. В ARIES они называется nested top actions (NTA).
27 сен 07, 10:25    [4722015]     Ответить | Цитировать Сообщить модератору
 Re: nested transaction vs savepoint  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
Dmitry Arefiev
Gluk (Kazan)
В том чтобы откатить деятельность оператора, а не всю транзакцию

Ну так откатывайте себе на здоровье, используя хоть вложенные транзакции, хоть точки сохранения. Только обрамляя каждый оператор блоком обработки исключительных ситуаций.


В MS SQL rollback откатит всю транзакцию, а не только вложенную
в этом и разница

2 teras

Что есть домен блокировок ? В MS SQL 2000 вложенный Begin Transaction не более чем синтаксический сахар
27 сен 07, 10:34    [4722102]     Ответить | Цитировать Сообщить модератору
 Re: nested transaction vs savepoint  [new]
Пьяный Лох
Member

Откуда:
Сообщений: 3652
2 Dmitry Arefiev
Это про транзакции. А ACID для вложенных транзакций где-то описывается ?

Нигде не описывается. Потому что не бывает ACID для вложенных транзакций. Конкретно - не бывает D. Бывает только "модифицированное D", т.е. для внешней транзакции закомиченные (внутренним комитом) изменения вполне дюрабильны, а для всего остального мира их еще не существует.

Тогда это становится savepoint'ом, который nested transaction.

Не становится.

Да, вот и хотелось бы увидить хотя бы один случай, где они разные ...

Напишите с использованием сейвпойнтов процедурину, которая обеспечивает атомарность, констистентность и изолированность (нужного уровня) для своих операций как при обычном вызове этой процедуры, так и при вызове внутри другой транзакции (в т.ч. с другим уровнем изоляции). И чтобы откат этой процедуры (в случае "вложенного" её вызова) не вызывал отката родительской транзакции, о которой вообще-то неизвестно ничего.
Когда напишете - тогда приходите.
27 сен 07, 11:06    [4722435]     Ответить | Цитировать Сообщить модератору
 Re: nested transaction vs savepoint  [new]
Пьяный Лох
Member

Откуда:
Сообщений: 3652
2 Dmitry Arefiev
З.Ы. Как было правильно сказано, сейвпоинты - это синтаксический сахар. Т.е. вроде как нельзя вложенные транзакции, но очччень хочеццо уметь "откатиться на чуть-чуть", причем сделать это более удобным способом, нежели выполнением обратных операторов. Всё, кроме как для "откатов на чуть-чуть" сейвпоинты больше ни для чего нужны быть не могут.
27 сен 07, 11:37    [4722747]     Ответить | Цитировать Сообщить модератору
 Re: nested transaction vs savepoint  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
Пьяный Лох
2 Dmitry Arefiev
З.Ы. Как было правильно сказано, сейвпоинты - это синтаксический сахар. Т.е. вроде как нельзя вложенные транзакции, но очччень хочеццо уметь "откатиться на чуть-чуть", причем сделать это более удобным способом, нежели выполнением обратных операторов. Всё, кроме как для "откатов на чуть-чуть" сейвпоинты больше ни для чего нужны быть не могут.


Не надо с больной головы на здоровую. Я говорил про вложенные транзакции. savepoint-ы сахар вполне себе семантический и на роль вложенных транзакций никогда не претендовавший. У него типа свои задачи
27 сен 07, 11:39    [4722766]     Ответить | Цитировать Сообщить модератору
 Re: nested transaction vs savepoint  [new]
hvlad
Member

Откуда:
Сообщений: 11554
Gluk (Kazan)
Dmitry Arefiev

Да, вот и хотелось бы увидить хотя бы один случай, где они разные ...


В Oracle savepoint неявно ставится перед каждым DML-оператором, что позволяет откатить этот оператор при возникновении ошибки. Попробуйте сделять то-же с помощью "вложенных" транзакций.
А в где они не ставятся ? :) С помощью "вложенных" это попробовать не получится, ибо их не бывает
27 сен 07, 11:40    [4722778]     Ответить | Цитировать Сообщить модератору
 Re: nested transaction vs savepoint  [new]
hvlad
Member

Откуда:
Сообщений: 11554
Gluk (Kazan)
hvlad
SergSuper
save tran фиксирует текущее состояние и откатываться тогда будет до него
Это в где ???


Это в Oracle :) Ну и наверное там где ЕСТЬ savepoint-ы
Так что таки НЕТ это не одно и то-же
Commit savepoint'а это просто указание движку забыть об этом savepoint'е. Я сильно сомневаюсь, что в Оракле это не так.
Впрочем ссылка меня может переубедить и сильно удивить (обычно у Оракла здравый смысл таки присутствует)
27 сен 07, 11:42    [4722798]     Ответить | Цитировать Сообщить модератору
 Re: nested transaction vs savepoint  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
hvlad
Commit savepoint'а это просто указание движку забыть об этом savepoint'е. Я сильно сомневаюсь, что в Оракле это не так.
Впрочем ссылка меня может переубедить и сильно удивить (обычно у Оракла здравый смысл таки присутствует)


В Oracle savepoint-у НЕЛЬЗЯ делать commit, только rollback
если было бы можно - тогда действительно был бы маразм
27 сен 07, 11:52    [4722879]     Ответить | Цитировать Сообщить модератору
 Re: nested transaction vs savepoint  [new]
hvlad
Member

Откуда:
Сообщений: 11554
Gluk (Kazan)
hvlad
Commit savepoint'а это просто указание движку забыть об этом savepoint'е. Я сильно сомневаюсь, что в Оракле это не так.
Впрочем ссылка меня может переубедить и сильно удивить (обычно у Оракла здравый смысл таки присутствует)


В Oracle savepoint-у НЕЛЬЗЯ делать commit, только rollback
если было бы можно - тогда действительно был бы маразм
Слава Ларри, я в него верил :)
27 сен 07, 12:09    [4723045]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3 4 5 6 7   вперед  Ctrl      все
Все форумы / Сравнение СУБД Ответить