
- •Конспект лекций не официальный, возможны ошибки! Еремеев н.Б.
- •Распределенная база данных
- •Пример транзакции
- •Пример рбд
- •Прямые и косвенные соединения
- •Объекты: схемы и именования в рбд
- •Удаленные и распределенные предложения
- •Прозрачность в системе рбд
- •Архитектура рбд Oracle
- •Прозрачность в рбд. Прозрачность местоположения.
- •Прозрачность транзакций.
- •Прозрачность дублирования.
- •Разрешение имен в рбд
- •Снимки.
- •Двухфазный commit.
- •Фаза подготовки.
- •Фаза подтверждения
- •Создание точки подтверждения.
- •Проектирование распределенных приложений.
- •Уникальность имен.
- •Последовательности в распределенных транзакциях.
- •Обработка ошибок в удаленных процедурах.
- •Разрешение проблем распределенных транзакций
- •Снимки. Управление ими.
- •Спецификация определяющего запроса снимка (as ...).
- •Порядок создания снимков и их журналов:
- •Альтернативы снимкам.
- •Дублирование таблиц с помощью триггеров:
- •Создание триггера
- •Управление снимками
- •Создание снимков
- •Установление параметров памяти для снимков.
- •Конфигурирование автоматических обновлений
- •Ручное обновление снимков.
- •Связь между декларативными ограничениями и снимками.
- •Управление журналами снимков.
- •Внутренняя реализация журнала снимка.
- •Удаление журнала снимков.
- •Управление распределенными бд администратором.
- •Принципы простроения глобального имени бд:
- •Безопасность бд.
- •Характеристики и квоты различных табличных пространств.
- •Ресурсные лимиты и профили пользователей.
- •Лицензирование.
- •Привилегии и роли.
- •Защита таблиц.
- •Защита обзоров:
- •Усиление защиты таблиц через обзоры:
- •Защита процедур.
- •Табличные пространства и файлы данных Файлы данных
- •Табличное пространство
- •Объекты табличного пространства
- •Блок данных
- •Экстенты
- •Сегменты
- •Копирование и восстановление баз данных
- •Рекомендации по копированию баз данных.
- •Стратегии копирования Стратегии копирования в режиме no archive log
- •Стратегии копирования в режиме archive log
- •Процедуры копирования.
- •Процедура полного копирования базы данных
- •Восстановление
- •Опции предложений Audit и NoAudit.
- •Дополнительные опции по аудиту предложений:
- •Включение аудита
- •Выключение аудита.
- •Контролирование роста и размера аудиторского журнала.
- •Защита аудиторского журнала
- •Аудит с помощью триггеров
- •Поддержка национальных языков.
- •Лингвистическая сортировка.
- •Перекрытие стандартных умолчаний.
- •Форматы чисел и дат.
- •Объекты в Oracle.
- •Атрибуты
- •Сравнение объектов
- •Синтаксис объявления типов
- •Объявление и инициализация объектов
- •Вызов методов
- •Хранение объектов в бд
- •Использование оператора select
- •Вставка объектов
- •Обновление объектов
- •Удаление объектов
Двухфазный commit.
По определению все предложения SQL либо принимаются, либо отменяются. Для этого и применяется двухфазный COMMIT.
Фазы двухфазного COMMIT:
Фаза подготовки. В этой фазе глобальный координатор (инициализирующий узел) просит «участников» подготовится к завершению транзакции.
Фаза подтверждения. При положительном ответе всех участников координатор просит подтвердить транзакцию; если кто-то не готов, то координатор просит остальных выполнить откат транзакции.
Фаза подготовки.
Это фаза подготовительная. При этом все узлы получают информацию, необходимую для подтверждения транзакции.
При получении узлом команды подготовится можно ответить тремя способами:
«готов» - данные на узле были модифицированы предложением в распределенной транзакции, и узел подготовился к завершению;
«только чтение» данные на узле не модифицировались, а лишь читались; в этом случае нет необходимости в завершении;
«снять завершение транзакции» узел не может успешно подготовится.
Операции на фазе подготовки:
узел просит подготовиться своих потомков
узел распределяет все ресурсы, необходимые для завершения транзакции
узел сбрасывает записи повторения, соответствующие изменениям, сделанным этой транзакцией, в свой локальный журнал повторений
узел гарантирует, что все блокировки, удерживаемые для этой транзакции, способны пережить сбой
узел должен ответить узлу, от которого получил транзакцию
Узел, к которому обращаются за подтверждением, называется сомнительным.
Если узел не может подготовиться к завершению транзакции, то он выполняет следующие действия:
освобождает все ресурсы, удерживаемые в данной транзакции, и выполняет откат ее в локальной части
отвечает узел сообщением «снять»
Эти действия стают поводом для отката транзакции в целом.
Невозможность подготовки возникает из-за блокировок пользователей и нарушений целостности системы.
Итак, подведем итог: после запуска на выполнение команды COMMIT в командном окне локальная БД просит все узлы, участвующие в транзакции, подготовиться к предстоящему завершению; все опрошенные узлы отвечают на вопрос о подготовке и, если какой-нибудь из них отвечает предложением «снять», то вся транзакция глобально откатывается, а в случае подготовки всех узлов начинается следующая фаза подтверждения.
Фаза подтверждения
всем узлам предлагается подтвердить транзакцию;
Oracle на каждом узле подтверждает локальную порцию распределенной транзакции, освобождающую блокировки;
после завершения фазы подтверждения данные являются согласованными.
Важным элементом является дерево сессии. Каждый узел, участвующий в транзакции может играть роль:
клиента (не путать с клиентом-приложением)
сервера БД
глобального координатора
локального координатора
стороны точки подтверждения
Роль, которую играет узел, определяется факторами:
откуда исходит транзакция (кто инициатор)
самой точки подтверждения данного узла, которая определяется параметром инициализации при запуске инстанции
доступны ли все запрашиваемые данные на указанном узле или необходимо обращаться к другим узлам для выполнения транзакции
является ли данный узел «только читаемым» для данной транзакции
Клиенты – это серверы БД, выступающие как клиентский узел и запрашивающие информацию у другого узла в распределенной транзакции.
Серверы БД – это узел, который запрашивается для участия в транзакции, так как его данные необходимы другим узлам.
Глобальный координатор – это узел, из которого проистекает распределенная транзакция, т.е. это узел, с которым непосредственно связано приложение. Это родитель – корень дерева сессии.
Глобальный координатор взаимодействует со всеми узлами (непосредственно адресуемыми), отличными от стороны точки подтверждения, чтобы иметь возможность повторить транзакцию. Если все узлы подготовились, то глобальный координатор будет просить подтверждения от точки подтверждения.
Локальный координатор – это узел, который должен запрашивать данные на других узлах для выполнения своей порции распределенной транзакции. Локальный координатор передает информацию узлу, который к нему обращается.
Сторона точки подтверждения. Механизм двухфазного COMMIT всегда выбирает один из узлов сессии, как сторону точки подтверждения. Задача этого узла: выполнение атомарного действия, которое возможность подтверждения или отката распределенной транзакции.
Характерные особенности стороны точки подтверждения:
она никогда не входит в фазу подготовки во время двухфазного подтверждения
результат распределенной транзакции на стороне точки подтверждения определяет результат транзакции на каждом узле дерева сессии
глобальный координатор гарантирует, что все узлы завершают транзакцию тем же способом, что и сторона точки подтверждения