№50 Понятие транзакции и ее необходимость. Операторы COMMIT, ROLLBACK


Транзакции, операторы управления транзакциями: COMMIT, ROLLBACK, SAVEPOINT; журнал транзакций, уровни блокировок.

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

Существуют различные модели транзакций, которые могут быть классифицированы на основании различных свойств, включающих структуру транзакции, параллельность внутри транзакции, продолжительность и т.д. Чаще всего имеют в виду традиционные транзакции, характеризуемые четырьмя классическими свойствами: атомарности, согласованности, изолированности, долговечности (прочности) —ACID (Atomicity, Consistency, Isolation, Durability). Иногда традиционные транзакции называют ACID-транзакциями. Упомянутые выше свойства означают следующее.

Свойство атомарности выражается в том, что транзакция должна быть выполнена в целом или не выполнена вовсе.

Свойство согласованности гарантирует, что по мере выполнения транзакций данные переходят из одного согласованного состояния в другое —транзакция не разрушает взаимной согласованности данных.

Свойство изолированности означает, что конкурирующие за доступ к базе данных транзакции физически обрабатываются последовательно, изолированно друг от друга, но для пользователей это выглядит так, как будто они выполняются параллельно.

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

Таким образом, возможны два варианта завершения транзакции. Если все операторы выполнены успешно, и в процессе выполнения транзакции не произошло никаких сбоев программного или аппаратного обеспечения, транзакция фиксируется.

Фиксация транзакции —это действие, обеспечивающее запись на диск изменений в базе данных, которые были сделаны в процессе выполнения транзакции. До тех пор, пока транзакция не зафиксирована, возможно аннулирование этих изменений, восстановление базы данных в то состояние, в котором она была на момент начала транзакции. Фиксация означает, что все результаты выполнения транзакции становятся постоянными. Они станут видимыми другим транзакциям только после того, как текущая транзакция будет зафиксирована. До этого момента все данные, затрагиваемые транзакцией, будут "видны" пользователю в состоянии на начало текущей транзакции.

Если в процессе выполнения транзакции случилось нечто такое, что делает невозможным ее нормальное завершение, база данных должна быть возвращена в исходное состояние. Откат транзакции —это действие, обеспечивающее аннулирование всех изменений данных, которые были сделаны операторами SQL в теле текущей незавершенной транзакции.

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

Oператоры управления транзакциями: COMMIT, ROLLBACK, SAVEPOINT

COMMIT - зафиксировать транзакцию
ROLLBACK - отменить изменения в текущей транзакции
SAVEPOINT - создать контрольную точку внутри транзакции
Транзакции могут использоваться только с таблицами, принадлежащими БД.

Журналы транзакций

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

Журналы транзакций работают по циклическому принципу. Пусть в некоторой базе данных есть два журнала: logA и logB. По мере того, как транзакции создают, удаляют и модифицируют информацию в базе данных, все изменения заносятся в logA. Когда logA оказывается целиком заполненным, происходит переключение журналов, и все вновь произведенные транзакции начинают записываться в logB. По заполнении lоgВ происходит новое переключение журналов, и транзакции опять сохраняются в lоgA.


Hosted by uCoz