Протокол двухфазной фиксации транзакций.
Транзакция – это логически завершенная последовательность действий над данными информационной системы, не нарушающая ограничения целостности. Логическая целостность означает, что удовлетворяются все ограничения, накладываемые на наборы данных моделью системы. Физическая целостность означает, что состояние файлов хранилища данных корректно, т. е. ни один из элементов хранилища не является испорченным с точки зрения СУБД. Двухфазовая фиксация (2PC - 2 Phase Commit) - каждый участвующий в ней узел, прежде чем зафиксировать транзакцию, подтверждает, что он готов сделать это. Если все узлы согласны зафиксировать транзакцию, то все относящиеся к ней действия реально выполняются; если один из узлов отказывается зафиксировать свою часть транзакции, то и все остальные узлы вынуждены прервать данную транзакцию. 2PC опирается на следующие фундаментальные правила: 1.Если хотя бы один узел отказывается зафиксировать транзакцию (голосует за ее прерывание), то распределенная транзакция прерывается на всех участвующих в ней узлах. 2.Если все узлы голосуют за фиксацию транзакции, то она фиксируется на всех участвующих в ней узлах. Фаза 1 – подготовка к фиксации глобальной транзакции. Сервер БД направляет команду «зафиксировать» транзакцию всем локальным узлам. В случае неполучения отклика хотя бы от одного узла все локальные транзакции откатываются. Фаза 2 – фиксация глобальной транзакции. Происходит фиксация всех локальных транзакций. В случае сбоя в течение данной фазы сервер БД гарантирует фиксацию глобальной транзакции вплоть до восстановления соединения.
|