Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
RBD_END.DOC
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
548.35 Кб
Скачать

Двухфазный commit.

По определению все предложения SQL либо принимаются, либо отменяются. Для этого и применяется двухфазный COMMIT.

Фазы двухфазного COMMIT:

  1. Фаза подготовки. В этой фазе глобальный координатор (инициализирующий узел) просит «участников» подготовится к завершению транзакции.

  2. Фаза подтверждения. При положительном ответе всех участников координатор просит подтвердить транзакцию; если кто-то не готов, то координатор просит остальных выполнить откат транзакции.

Фаза подготовки.

Это фаза подготовительная. При этом все узлы получают информацию, необходимую для подтверждения транзакции.

При получении узлом команды подготовится можно ответить тремя способами:

  1. «готов» - данные на узле были модифицированы предложением в распределенной транзакции, и узел подготовился к завершению;

  2. «только чтение» данные на узле не модифицировались, а лишь читались; в этом случае нет необходимости в завершении;

  3. «снять завершение транзакции» узел не может успешно подготовится.

Операции на фазе подготовки:

  • узел просит подготовиться своих потомков

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

  • узел сбрасывает записи повторения, соответствующие изменениям, сделанным этой транзакцией, в свой локальный журнал повторений

  • узел гарантирует, что все блокировки, удерживаемые для этой транзакции, способны пережить сбой

  • узел должен ответить узлу, от которого получил транзакцию

Узел, к которому обращаются за подтверждением, называется сомнительным.

Если узел не может подготовиться к завершению транзакции, то он выполняет следующие действия:

  • освобождает все ресурсы, удерживаемые в данной транзакции, и выполняет откат ее в локальной части

  • отвечает узел сообщением «снять»

Эти действия стают поводом для отката транзакции в целом.

Невозможность подготовки возникает из-за блокировок пользователей и нарушений целостности системы.

Итак, подведем итог: после запуска на выполнение команды COMMIT в командном окне локальная БД просит все узлы, участвующие в транзакции, подготовиться к предстоящему завершению; все опрошенные узлы отвечают на вопрос о подготовке и, если какой-нибудь из них отвечает предложением «снять», то вся транзакция глобально откатывается, а в случае подготовки всех узлов начинается следующая фаза подтверждения.

Фаза подтверждения

  1. всем узлам предлагается подтвердить транзакцию;

  2. Oracle на каждом узле подтверждает локальную порцию распределенной транзакции, освобождающую блокировки;

  3. после завершения фазы подтверждения данные являются согласованными.

Важным элементом является дерево сессии. Каждый узел, участвующий в транзакции может играть роль:

  • клиента (не путать с клиентом-приложением)

  • сервера БД

  • глобального координатора

  • локального координатора

  • стороны точки подтверждения

Роль, которую играет узел, определяется факторами:

  • откуда исходит транзакция (кто инициатор)

  • самой точки подтверждения данного узла, которая определяется параметром инициализации при запуске инстанции

  • доступны ли все запрашиваемые данные на указанном узле или необходимо обращаться к другим узлам для выполнения транзакции

  • является ли данный узел «только читаемым» для данной транзакции

Клиенты – это серверы БД, выступающие как клиентский узел и запрашивающие информацию у другого узла в распределенной транзакции.

Серверы БД – это узел, который запрашивается для участия в транзакции, так как его данные необходимы другим узлам.

Глобальный координатор – это узел, из которого проистекает распределенная транзакция, т.е. это узел, с которым непосредственно связано приложение. Это родитель – корень дерева сессии.

Глобальный координатор взаимодействует со всеми узлами (непосредственно адресуемыми), отличными от стороны точки подтверждения, чтобы иметь возможность повторить транзакцию. Если все узлы подготовились, то глобальный координатор будет просить подтверждения от точки подтверждения.

Локальный координатор – это узел, который должен запрашивать данные на других узлах для выполнения своей порции распределенной транзакции. Локальный координатор передает информацию узлу, который к нему обращается.

Сторона точки подтверждения. Механизм двухфазного COMMIT всегда выбирает один из узлов сессии, как сторону точки подтверждения. Задача этого узла: выполнение атомарного действия, которое возможность подтверждения или отката распределенной транзакции.

Характерные особенности стороны точки подтверждения:

  • она никогда не входит в фазу подготовки во время двухфазного подтверждения

  • результат распределенной транзакции на стороне точки подтверждения определяет результат транзакции на каждом узле дерева сессии

  • глобальный координатор гарантирует, что все узлы завершают транзакцию тем же способом, что и сторона точки подтверждения

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]