Базы данных. Учебное пособие
5c8b6e8c

Обработка транзакций


Транзакция  -  это  блок  программы,  выполнение  которого  сохраняет  непротиворечивость  БД.  Неделимая транзакция – транзакция, в которой либо все связанные с ней действия выполняются до конца, либо ни одно из них не выполняется.

Если  БД  непротиворечива  до  выполнения  транзакции,  то  она  должна  оставаться  непротиворечивой  и  после  ее  выполнения.  Для  того  чтобы  обеспечить  выполнение  этих  условий,  транзакции  должны  быть  неделимыми,  что  означает,  что  либо  все  действия,  связанные  с  транзакцией,  выполняются  до  конца,  либо  ни  одно  из  них  не  выполняется.  Например,  транзакция  записи  взноса  клиента  на  сумму  500 $  включает  следующие  действия:

1. Изменение записи клиента: уменьшение суммы счета на 500 $.

2. Изменение  кассовой  записи:  увеличение  суммы  на  500 $.    

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

Для  обработки  транзакций  требуется,  чтобы  СУБД  поддерживала  запись  транзакции  для  каждого  изменения,  вносимого  в  БД.  Один  из  способов – применение  протокола.  Когда  клиент  платит  500 $  по  счету,  транзакция  включает  1) уменьшение  счета  клиента  и  2) увеличение  кассового  счета.  Во  время  выполнения  транзакции  все  записанные  операции  задерживаются  до  тех  пор,  пока  не  будет  выполнено  последнее  действие  транзакции.  Результаты  обновления  записываются  в  протокол  транзакций.  Когда  все  действия  выполнены,  информация  об  обновлении  из  протокола  используется  для  переноса  обновленной  информации  в  соответствующие  записи  данных.

                                                   ДЕЙСТВИЯ                                                         РЕЗУЛЬТАТ

 

СЧЕТ  КЛИЕНТА                        1.
Оплата                СЧЕТ  КЛИЕНТА

                                                         кредита

 № Клиента   Баланс                      500 $.                 № Клиента       Баланс



 

КАССОВЫЙ СЧЕТ                     2. Отказ                     КАССОВЫЙ СЧЕТ

                                                         системы

                 Баланс                                                                     Баланс

(а) Результат  независимого  выполнения  действий

 

СЧЕТ  КЛИЕНТА                       ТРАНЗАКЦИЯ                   РЕЗУЛЬТАТ

1. Оплата

    кредита

    500 $ 

2. Отказ

    системы 

  
 
                    

Никаких  изменений в

СЧЕТ КЛИЕНТА

Никаких  изменений в КАССОВЫЙ

СЧЕТ
 
  №Клиента   Баланс                      

 

КАССОВЫЙ СЧЕТ

                 Баланс

 

                                

Никакие изменения  не  сделаны,  так  как транзакция  не  была  успешно  выполнена

(б)  Результат  применения  неделимой  транзакции

Рис. 5.1.  Независимые  и  неделимые  транзакции


Содержание раздела