Сериализуемый уровень изоляции в Oracle - PullRequest
0 голосов
/ 19 марта 2012

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

Ответы [ 2 ]

2 голосов
/ 19 марта 2012

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

согласованные по чтению запросы

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

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

Устройства чтения и записи данных не блокируют друг друга

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

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

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

0 голосов
/ 19 марта 2012

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

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