20июн Транзакция. Немного общей теории.

Что такое ТРАНЗАКЦИЯ. Общее понятие и основные свойства. Некоторые особенности транзакций в СУРБД ORACLE.

Транзакция - одно из фундаментальных понятий, отличающих базу данных от обычной файловой системы и от простого набора таблиц. Поддержание транзакций является основой обеспечения логической целостности баз данных. В многопользовательских системах они составляют основу изолированности пользователей (см. соответствующую статью о пользовательских блокировках). Каждая транзакция начинается при целостном состоянии БД и оставляет это состояние целостным после своего завершения. Поэтому транзакцию можно назвать единицей активности пользователя по отношению к БД. Если СУБД корректно манипулирует совместно выполняющимися транзакциями, то любой пользователей получает иллюзию монопольного владения базой, т.е. пребывает в изолированности. Главная задача транзакций - обеспечить целостность данных в случаях, когда несколько SQL-операторов выполняют зависящие друг от друга изменения данных.

Классический пример транзакции, перевод денег с одного счета на другой: UPDATE accounts SET AccSum = AccSum - 1000 WHERE AccNumber = 12345; UPDATE accounts SET AccSum = AccSum + 1000 WHERE AccNumber = 67890; Что будет, если первый оператор выполнится, а второй по какой-то причине - нет (сбой сервера, неправильный номер счета, переполнение... - мало ли какая может быть ошибка)? Деньги с одного счета списаны, а на другой не поступили...

Механизм транзакций как раз и позволяет корректно выходить из подобных ситуаций. Объединив эти два оператора UPDATE в одну транзакцию, мы обеспечим выполнение (или невыполнение) их обоих как одного целого.

Транзакция - логический блок работы, включающий один или большее количество утверждений SQL, выполненных отдельным пользователем. Транзакция представляется как нечто неделимое и единое целое:

  • единое - либо транзакция успешно выполняется, и СУБД фиксирует изменения БД, произведенные этой транзакцией, во внешней памяти, либо ни одно из этих изменений никак не отражается на состоянии БД.
  • неделимое - Под транзакцией понимается неделимая последовательность операторов манипулирования данными (чтения, удаления, вставки, модификации) такая, что-либо результаты всех операторов, входящих в транзакцию, отображаются в БД, либо воздействие всех этих операторов полностью отсутствует.

Транзакции базы данных обладают свойствами, сокращенно называемыми ACID (Atomicity, Consistency, Isolation, Durability). Вот что означают эти свойства:

  • Неделимость (Atomicity). Транзакция либо выполняется полностью, либо не выполняется.
  • Согласованность (Consistency). Транзакция переводит базу данных из одного согласованного состояния в другое.
  • Изолированность (Isolation). Результаты транзакции становятся доступны для других транзакций только после ее фиксации.
  • Продолжительность (Durability). После фиксации транзакции изменения становятся постоянными.

Транзакции в Oracle полностью соответствуют стандарту SQL-92, но есть только две тонкости:

Транзакции только на чтение. Если транзакция объявлена как "только на чтение" (SET TRANSACTION READ ONLY) - это гарантирует, что любой SELECT, выполненный в рамках этой транзакции, выдаст данные в том состоянии, в каком они были на момент начала транзакции. В пределах транзакции "только на чтение" запрещено любое изменение данных. При этом транзакция "только на чтение" не устанавливает никаких блокировок данных и не мешает изменять эти данные другим сессиям. Часто используется для формирования отчетов (см. соответствующую статью о блокировках).

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

Комментарии (0)



Новый комментарий

Имя
Электронная почта
 
Ваш сайт
Защита от спама: укажите сумму 3 + 9
   
 

Поиск по блогам



Подпишись на RSS:

RSS - Подписаться на блог



Читателям


Рекомендую к прочтению





Разделы блога



Последние публикации



Последние коментарии