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

       

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


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

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

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

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

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

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

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

 

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

                                                         кредита

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

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

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

                                                         системы

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

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

 

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

1. Оплата

    кредита

    500 $ 

2. Отказ

    системы 

  
 
                    

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

СЧЕТ КЛИЕНТА

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

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

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

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

                 Баланс

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

                                

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

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

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


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