Oracle - select (Read Skew)

Merle
Уже с Приветом
Posts: 109
Joined: 26 Sep 2002 12:24

Oracle - select (Read Skew)

Post by Merle »

Подскажите пожалуйста что происходит в Oracle при выполнении SELECT'а без FOR UPDATE.
А именно интересует следующее:
Допустим есть две таблицы Tbl1 и Tbl2.
В первой транзакции я делаю SELECT X FROM Tbl1, затем приходит вторая транзакция, меняет X в Tbl1, меняет Y в Tbl2 и фиксируется.
Далее я в первой транзакции делаю SELECT Y FROM Tbl2.
Какое значение Y вернет второй SELECT первой транзакции? На момент старта первой транзакции или уже отредактированную версию?
Зависит ли это от уровня изоляции?

Интересует 9я версия, в доках я что-то с ходу не нашел, а сервера проверить под рукой нету.. ;(
strvt
Уже с Приветом
Posts: 342
Joined: 31 Jul 2001 09:01
Location: Minsk -> CT

Re: Oracle - select (Read Skew)

Post by strvt »

Если под "фиксируется" имеется ввиду commit, то должно вернуть отредактированную версию.
IA
Merle
Уже с Приветом
Posts: 109
Joined: 26 Sep 2002 12:24

Post by Merle »

Да, под "фиксируется" я имел ввиду именно commit.

Это действительно будет так? Даже при уровне изоляции Serializable?

Если не сложно, расскажите тогда, каким образом в Oracle гарантируется отсутствие неповторимого чтения и фантомов при Serializable IL. Или ткните в документацию, где это описано..

Просто при Tbl1=Tbl2 и X=Y, описанный сценарий как раз превращается в неповторимое чтение, тоесть уровень изоляции в этом случае Read Commited, а при Serializable такого происходить не должно..
User avatar
tengiz
Уже с Приветом
Posts: 4468
Joined: 21 Sep 2000 09:01
Location: Sammamish, WA

Re: Oracle - select (Read Skew)

Post by tengiz »

На оракловском уровне SERIALIZABLE (что на самом деле таковым не является) второй SELECT вернёт значение Y на момент начала первой транзакции, т.е. неотредактированную версию. Поэтому неповторяющегося чтения не будет.
Cheers

Return to “Вопросы и новости IT”