В соответствии с this уровень сериализации Serializable articale выполняет блокировку чтения и блокировку строк по строкам. Таким образом, если в одной транзакции я выполняю оператор SELECT
на некоторых строках (или в строке), другие транзакции, которые будут пытаться запросить одни и те же строки (или подмножество этих строк), будут блокироваться до тех пор, пока первый не совершит фиксацию или откат. Правильно? Но в oracle я пытаюсь выполнить такой сценарий, а вторая транзакция не была заблокирована. Почему он не блокируется, пока я не совершу фиксацию в первой транзакции?Сериализуемый уровень изоляции в оракуле
ответ
Oracle использует multiversionning гарантировать чтение-consitency без блокировки записи:
для чтения соответствует запросам
Данные, возвращаемые запросом привержен и соответствует отношению к одной точке в время.
неблокирования запросы
Читателей и писатели данных не блокирует другу к другу с
При выполнении SELECT, в Read-ангажированной изоляции, база данных реконструируют строки, как они были в начале запроса, чтобы у вас было согласованное представление данных (все блоки извлекаются в один и тот же момент времени). Oracle использует данные отмены, чтобы отменить изменения, внесенные в блоки после, начался запрос (также изменения из других нерешенных транзакций).
Принцип тот же с сериализуемой изоляцией транзакций, за исключением того, что Oracle реконструирует строки так, как они были в начале транзакции.
Для дальнейшего чтения я предлагаю вам взглянуть на главу «Multi-Versioning and Concurrency» из книги Тома Ките.
Оракул не принимает считывающие блокировки. У них механизм CR.
Вы можете указать ссылку, где я могу прочитать об этом механизме? – maks