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

dbstalker, 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 механизм автономных транзакций позволяет создать новую транзакцию в пределах текущей. Подтверждение/откат изменений, сделанных в рамках автономной транзакции, производится независимо от родительской транзакции. Автономные транзакции могут быть вложенными, максимальный уровень вложенности определяется настройками сервера.

 

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

Я не спамер: введите суму 2+3

Реклама на сайте Такси в Украине

 

От авторов блога

О Блоге - прочитай перед началом.

Светлана Тихонова - мой профиль на Google+

Задать вопрос и получить ответ - уже решено 94 вопросов

Глоссарий - список терминов и сокращений

На блоге умеренно размещаю рекламу. Счетчик посещаемости:


 
 

Бизнес форум