При выключенном режиме 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) - сверхмонополизация.
Режим блокировки характеризуется прежде всего размером объекта, к которому этот режим применяется. Так, режимы с намерениями применимы только по отношению к таблицам и подтаблицам, определяемым описанием курсора, другие режимы применимы также и к отдельным строкам.
Для приложения, установившего блокировку ("хозяина") может ограничиваться доступ к блокируемому объекту, в еще большей степени доступ ограничивается для других приложений, выполняющихся параллельно ("конкурентов").
Если "хозяин" установил блокировку на составной объект (таблицу, подтаблицу), и выполняет разрешенный доступ к отдельным строкам блокируемого объекта, то то режим блокировки этих строк может меняться (всегда в сторону ужесточения).
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.