|
|
|
nested transaction vs savepoint
|
|||
|---|---|---|---|
|
#18+
Привет Всем Возник спор - вложенные транзакции (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.09.2007, 20:13 |
|
||
|
nested transaction vs savepoint
|
|||
|---|---|---|---|
|
#18+
мне кажется ни то ни другое если вы пишите вложенные транзакции, то при откатывании в любом месте откатыватся будет всё, независимо от того, что какие-то вложенные транзакции завершились save tran фиксирует текущее состояние и откатываться тогда будет до него или Вы другое имели в виду? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2007, 22:45 |
|
||
|
nested transaction vs savepoint
|
|||
|---|---|---|---|
|
#18+
2 Dmitry Arefiev : одно и то же. SergSupersave tran фиксирует текущее состояние и откатываться тогда будет до негоЭто в где ??? Транзакция или вся выполняется, или вся не выполняется. Всё остальное - не транзакция ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2007, 00:02 |
|
||
|
nested transaction vs savepoint
|
|||
|---|---|---|---|
|
#18+
2 Dmitry Arefiev Это принципиально разные вещи. Основное принципиальное отличие в том, что вложенные транзакции в классическом понимании транзакций - вообще невозможны. Если есть одна транзакция (внешняя), внутри которой запускается еще одна (внутренняя), то ACID-ное durability требует, чтобы изменения, прибитые внутренним commit'ом были навсегда. Но тогда непонятно что должен делать случившийся позже внешний rollback, он ни оставить внутренние изменения не может (иначе это не rollback), ни откатить (иначе лесом пошло внутреннее durability). Можно модифицировать понятие durability, внеся туда понятие "области видимости". Так, например, сделано в MS Access (интерсно, где еще?). Можно ввести суррогатные сейвпоинты. В простых случаях поведение и использование - идентично, в более сложных - нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2007, 01:07 |
|
||
|
nested transaction vs savepoint
|
|||
|---|---|---|---|
|
#18+
Пьяный Лох2 Dmitry Arefiev Это принципиально разные вещи. Основное принципиальное отличие в том, что вложенные транзакции в классическом понимании транзакций - вообще невозможны.Да, конечно. Я имел в виду практическую сторону вопроса, ибо некоторые производители называют сейвпойнты вложенными тр-циями ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2007, 01:39 |
|
||
|
nested transaction vs savepoint
|
|||
|---|---|---|---|
|
#18+
hvlad SergSupersave tran фиксирует текущее состояние и откатываться тогда будет до негоЭто в где ??? Это в Oracle :) Ну и наверное там где ЕСТЬ savepoint-ы Так что таки НЕТ это не одно и то-же ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2007, 08:59 |
|
||
|
nested transaction vs savepoint
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan) hvlad SergSupersave tran фиксирует текущее состояние и откатываться тогда будет до негоЭто в где ??? Это в Oracle :) Ну и наверное там где ЕСТЬ savepoint-ы Так что таки НЕТ это не одно и то-же если в rollback указано, что откатываться надо до savepoint-а ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2007, 09:03 |
|
||
|
nested transaction vs savepoint
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan) GoldSquidВложенных транзакций не бывает! Код: plaintext 1. бывают Ну, а если почитать: 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.09.2007, 09:32 |
|
||
|
nested transaction vs savepoint
|
|||
|---|---|---|---|
|
#18+
Пьяный ЛохACID-ное durability требует, чтобы изменения, прибитые внутренним commit'ом были навсегда Это про транзакции. А ACID для вложенных транзакций где-то описывается ? Пьяный ЛохМожно модифицировать понятие durability, внеся туда понятие "области видимости". Тогда это становится savepoint'ом, который nested transaction. Пьяный ЛохВ простых случаях поведение и использование - идентично, в более сложных - нет. Да, вот и хотелось бы увидить хотя бы один случай, где они разные ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2007, 09:43 |
|
||
|
nested transaction vs savepoint
|
|||
|---|---|---|---|
|
#18+
pkarklin Gluk (Kazan) GoldSquidВложенных транзакций не бывает! Код: plaintext 1. бывают Ну, а если почитать: 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.09.2007, 09:46 |
|
||
|
nested transaction vs savepoint
|
|||
|---|---|---|---|
|
#18+
Dmitry Arefiev Да, вот и хотелось бы увидить хотя бы один случай, где они разные ... В Oracle savepoint неявно ставится перед каждым DML-оператором, что позволяет откатить этот оператор при возникновении ошибки. Попробуйте сделять то-же с помощью "вложенных" транзакций. Кстати, в Oracle есть еще автономные транзакции, которые тоже не имеют никакого отношения к "вложенным" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2007, 09:49 |
|
||
|
nested transaction vs savepoint
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan)Попробуйте сделять то-же с помощью "вложенных" транзакций. И в чем проблема ? Gluk (Kazan)Кстати, в Oracle есть еще автономные транзакции, которые тоже не имеют никакого отношения к "вложенным" Автономные транзакции скорее ближе к множественным транзакциям Interbase. Т.е. они скорее всего параллельные а не вложенные :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2007, 09:54 |
|
||
|
nested transaction vs savepoint
|
|||
|---|---|---|---|
|
#18+
Dmitry Arefiev Gluk (Kazan)Попробуйте сделять то-же с помощью "вложенных" транзакций. И в чем проблема ? В том чтобы откатить деятельность оператора, а не всю транзакцию ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2007, 10:08 |
|
||
|
nested transaction vs savepoint
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan)В том чтобы откатить деятельность оператора, а не всю транзакцию Ну так откатывайте себе на здоровье, используя хоть вложенные транзакции, хоть точки сохранения. Только обрамляя каждый оператор блоком обработки исключительных ситуаций. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2007, 10:23 |
|
||
|
nested transaction vs savepoint
|
|||
|---|---|---|---|
|
#18+
Насколько я понимаю, разница между savepoint и nested transactions заключается в том, что вложенные транзакции позволяют образуют независимый собственный домен блокировок, в то время, как точки сохранения используют один общий домен - родительскую транзакцию. Кстати, существуют и такой подход, когда текстуально вложенная транзакция подтверждается независимо от статуса завершения объемлющей. На практике они используются практически в любой БД, применяющей UNDO/REDO протоколирование. В ARIES они называется nested top actions (NTA). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2007, 10:25 |
|
||
|
nested transaction vs savepoint
|
|||
|---|---|---|---|
|
#18+
Dmitry Arefiev Gluk (Kazan)В том чтобы откатить деятельность оператора, а не всю транзакцию Ну так откатывайте себе на здоровье, используя хоть вложенные транзакции, хоть точки сохранения. Только обрамляя каждый оператор блоком обработки исключительных ситуаций. В MS SQL rollback откатит всю транзакцию, а не только вложенную в этом и разница 2 teras Что есть домен блокировок ? В MS SQL 2000 вложенный Begin Transaction не более чем синтаксический сахар ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2007, 10:34 |
|
||
|
nested transaction vs savepoint
|
|||
|---|---|---|---|
|
#18+
2 Dmitry Arefiev Это про транзакции. А ACID для вложенных транзакций где-то описывается ? Нигде не описывается. Потому что не бывает ACID для вложенных транзакций. Конкретно - не бывает D. Бывает только "модифицированное D", т.е. для внешней транзакции закомиченные (внутренним комитом) изменения вполне дюрабильны, а для всего остального мира их еще не существует. Тогда это становится savepoint'ом, который nested transaction. Не становится. Да, вот и хотелось бы увидить хотя бы один случай, где они разные ... Напишите с использованием сейвпойнтов процедурину, которая обеспечивает атомарность, констистентность и изолированность (нужного уровня) для своих операций как при обычном вызове этой процедуры, так и при вызове внутри другой транзакции (в т.ч. с другим уровнем изоляции). И чтобы откат этой процедуры (в случае "вложенного" её вызова) не вызывал отката родительской транзакции, о которой вообще-то неизвестно ничего. Когда напишете - тогда приходите. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2007, 11:06 |
|
||
|
nested transaction vs savepoint
|
|||
|---|---|---|---|
|
#18+
2 Dmitry Arefiev З.Ы. Как было правильно сказано, сейвпоинты - это синтаксический сахар. Т.е. вроде как нельзя вложенные транзакции, но очччень хочеццо уметь "откатиться на чуть-чуть", причем сделать это более удобным способом, нежели выполнением обратных операторов. Всё, кроме как для "откатов на чуть-чуть" сейвпоинты больше ни для чего нужны быть не могут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2007, 11:37 |
|
||
|
nested transaction vs savepoint
|
|||
|---|---|---|---|
|
#18+
Пьяный Лох2 Dmitry Arefiev З.Ы. Как было правильно сказано, сейвпоинты - это синтаксический сахар. Т.е. вроде как нельзя вложенные транзакции, но очччень хочеццо уметь "откатиться на чуть-чуть", причем сделать это более удобным способом, нежели выполнением обратных операторов. Всё, кроме как для "откатов на чуть-чуть" сейвпоинты больше ни для чего нужны быть не могут. Не надо с больной головы на здоровую. Я говорил про вложенные транзакции. savepoint-ы сахар вполне себе семантический и на роль вложенных транзакций никогда не претендовавший. У него типа свои задачи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2007, 11:39 |
|
||
|
nested transaction vs savepoint
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan) Dmitry Arefiev Да, вот и хотелось бы увидить хотя бы один случай, где они разные ... В Oracle savepoint неявно ставится перед каждым DML-оператором, что позволяет откатить этот оператор при возникновении ошибки. Попробуйте сделять то-же с помощью "вложенных" транзакций.А в где они не ставятся ? :) С помощью "вложенных" это попробовать не получится, ибо их не бывает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2007, 11:40 |
|
||
|
nested transaction vs savepoint
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan) hvlad SergSupersave tran фиксирует текущее состояние и откатываться тогда будет до негоЭто в где ??? Это в Oracle :) Ну и наверное там где ЕСТЬ savepoint-ы Так что таки НЕТ это не одно и то-жеCommit savepoint'а это просто указание движку забыть об этом savepoint'е. Я сильно сомневаюсь, что в Оракле это не так. Впрочем ссылка меня может переубедить и сильно удивить (обычно у Оракла здравый смысл таки присутствует) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2007, 11:42 |
|
||
|
nested transaction vs savepoint
|
|||
|---|---|---|---|
|
#18+
hvladCommit savepoint'а это просто указание движку забыть об этом savepoint'е. Я сильно сомневаюсь, что в Оракле это не так. Впрочем ссылка меня может переубедить и сильно удивить (обычно у Оракла здравый смысл таки присутствует) В Oracle savepoint-у НЕЛЬЗЯ делать commit, только rollback если было бы можно - тогда действительно был бы маразм ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2007, 11:52 |
|
||
|
nested transaction vs savepoint
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan) hvladCommit savepoint'а это просто указание движку забыть об этом savepoint'е. Я сильно сомневаюсь, что в Оракле это не так. Впрочем ссылка меня может переубедить и сильно удивить (обычно у Оракла здравый смысл таки присутствует) В Oracle savepoint-у НЕЛЬЗЯ делать commit, только rollback если было бы можно - тогда действительно был бы маразмСлава Ларри, я в него верил :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2007, 12:09 |
|
||
|
|

start [/forum/topic.php?fid=35&msg=34829931&tid=1553230]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
34ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 255ms |
| total: | 380ms |

| 0 / 0 |
