Язык управления транзакциями (TCL)
Обеспечение функционирования баз данных
Восстановление
Восстановление СУБД означает восстановление самой базы данных, т.е. возвращение БД в правильное состояние. Основной принцип, на котором строится такое восстановление – это избыточность, которая организуется на физическом уровне.
Транзакции
Транзакцией называется последовательность операций, производимых над базой данных, переводящая базу данных из одного непротиворечивого состояния в другое непротиворечивое состояние.
Стандартные команды для работы с транзакциями:
BEGIN TRAN – начало транзакции,
ROLLBACK TRAN – откат, отмена транзакции; все изменения, сделанные с начала транзакции, будут отменены,
COMMIT TRAN – завершение, подтверждение транзакции; все изменения, сделанные с начала транзакции, будут зафиксированы .
До момента подтверждения транзакции все измененные данные записываются в журнал транзакций, и только после фиксации транзакции данные переносятся собственно в таблицы .
Уровни изолированности транзакций:
- Serializable – самый надежный, но и самый медленный уровень изолированности, транзакции выполняются последовательно, друг за другом.
- Repeatable read – при повторном чтении данных результат будет точно таким же, как и при первом чтении, даже если данные были изменены.
- Read commited – допускается читать только данные завершенных транзакций.
- Read uncommited - допускается читать “грязные данные”, т.е., данные незавершенных транзакций.
Рассмотрим пример :
Предположим, что отношение P (отношение деталей) включает атрибут TOTQTY, представляющий собой общий объем поставок для каждой детали. Значение TOTQTY для любой определенной детали предполагается равным сумме всех значений QTY для всех поставок данной детали. Ниже показано добавление в базу данных новой поставки со значением 1000 для поставщика S5 и детали P1.
BEGIN TRANSACTION;
INSERT ({S#:’S5’, P#:’P1’, QTY:1000}) INTO SP;
IF ошибка THEN GO TO UNDO;
UPDATE P WHERE P# = ’P1’ TOTQTY:=TOTQTY+1000;
IF ошибка THEN GO TO UNDO;
COMMIT TRANSACTION;
GO TO FINISH;
UNDO: ROLLBACK TRANSACTION;
FINISH: RETURN;
Восстановление транзакции
Транзакция начинается с успешного выполнения оператора Begin Transaction и заканчивается успешным выполнение либо оператора Commit, либо оператора Rollback. Оператор Commit устанавливает так называемую точку фиксации, которая соответствует концу логической единице работы и , следовательно, точке, в которой база данных находится
в согласованном состоянии. Выполнение же оператора Rollback возвращает базу данных в состоянии, в котором она находилась во время выполнения оператора Begin Transaction, т.е. в предыдущую точку фиксации.
Из этого следует, что транзакция – это не только логическая единица работы, но и также единица восстановления при неудачном выполнении операций.
Транзакции обладают четырьмя важными свойствами : атомарность, согласованность, изоляция и долговечность.
- Атомарность . Транзакции атомарны (выполняется все или ничего).
- Согласованность. Транзакции защищают БД согласованно, т.е. транзакции переводят одно согласованное состояние БД в другое без обязательной поддержки согласованности в промежуточных точках.
- Изоляция. Транзакции отделены друг от друга. Это означает, что при запуске множества конкурирующих друг с другом транзакций, любое обновление определенной транзакции будет скрыто от остальных до тех пор, пока эта транзакция выполняется.
- Долговечность. Когда транзакция выполнена, ее обновления сохраняются, даже если в следующий момент произойдет сбой системы.
Современные СУБД являются многопользовательскими системами, т. е. допускают параллельную одновременную работу большого количества пользователей. При этом пользователи не должны мешать друг другу. Так как логической единицей работы для пользователя является транзакция, то работа СУБД должна быть организована так, чтобы у пользователя складывалось впечатление, что их транзакции выполняются независимо от транзакций других пользователей.
Различают три основные проблемы параллелизма:
- проблема потери результатов обновления;
- проблема незафиксированной зависимости (чтение «грязных» данных, неаккуратное считывание);
- проблема несовместимого анализа.