2012-03-19 4 views
0

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

ответ

2

Oracle использует multiversionning гарантировать чтение-consitency без блокировки записи:

для чтения соответствует запросам

Данные, возвращаемые запросом привержен и соответствует отношению к одной точке в время.

неблокирования запросы

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

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

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

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

0

Оракул не принимает считывающие блокировки. У них механизм CR.

+1

Вы можете указать ссылку, где я могу прочитать об этом механизме? – maks