Функции администратора. Управление памятью. Управление многопользовательским доступом. Экспорт и импорт данных, страница 4

При выключенном режиме AUTOCOMMIT приложение может само управлять разбиением выполняемых им действий на транзакции. Первый SQL-оператор, выполняемый в приложении, начинает новую транзакцию. Все последующие операторы продолжают эту транзакцию, пока не встретится оператор COMMIT или ROLLBACK.

3.2. Нежелательные эффекты параллельной работы и уровни изоляции

Выполнение транзакциями свойства сериализуемости определяется установленным для нее уровнем изоляции. Уровни же изоляции определяются через нежелательные эффекты, которые могут возникать при параллельном выполнении транзакций. Эти эффекты следующие:

·   «Грязное» чтение (dirty read). Транзакция A в начале свей работы выполняет изменения каких-то данны, но еще не завершается. Параллельная транзакция B считывает измененные данные. Если далее транзакция A закончится откатом, то получится, что транзакция B прочитала неправильные данные.

·  Неповторяющееся чтение (unrepetable read). Транзакция A считывает какие-то данные из БД, а посля некоторого интервала времени считывает их снова. За интервал между двумя чтениями параллельная транзакция B может изменить эти данные, т.обр., транзакция A при втором чтении получит другой результат.

·  Неповторяющаяся выборка или фантом (phantom). Транзакция A выполняет выборку множества строк, которые удовлетворяют каким-то критериям. Потом параллельная транзакция B добавляет, удаляет или меняет какие-то строки в таблицах БД. Если транзакция A повторит выборку по тем же критериями, она может получить другое множество строк.

Стандартом SQL-92 предусмотренв 4 уровня изоляции:

·  незафиксированное чтения (READ UNCOMITTED);

·  зафиксированное чтения (READ COMITTED);

·  повторяющееся чтения (REPETABLE READ);

·  сериализация (SERIALIZABLE).

Если в транзакции установлен определенный уровень изоляции, то для нее гарантировано невозникновение определенных эффектов, что показано в таблице

Уровни изоляции и нежелательные эффекты

                             Эффект

Уровень

Грязное чтение

Неповтор.чтение

Фантом

Незафиксированное чтения

Да

Да

Да

Зафиксированное чтение

Нет

Да

Да

Повторяющееся чтение

Нет

Нет

Нет

Сериализация

Нет

Нет

Нет

Уровень изоляции может устанавливаться для всего приложения или для отдельной транзакции.

Уровень изоляции, установленные стандартом, во-первых, определены недостаточно четко, во-вторых, , не являются обязательными для начального уровня соответствия стандарту. Поэтому реальные СУБД достаточно

3.3. Блокировки

Блокировки являются средством предотвращения нарушений целостности данных при параллельном доступе. Блокировки устанавливаются явным образом:

·  оператором LOCK TABLE;

·  оператором с SELECT опцией FOR;

·  оператором OPEN CURSOR, если в объявлении курсора задана опция FOR.

Кроме того, операторами чтения и изменения данных могут устанавливаться блокировки даже, если они явным образом не заданы в тексте оператора.

Различаются следующие основные режимы блокировок:

·  S (share) - разделение;

·  U (update) - изменение;

·  X (exlusive) - монополизация;

·  Z (superexlusive) - сверхмонополизация.

Режим блокировки характеризуется прежде всего размером объекта, к которому этот режим применяется. Так, режимы с намерениями применимы только по отношению к таблицам и подтаблицам, определяемым описанием курсора, другие режимы применимы также и к отдельным строкам.

Для приложения, установившего блокировку ("хозяина") может ограничиваться доступ к блокируемому объекту, в еще большей степени доступ ограничивается для других приложений, выполняющихся параллельно ("конкурентов").

Если "хозяин" установил блокировку на составной объект (таблицу, подтаблицу), и выполняет разрешенный доступ к отдельным строкам блокируемого объекта, то то режим блокировки этих строк может меняться (всегда в сторону ужесточения).