Поведение сериализуемых транзакций в Oracle? - PullRequest
0 голосов
/ 18 сентября 2011

У меня ниже последовательность транзакций с уровнем изоляции как сериализуемый

 trnsaction1                               transaction2

                                           get row2   // value1

 update row1
 update row2//update to 2
 commit

                                           get row1
                                           get row2 //  lin6

транзакция 2 увидит обновленное значение строки 1 и строки 2. Конечно, транзакция 2 не увидит обновленное значение строки 2 (обновление транзакцией 1) в строке 6, но не уверена, что увидит обновленное значение строки 1, обновленное транзакцией1

1 Ответ

0 голосов
/ 18 сентября 2011

Как только транзакция 1 завершит свою работу, транзакция 2 увидит обновленные изменения в обеих последних двух строках.То есть, если вы не выполните SET TRANSACTION READ ONLY как самое первое действие в вашей транзакции.

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

Изменить:

Стив, я считаю, что это неправильно.Из документации :

[Чтение подтвержденной транзакции]

Это уровень изоляции транзакции по умолчанию.Каждый запрос, выполняемый транзакцией, видит только те данные, которые были зафиксированы до начала запроса (но не транзакции).Запрос Oracle никогда не читает грязные (незафиксированные) данные.

Поскольку Oracle не запрещает другим транзакциям изменять данные, считываемые запросом, эти данные могут быть изменены другими транзакциями между двумя выполнениями запроса.Таким образом, транзакция, которая выполняет данный запрос дважды, может испытывать как неповторимое чтение, так и фантомы.

[Serializable]

Сериализуемые транзакции видят только те изменения, которые были зафиксированы ввремя начала транзакции плюс изменения, внесенные самой транзакцией с помощью операторов INSERT, UPDATE и DELETE.Сериализуемые транзакции не вызывают повторяющихся операций чтения или фантомов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...