Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
ППЛ помогите разобраться с уровнями изоляции
|
|||
|---|---|---|---|
|
#18+
Привет всем ! 1. если выполнить SET TRANSACTION ISOLATION LEVEL ..., то это будет опеределено ТОЛЬКО для трансакции в которой было это выполнено или для всего сервера 2. если идет конструкция BEGIN TRANSACTION ..... __BEGIN TRANSACTION __ .... __COMMIT TRANSACTION COMMIT TRANSACTION уровень изолированности наследуется или нет 3. будет ли работать след конструкция BEGIN TRANSACTION T1 SET TRANSACTION ISOLATION LEVEL READ COMMITTED ..... __BEGIN TRANSACTION T2 __SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED __ .... __COMMIT TRANSACTION COMMIT TRANSACTION и что будет если я откачу ( rollback ) транзакцию с именем T1 ?? Спасибо з.ы. подскажите URL, где можно об этом почитать на русском. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2001, 12:30 |
|
||
|
ППЛ помогите разобраться с уровнями изоляции
|
|||
|---|---|---|---|
|
#18+
Как-то по понедельникам, идеи странно кучкуются 4. BEGIN TRANSACTION trnsT1 SET TRANSACTION ISOLATION LEVEL READ COMMITTED (1)изменение необходимых данных SAVE TRANSACTION trnsChangeDataT1 __EXEC @Return = spTransferData __IF ( @Return = 1 ) ____ROLLBACK TRANSACTION trnsChangeDataT1 __ELSE ____COMMIT TRANSACTION trnsT1 Есть такая конструкция ( может в чемто не корректно, это идея ) Вопрос 1. увижу ли я изменения в spTransferData произведенные на этапе (1) ? 2. если я произведу изменение данных в spTransferData, откатятся ли он при ROLLBACK TRANSACTION trnsChangeDataT1, при условии, что внутри spTransferData выполняется BEGIN TRANSACTION ? 5. Нашел в BOL BEGIN TRANSACTION royaltychange UPDATE titleauthor SET royaltyper = 65 FROM titleauthor, titles WHERE royaltyper = 75 AND titleauthor.title_id = titles.title_id AND title = 'The Gourmet ave' UPDATE titleauthor SET royaltyper = 35 FROM titleauthor, titles WHERE royaltyper = 25 AND titleauthor.title_id = titles.title_id AND title = 'The Gourmet ' SAVE TRANSACTION percentchanged UPDATE titles SET price = price * 1.1 WHERE title = 'The Gourmet Microwave' ROLLBACK TRANSACTION percentchanged COMMIT TRANSACTION COMMIT TRANSACTION какую транзакцию он прекращает ?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2001, 13:02 |
|
||
|
ППЛ помогите разобраться с уровнями изоляции
|
|||
|---|---|---|---|
|
#18+
1. SET TRANSACTION ISOLATION LEVEL устанавливается только для текущего коннекта. 2. Нет такого понятия - наследование isolation level. Есть, условно говоря, некий флажок, глобальный для данного коннекта - какой уровень изоляции. Каким он последний раз был установлен, таким он и будет, пока ты его явно не изменишь. 3. Установление isolation level никак не влияет на начало/окончание транзакции - это независимые понятия. Кстати, если уж ты хочешь использовать именованные транзакции, то лучше commit и rollback делать тоже именованными - иначе в конце концов это может привести к конкретному геморрою - код будет нечитабельным, потому что безымянные commit/rollback относятся к текущей транзакции. Если ты откатишь T1, то откатываются и все внутренние транзакции, даже если для них был сделан commit - полная вложенность. Избегай пересечения - конструкции типа begin tran tran1 begin tran tran 2 commit/rollback tran tran 1 commit/rollback tran tran 2 приведут к полной фигне в части случаев. Полностью вложенные друг в друга транзакции - это нормально и естественно. 4.1 Изменения увидишь даже без SET TRANSACTION ISOLATION LEVEL. Потому что его установка нужна для того, чтобы видеть изменения, делающиеся в ДРУГОМ коннекте, а ты находишься в том же самом. 4.2 Изменения откатятся, потому что транзакция внутри spTransferData является вложенной по отношению к trnsChangeDataT1. 5. Безымянный commit/rollback относится к текущей транзакции. В приведенном тобой примере есть только 1 транзакция. Save - это не открытие новой транзакции, это запоминание некоей точки, к которой можно потом вернуться. Поэтому в конце приведенного кода должен получиться следующий результат - первые 2 update'а сохранились, а 3-й (тот который попал под rollback) откачен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2001, 16:30 |
|
||
|
ППЛ помогите разобраться с уровнями изоляции
|
|||
|---|---|---|---|
|
#18+
А вложенные транзакции вообще существуют? Я всегда считал что нет. То есть написать то красиво можно, но при откате вложенности всё равно нет. Допустим есть такой код: create table t(i int) insert t select 1 go begin tran t1 update t set i=2 begin tran t2 update t set i=3 commit tran t2 commit tran t1 Куда и как мне надо вставить rollback tran t2, что бы в таблице осталось значение 2? Save tran - это не то, тогда можно и без вложенных транзакций. Заранее благодарен ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2001, 17:13 |
|
||
|
ППЛ помогите разобраться с уровнями изоляции
|
|||
|---|---|---|---|
|
#18+
Да, не совсем верно у меня написано. Вообще наиболее точное описание как всегда в BOL. Topic - nested transactions. Итак, поправки насчет rollback'а. Он действует на самую внешнюю транзакцию, даже если явно указать имя внутренней транзакции. Так что begin tran tran1 begin tran tran2 rollback tran tran2 commit tran tran1 не сработает. После rollback @@rowcount = 0. А вот commit действует на самую внутреннюю транзакцию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2001, 17:42 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32005588&tid=1826789]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
25ms |
get topic data: |
8ms |
get forum data: |
3ms |
get page messages: |
39ms |
get tp. blocked users: |
2ms |
| others: | 247ms |
| total: | 354ms |

| 0 / 0 |
