Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Неделя 09 Лекция 2 (14).doc
Скачиваний:
1
Добавлен:
13.11.2019
Размер:
93.7 Кб
Скачать

14.3. Свойства транзакций.

Существуют некоторые свойства, которыми должна обладать любая из транзакций. Ниже представлены четыре основных свойства (ACID – аббревиатура, составленная из первых букв их английских названий).

  • Атомарность. Это свойство типа "все или ничего". Любая транзакция представляет собой неделимую единицу работы, которая может быть либо выполнена вся целиком, либо не выполнена вовсе.

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

  • Изолированность. Все транзакции выполняются независимо одна от другой. Другими словами, промежуточные результаты незавершенной транзакции не должны быть доступны другим транзакциям.

  • Продолжительность. Результаты успешно завершенной (зафиксированной) транзакции должны сохраняться в базе данных постоянно и не должны быть утеряны в результате последующих сбоев.

14.4. Уровни изоляции транзакций: приложение клиента.

При одновременной работе нескольких клиентов с одной и той же БД возникают проблемы одновременного изменения данных.

Пусть пользователь А получил данные из таблицы Books и впоследствии изменил их. В это время, с той же записью в таблице Books, работает пользователь В. Он также изменил данные в той же записи, что и А, и пытается подтвердить их. Пользователь С работает с таблицей Books в режиме только для чтения. Сразу же возникает группа вопросов - позволять или не позволять В изменять запись, если А еще не подтвердил ее изменение? Позволять ли С видеть изменения, внесенные А и В? Может ли А видеть изменения, внесенные В, и наоборот?

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

Уровень изоляции транзакции определяет:

  • могут ли другие (конкурирующие) транзакции вносить изменения в данные, измененные текущей транзакцией;

  • может ли текущая транзакция видеть изменения, произведенные конкурирующими транзакциями, и наоборот.

Существуют следующие уровни изоляции транзакций - Dirty Read, Read Commited, Repeatable Read.

14.4.1. Уровень изоляции транзакции Dirty Read.

При уровне изоляции транзакций Dirty Read конкурирующие транзакции видят изменения, внесенные, но неподтвержденные текущей транзакцией. Если текущая транзакция отменит сделанные изменения, другие транзакции будут видеть недостоверные данные. Этот уровень изоляции может привести к серьезным ошибкам и применяется редко.

14.4.2. Уровень изоляции транзакции Read Committed.

Чтение данных. Конкурирующие транзакции оперируют только подтвержденными изменениями, сделанными в текущей транзакции.

Пусть транзакции А и В запускаются приложениями, в каждом из которых открыт набор данных, связанный с одной и той же таблицей базы данных. Пусть транзакция А изменила данные, но не подтвердила изменения. Пусть конкурирующая транзакция В пытается считать эти данные. Тогда она получает их в том состоянии, в котором они находились до старта транзакции А. Иными словами, транзакция В не видит в данных, которые она читает, неподтвержденных изменений, внесенных транзакцией А. Возможен и другой вариант. Пусть транзакция А вносит изменения в данные и не подтверждает их. В это время транзакция В стартует в приложении, в котором не открыт набор данных, связанный с той таблицей, в которой транзакция А произвела изменения. Тогда попытка открытия транзакцией В этого набора данных будет отвергнута. Открытие набора данных станет возможным лишь после того, как А подтвердит сделанные изменения.

Изменение данных. Пусть транзакции А и В запускаются приложениями, в каждом из которых открыт набор данных, связанный с одной и той же таблицей базы данных. Пусть транзакция А изменила данные, но не подтвердила изменения. Пусть конкурирующая транзакция В также внесла изменения в эти же данные. Тогда попытка транзакции В подтвердить внесенные ею изменения будет отвергнута.