Вопрос 18
Результаты
выполнения фрагментов будут зафиксированы
только в том случае, когда
успешно будут завершены оба фрагмента.
Для обеспечения такого свойства
применяется
специальный механизм
двухфазной фиксации транзакций.
Основными
особенностями этого механизма являются
следующие:
на
каждом локальном сервере журнализируются
операции, выполняемые в процессе
реализации соответствующего фрагмента
распределенной транзакции;
сервер-координатор
осуществляет специальные функции,
связанные с при-чятием
решения о возможности фиксации
распределенной транзакции;
рассылка
сообщений между координатором и
локальными серверами протоколируется
координатором с целью восстановления
данных при возможном отказе системы.
Реализация
этого механизма включает две фазы.
На
подготовит
ель ной фазе после
выполнения собственного фрагмента
распределенной транзакции сервер-координатор
принимает решение о начале процесса
фиксации транзакции. Локальный сервер
после получения этой команды принимает
решение о фиксации либо
прерывании выполнения фрагмента
распределенной транзакции. Сервер
может задержать
передачу ответного сообщения, если код
фрагмента еще не выполнен полностью.
В случае возможности фиксации локальный
сервер передает сообщение УЕ8
серверу-координатору,
в противном случае - сообщение N0
и
размещает соответствующее
сообщение в журнале.
На
фазе
фиксации сервер-координатор
производит прием сообщений от
локальных серверов. Если все серверы
подтвердили готовность зафиксировать
транзакцию,
то координатор принимает решение о
глобальной фиксации транзакции.
Для этого он включает в протокол запись
<СОММ1Т
К> и
направляет всем
локальным
серверам сообщение СОММ1Т
К. При
получении локальным сервером указанного
сообщения он осуществляет фиксацию
результатов выполнения собственного
фрагмента транзакции и размещает в
протоколе запись <СОММ1Т
В>. Если
от одного или нескольких локальных
серверов поступило сообщение N0
либо
вообще
не поступило никаких, сообщений в
течение установленного интервала
времени,
то сервер-координатор принимает решение
об отмене результатов выполнения
распределенной транзакции. После этого
он размещает в протоколе запись <ROLLBACK
R> и
передает сообщение об откате транзакции
всем подчиненным серверам. Серверы
после приема команды аннулируют
полученные результаты и размещают
запись <<ROLLBACK
R
> в
журнале транзакций