Обработка транзакций
Транзакция - это блок программы, выполнение которого сохраняет непротиворечивость БД. Неделимая транзакция – транзакция, в которой либо все связанные с ней действия выполняются до конца, либо ни одно из них не выполняется.
Если БД непротиворечива до выполнения транзакции, то она должна оставаться непротиворечивой и после ее выполнения. Для того чтобы обеспечить выполнение этих условий, транзакции должны быть неделимыми, что означает, что либо все действия, связанные с транзакцией, выполняются до конца, либо ни одно из них не выполняется. Например, транзакция записи взноса клиента на сумму 500 $ включает следующие действия:
1. Изменение записи клиента: уменьшение суммы счета на 500 $.
2. Изменение кассовой записи: увеличение суммы на 500 $.
Предположим, что второй шаг не выполняется. Тогда баланс счетов не будет сходиться. На рис.5.1 показано, что происходит, когда эти действия выполняются как последовательность независимых шагов (а) и когда они выполняются как единая неделимая транзакция (б).
Для обработки транзакций требуется, чтобы СУБД поддерживала запись транзакции для каждого изменения, вносимого в БД. Один из способов – применение протокола. Когда клиент платит 500 $ по счету, транзакция включает 1) уменьшение счета клиента и 2) увеличение кассового счета. Во время выполнения транзакции все записанные операции задерживаются до тех пор, пока не будет выполнено последнее действие транзакции. Результаты обновления записываются в протокол транзакций. Когда все действия выполнены, информация об обновлении из протокола используется для переноса обновленной информации в соответствующие записи данных.
ДЕЙСТВИЯ РЕЗУЛЬТАТ
СЧЕТ КЛИЕНТА 1.
Оплата СЧЕТ КЛИЕНТА
кредита
№ Клиента Баланс 500 $. № Клиента Баланс
КАССОВЫЙ СЧЕТ 2. Отказ КАССОВЫЙ СЧЕТ
системы
Баланс Баланс
СЧЕТ КЛИЕНТА ТРАНЗАКЦИЯ РЕЗУЛЬТАТ
|
|
КАССОВЫЙ СЧЕТ
Баланс
Никакие изменения не сделаны, так как транзакция не была успешно выполнена
(б) Результат применения неделимой транзакции
Рис. 5.1. Независимые и неделимые транзакции