Распределенная обработка данных. Найханова Л.В. - 41 стр.

UptoLike

Составители: 

41
Рис. 4.2. Выполнение программы - это согласование транзакций
Таким образом, транзакции - это не только логические единицы работы, но также и
единицы восстановления при неудачном выполнении операций. При успешном завершении
транзакции система гарантирует, что обновления постоянно установлены в базе данных,
даже если система потерпит крах в следующий момент. Возможно, что в системе
произойдет сбой после успешного выполнения COMMIT, но перед тем, как обновления
будут физически записаны в базу данных (они все еще могут оставаться в буфере
оперативной памяти и таким образом могут быть утеряны в момент сбоя системы). Даже
если подобное случилось, процедура перезагрузки системы все равно должна
устанавливать эти обновления в базу данных, исследуя соответствующие записи в файле
регистрации. Из этого следует, что файл регистрации должен быть физически записан
перед завершением операции COMMIT. Это важное правило ведения файла регистрации
известно как протокол предварительной записи в журнал (т.е. запись об операции
осуществляется перед ее выполнением). Таким образом, процедура перезагрузки сможет
восстановить любые успешно завершенные транзакции, хотя их обновления не были
записаны физически до аварийного отказа системы. Следовательно, как указывалось
ранее, транзакция действительно является единицей восстановления.
Согласно предыдущим разделам транзакции обладают четырьмя важными свой-
ствами: атомарность, согласованность, изоляция и долговечность (они называются
свойствами АСИД).
Атомарность. Транзакции атомарны (выполняется все или ничего).
Согласованность. Транзакции защищают базу данных согласованно. Это
означает, что транзакции переводят одно согласованное состояние базы данных в
другое без обязательной поддержки согласованности во всех промежуточных
точках. Согласованность базы данных будет детально обсуждаться в следующих
главах этой книги.
Изоляция. Транзакции отделены одна от другой. Это означает, что, если даже
будет запущено множество конкурирующих друг с другом транзакций, любое
обновление определенной транзакции будет скрыто от остальных до тех пор, пока
эта транзакция выполняется. Другими словами, для любых двух отдаленных
транзакций Т
1
и Т
2
справедливо следующее утверждение: Т
1
сможет увидеть
обновление Т
2
только после выполнения Т
2
, а Т
2
сможет увидеть обновление Т
1
только после выполнения Т
1
.
Транзакция 2
BEGIN
TRANSACTION
ROLLBACK
Транзакция 1
BEGIN
TRANSACTION
COMMIT
Начало
программы
Транзакция 3
BEGIN
TRANSACTION
COMMIT
Завершение
программы
                                 Транзакция 1

                         BEGIN                      COMMIT
   Начало
                         TRANSACTION
   программы
                                        Транзакция 2

                         BEGIN                                      ROLLBACK
                         TRANSACTION

                                  Транзакция 3

                           BEGIN                       COMMIT      Завершение
                           TRANSACTION                             программы
               Рис. 4.2. Выполнение программы - это согласование транзакций

     Таким образом, транзакции - это не только логические единицы работы, но также и
единицы восстановления при неудачном выполнении операций. При успешном завершении
транзакции система гарантирует, что обновления постоянно установлены в базе данных,
даже если система потерпит крах в следующий момент. Возможно, что в системе
произойдет сбой после успешного выполнения COMMIT, но перед тем, как обновления
будут физически записаны в базу данных (они все еще могут оставаться в буфере
оперативной памяти и таким образом могут быть утеряны в момент сбоя системы). Даже
если подобное случилось, процедура перезагрузки системы все равно должна
устанавливать эти обновления в базу данных, исследуя соответствующие записи в файле
регистрации. Из этого следует, что файл регистрации должен быть физически записан
перед завершением операции COMMIT. Это важное правило ведения файла регистрации
известно как протокол предварительной записи в журнал (т.е. запись об операции
осуществляется перед ее выполнением). Таким образом, процедура перезагрузки сможет
восстановить любые успешно завершенные транзакции, хотя их обновления не были
записаны физически до аварийного отказа системы. Следовательно, как указывалось
ранее, транзакция действительно является единицей восстановления.
     Согласно предыдущим разделам транзакции обладают четырьмя важными свой-
ствами: атомарность, согласованность, изоляция и долговечность (они называются
свойствами АСИД).
     • Атомарность. Транзакции атомарны (выполняется все или ничего).
     • Согласованность. Транзакции защищают базу данных согласованно. Это
        означает, что транзакции переводят одно согласованное состояние базы данных в
        другое без обязательной поддержки согласованности во всех промежуточных
        точках. Согласованность базы данных будет детально обсуждаться в следующих
        главах этой книги.
     • Изоляция. Транзакции отделены одна от другой. Это означает, что, если даже
        будет запущено множество конкурирующих друг с другом транзакций, любое
        обновление определенной транзакции будет скрыто от остальных до тех пор, пока
        эта транзакция выполняется. Другими словами, для любых двух отдаленных
        транзакций Т1 и Т2 справедливо следующее утверждение: Т1 сможет увидеть
        обновление Т2 только после выполнения Т2, а Т2 сможет увидеть обновление Т1
        только после выполнения Т1 .

                                                                                   41