Сериализуемый уровень изоляции в оракуле

Согласно этот сериализуемый уровень изоляции выполняет блокировку чтения, а также блокировку диапазона для строк. . Таким образом, если в одной транзакции я выполняю оператор SELECT для некоторых строк (или строк), другие транзакции, которые попытаются запросить те же строки (или подмножество этих строк), будут заблокированы до тех пор, пока первая не сделает фиксацию или откат. Правильно? Но в оракуле я пытаюсь выполнить такой сценарий, и вторая транзакция не заблокирована. Почему он не блокируется, пока я не выполню фиксацию в первой транзакции?


person maks    schedule 19.03.2012    source источник


Ответы (2)


Oracle использует многоверсионность, чтобы гарантировать согласованность чтения без блокировка пишет:

Запросы с согласованным чтением

Данные, возвращаемые запросом, зафиксированы и непротиворечивы относительно одного момента времени.

Неблокирующие запросы

Читатели и писатели данных не блокируют друг друга

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

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

Для дальнейшего чтения я предлагаю вам взглянуть на "Multi-Versioning and Concurrency" из одной из книг Тома Кайта.

person Vincent Malgrat    schedule 19.03.2012

Oracle не использует блокировки чтения. Имеют механизм CR.

person steve    schedule 19.03.2012