powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / ППЛ помогите разобраться с уровнями изоляции
6 сообщений из 6, страница 1 из 1
ППЛ помогите разобраться с уровнями изоляции
    #32005586
Привет всем !

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, где можно об этом почитать на русском.
...
Рейтинг: 0 / 0
ППЛ помогите разобраться с уровнями изоляции
    #32005588
Как-то по понедельникам, идеи странно кучкуются

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 какую транзакцию он прекращает ??
...
Рейтинг: 0 / 0
ППЛ помогите разобраться с уровнями изоляции
    #32005609
GreenSunrise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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) откачен.
...
Рейтинг: 0 / 0
ППЛ помогите разобраться с уровнями изоляции
    #32005622
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вложенные транзакции вообще существуют? Я всегда считал что нет. То есть написать то красиво можно, но при откате вложенности всё равно нет.

Допустим есть такой код:

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 - это не то, тогда можно и без вложенных транзакций.

Заранее благодарен
...
Рейтинг: 0 / 0
ППЛ помогите разобраться с уровнями изоляции
    #32005628
GreenSunrise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, не совсем верно у меня написано. Вообще наиболее точное описание как всегда в BOL. Topic - nested transactions.

Итак, поправки насчет rollback'а. Он действует на самую внешнюю транзакцию, даже если явно указать имя внутренней транзакции. Так что
begin tran tran1
begin tran tran2
rollback tran tran2
commit tran tran1
не сработает. После rollback @@rowcount = 0.

А вот commit действует на самую внутреннюю транзакцию.
...
Рейтинг: 0 / 0
ППЛ помогите разобраться с уровнями изоляции
    #32005635
GreenSunrise огромное спасибо.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / ППЛ помогите разобраться с уровнями изоляции
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]