Для поддержания целостности данных (БД в актуальном состоянии) необходимо внутри программы организовать некую структуру, которая позволит поддерживать БД в непротиворечивом состоянии при различных ситуациях, включая сбои. Этот механизм для поддержания целостности БД называется транзакцией.
Транзакция – неделимая программная единица (логическая единица программы), обладающая свойством восстановления.
Особенность транзакции:
1.Если внутри транзакции происходит сбой или не выполняется хотя бы 1 команда (прерывается), то система осуществляет откат и возвращает БД в состояние, которое было до транзакции.
2.Если удачно завершились все команды тран-и, то система фиксирует новое состояние БД.
Для транзакции используются команды:
1.begin transaction – начало транзакции;
2.commit transaction - закрепление, удачное завершение транзакции;
3.rollback transaction - откат транзакции, восстановление текущего состояния БД.
Различают 2 модели транзакции:
1. Модель автоматического выполнения транзакции – транзакции автоматически начинается с выполнением пользователем или программой первой инструкции - begin. Здесь четко участвуют 3 команды: begin, commit, rollback. и возможны 2 исхода:
2. Модель управляемого выполнения транзакции – появляется еще один оператор, который позволяет внутри транзакции создать – точку сохранения и присвоить сохраненному состоянию имя точки. Здесь наблюдается промежуточные стадии по сохранению транзакции (оператор SAVE TRANSACTION).
В случае неудачного завершения транзакции происходит откат к точке фиксации, кот является промежуточной.
Для сохранения БД и фиксации команд транзакции существует журнал транзакций. Он позволяет во внешней памяти сохранять промежуточные состояния БД в программе.
Точки фиксации позволяют запомнить текущее состояние БД перед транзакцией и в случае отката они являются основой для восстановления данных. Промежуточные точки фиксации в управляемых транзакция называют точками сохранения. Если транзакция завершается удачно, то организуется новая точка фиксации.
Транзакция в результате своей работы воздействует на состояние БД двумя способами:
· Явно – выполняя команды INSERT, DELETE, UPDATE;
· Неявно – возможно влияние на работу других транзакций, когда эти транзакции считывает данные, измененные текущей транзакцией.
При явном воздействии результаты работы транзакции могут быть аннулированы с помощью ROLLBACK.При неявном воздействии может возникнуть ситуация, при которой транзакция считывает данные, измененные другой транзакцией, после чего эти изменения аннулируются. В результате транзакция получает данные, не соответствующие целостному состоянию БД. Устранение такого вторичного влияния реализуется на основе механизма блокировок.
Свойства транзакции:
1. Атомарность - транзакция выполняется как атомарная операция - либо выполняется вся транзакция целиком, либо она целиком не выполняется.
2. Согласованность - транзакция переводит базу данных из одного согласованного (целостного) состояния в другое согласованное (целостное) состояние. Внутри транзакции согласованность базы данных может нарушаться.
3. Изоляция – транзакции разных пользователей не должны мешать друг другу (например, как если бы они выполнялись строго по очереди).
4. Долговечность - если транзакция выполнена, то результаты ее работы должны сохраниться в базе данных, даже если в следующий момент произойдет сбой системы.