Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Базы данных.doc
Скачиваний:
114
Добавлен:
16.03.2016
Размер:
5.67 Mб
Скачать

Явная инициация транзакции

Для явного образования транзакции поддерживается оператор START TRANSACTION, определяемый следующими синтаксическими правилами:

START TRANSACTION mode_commalist

Этот оператор очень похож на SET TRANSACTION. Единственное (хотя и очень существенное) отличие состоит в том, что выполнение оператораSTART TRANSACTIONприводит не только к установке характеристик транзакции, но и к реальной инициации транзакции.

22.3.3. Уровни изоляции sql-транзакции

В стандарте SQL:1999 уровни изоляции определяются на основе нескольких феноменов, которые могут возникать при выполнении транзакций183).

Феномен «грязного» чтения (dirty read)

Этому феномену подвержены транзакции, в которых допускается возможность видеть изменения объектов базы данных, производимые другими одновременно выполняемыми и еще не зафиксированными транзакциями. Простой пример феномена «грязного» чтения показан на рис. 22.4.

Рис. 22.4.Феномен «грязного» чтения

На этом рисунке показано, что в момент времени t0были образованы две транзакцииT1иT2. В момент времениt1транзакцияT1успешно выполняет операцию модификации некоторого объекта базы данныхO. В момент времениt2(t2>t1) транзакцияT2читает объектO, после чего успешно завершается в момент времениt3. Транзакция жеT1завершается в момент времениt4(t4>t3), причем в ней выполняется операторROLLBACK,

183 В действительности, этот подход был введен еще в проекте System R.

что приводит к ликвидации в базе данных последствий изменения объекта O. В результате оказывается, что в транзакцииT2обрабатывались данные, которые реально не существуют в базе данных (отсюда и термин «грязные» данные).

В SQL феномен «грязного» чтения может наблюдаться у транзакций, выполняемых на уровне изоляции READ UNCOMMITTED. Рекомендуется использовать этот уровень изоляции только в тех транзакциях, для выполнения функций которых точные данные не обязательны (например, в транзакциях, производящих статистическую обработку).

Феномен неповторяемого чтения (unrepeatable read)

Этому феномену подвержены транзакции, читающие некоторые объекты базы данных и допускающие изменения уже прочитанных объектов другими транзакциями. Пример феномена неповторяемого чтения показан на рис. 22.5.

Рис. 22.5.Феномен неповторяемого чтения

На этом рисунке показано, что в момент времени t0были образованы две транзакцииT1иT2. В момент времениt1транзакцияT2выполняет операцию чтения некоторого объекта базы данныхO(например, производит выборку строки из таблицы с указанием значения первичного ключа). В момент времениt2(t2>t1) транзакцияT1изменяет объектO(модифицирует или даже удаляет). В момент времениt3(t3>t2) транзакцияT2повторно считывает объектOи обнаруживает, что он изменился или вовсе отсутствует. Другими словами, в транзакцииT2повторное выполнение выборки объекта базы данныхOдало результат, отличный от результата первого выполнения (отсюда и происходит термин «неповторяемое чтение»).

В SQL феномен неповторяемого чтения может наблюдаться у транзакций, выполняемых на уровне изоляции READ COMMITTED(этот уровень изоляции, как показывает его название, гарантирует отсутствие феномена «грязного» чтения).

Феномен фантомов

Этому феноменуподвержены транзакции, производящие выборку строк и таблиц базы данных и допускающие добавление к данным таблицам другими транзакциями строк, которые удовлетворяют условию выборки. Пример феномена фантомов показан нарис. 22.6.

Рис. 22.6.Феномен фантомов

На этом рисунке показано, что в момент времени t0были образованы две транзакции,T1иT2. В момент времениt1транзакцияT2выполняет операцию выборки строк из таблицыRпо условиюc. В момент времениt2(t2>t1) транзакцияT1выполняет над таблицейRоперацию обновления (вставки или модификации строк), в результате которой в таблицеRпоявляются дополнительные строки, удовлетворяющие условиюc. В момент времениt3(t3>t2) транзакцияT2повторно выполняет операцию выборки строк из таблицыRпо условиюcи обнаруживает наличие в результате дополнительных фантомных строк.

В SQL феномен фантомов может наблюдаться у транзакций, выполняемых на уровне изоляции REPEATABLE READ(этот уровень изоляции, как показывает его название, гарантирует отсутствие феномена неповторяемого чтения).

Наконец, для транзакций, выполняемых на уровне изоляцииSERIALIZABLE, невозможно и проявление феномена фантомов. Терминserializable (сериализуемый)используется по той причине, что при работе на данном уровне изоляции суммарный эффект выполнения набора транзакций{T1, T2, ... , Tn}идентичен эффекту некоторого последовательного выполнения этих транзакций. Это означает предельную изолированность транзакций. Общая картина взаимосвязи уровней изоляции и феноменов транзакций показана втаблице 22.2.

Таблица 22.2. Уровни изоляции и феномены

Уровень

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

Неповторяемое чтение

Фантомы

READ UNCOMMITTED

Возможно

Возможно

Возможны

READ COMMITTED

Невозможно

Возможно

Возможны

REPEATABLE READ

Невозможно

Невозможно

Возможны

SERIALIZABLE

Невозможно

Невозможно

Невозможны