Создание клиентских частей SQL-баз данных под Win95 и WinNT
edc1b056

Общие функциональные возможности.


Версия 7.3 сервера Oracle содержит ряд функциональных новшеств, направленных как на расширение возможностей разработчиков приложений, так и на развитие возможностей самой системы по обслуживанию большого числа одновременных пользователей. Обусловлено это целым рядом архитектурных решений, и не в последнюю очередь хорошо выверенным механизмом блокировок. Oracle устроен так, что разработчик приложений может не заботиться об эффектах многопользовательского режима работы. Сервер сам обеспечивает все необходимые блокировки (хотя позволяет выпонять их и "вручную"), причем осуществляет их всегда на минимально возможном уровне: скажем при изменении записи только эта запись и будет заблокирована от изменений другими пользователями (до завершения транзакции). В Oracle необходимость обеспечения блокировок учитывается уже в организации хранения данных, а сам этот механизм является неотъемлемой частью ядра сервера, "переплетаясь" со всеми его внутренними алгоритмами.

 И все-таки, проблема блокировки (моды изоляции чтения) продолжает существовать (пока один пользователь читает данные, другой пользователь может эти данные изменять). Стандарт ANSI SQL-92 описывает требования к реализации нескольких мод изоляции операций чтения от выполняющихся одновременно с ним транзакций. Они варьируются от самой "слабой" моды - "незафиксированного" (часто называемого "грязного") чтения, при котором допускается считывание данных незафиксированных транзакций, до самой "сильной" - "повторяемого" чтения, при котором гарантируется повторяемость результата при повторении операции в рамках транзакции. Беда в том, что само наличие всех этих различных мод изоляции в стандарте SQL отражает отнюдь не потребности пользователей, а различные степени компромисса с возможностями разработчиков СУБД. Пользователей же волнует совсем другое: как избежать тех неприятных эффектов, которые могут быть связаны с использованием всех стандарных мод изоляции, кроме самой "сильной" из них.


Сущность моды изоляции "согласованное чтение", реализуемой сервером Oracle состоит в том, что любая операция чтения в Oracle выдает пользователю данные только тех транзакций, которые были завершены к моменту начала операции. Oracle реализует "согласованное чтение" без использования блокировок вообще. Операция чтения в Oracle никогда не блокируется и никогда не блокирует других. Данный режим работы является среди коммерческих СУБД уникальным. Мода "согласованного чтения" не совпадает ни с одной из мод изоляции, принятых в стандарте SQL-92. Она "сильнее" (и следовательно покрывает) все моды, кроме "повторяемого чтения", но она "слабее" последней. Действительно, при повторе операции в моде "согласованного чтения" можно получить совсем другой результат, ибо изменится момент времени, по которому синхронизуется "срез" данных. Oracle, правда, предоставляет возможность объединять несколько операций чтения в read-only транзакцию, синхронизуя их при этом к одному моменту времени. В версии 7.3 Oracle позволяет в явном виде установить моду изоляции "repeatable read", причем опять без использования блокировок.


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