Базы данных Oracle - статьи

         

Ну а как же быть с фантомами?


Казалось бы, какие тут еще могут быть проблемы, требующие усовершенствований? Проблема однако все-таки есть, вернее она была до выхода версии 7.3. Дело в том, что мода “согласованного чтения” не совпадает ни с одной из мод изоляции, принятых в стандарте SQL-92. Она “сильнее” (и следовательно покрывает) все моды, кроме “повторяемого чтения”, но она “слабее” последней. Действительно, при повторе операции в моде “согласованного чтения” можно получить совсем другой результат, ибо изменится момент времени, по которому синхронизируется “срез” данных. Oracle правда предоставлял (и естественно предоставляет) возможность объединять несколько операций чтения в т.н. read-only транзакцию, синхронизуя их при этом к одному моменту времени. Однако для произвольных (т.е. включающих операции изменения данных) транзакций проблема повторяемых чтений (ее еще называют проблемой фантомов, ибо при, казалось бы, одинаковых действиях получается разный результат) оставалась. Собственно значение этой проблемы вряд ли стоит преувеличивать, ибо достаточно трудно придумать осмысленный пример транзакции, меняющей данные в БД, в которой требовалось бы повторять одну и ту же операцию чтения несколько раз, да к тому же обязательно с одним и тем же результатом. Однако стандарт есть стандарт (в отношении мод изоляции он явно неудачен и справедливо подвергается критике. Причина тут видимо в том, что определяющими оказались не “запросы потребителя”, а “диктат производителя”. Хорошо еще, что стандарт не требует от СУБД обязательной реализации всех мод изоляции в буквальной форме, а лишь устанавливает минимальный уровень требований к ним). В принципе, конечно, придумать приложение, работающее в моде “повторяемого чтения” можно, и такое требование включено в ряд спецификаций (в частности в спецификацию теста TPC-C). Oracle конечно всегда мог обеспечить реализацию данной моды изоляции, но - увы - с использованием блокировок таблиц (это в свое время препятствовало выполнению корпорацией Oracle тестов TPC-C). В версии 7.3 положение изменилось: теперь Oracle позволяет в явном виде установить моду изоляции “repeatable read”, причем опять-таки без использования блокировок! *



Содержание раздела