РАСШИРЕННОЕ ТИРАЖИРОВАНИЕ ДАННЫХ (ADVANCED
REPLICATION)
Автор: Давид Стэнглэнд Это первая часть серии из трёх статей Давида Стенгленда, посвященная тиражированию данных (репликаци) в СУБД Oracle. Первая статья концентрирует внимание на концепции тиражирования данных, конфигурации БД, настройке ведущего и ведомого узлов. В этой части и в последующих, будет говориться о тиражировании моментальных снимков (snapshot replication) и тиражировании с несколькими ведущими узлами (multi-master replication). Для иллюстрации технологии тиражирования все разделы сопровождаются конкретными примерами. Репликация в Oracle является средством "размножения" данных и объектов (таблицы, последовательности, объекты PL/SQL и т.д.) в различные БД. Эта статья фокусирует внимание на основных понятиях тиражирования и специфических параметрах БД Oracle на ведущем (master site) и ведомом (snapshot site). Прежде чем собственно говорить о репликации, выясним, почему необходимо тиражировать (размножать) данные? Имеются четыре причины:
В Oracle существует два основных способа тиражирования данных: тиражирование снимков (snapshot replication) и тиражирование с несколькими ведущими узлами (multi-master replication). Технология Snapshot replication описывает методику получения набора данных таблицы, который существовал в некоторый момент времени, так называемый моментальный снимок таблицы. Это требует, по крайней мере, одного управляющего или ведущего узла (master site) и ведомого узла (snapshot site). Эти снимки (начиная с версии 8. материализованные представления) могут быть созданы как копии основных таблиц, и быть доступными только по чтению (read-only snapshots), либо как редактируемые снимки (updateable snapshots), их изменения передаются (propagate) от ведомого на ведущий узел. Снимки таблиц обновляются (регенерируются) по таблицам ведущего сервера вручную или периодически по расписанию, с интервалом устанавливаемым администратором. Обновление этих снимков может быть выполнено способом, при котором пересоздаются все строчки в таблице-снимке по ведущей таблице (это может занимать значительное время для больших таблиц), или снимок может обновляться по технологии называемой быстрое обновление (fast refresh), при этом тиражируются только изменения, произошедшие начиная с момента последнего обновления. При тиражировании с несколькими ведущими узлами (Multi-master replication) данные могут тиражироваться непрерывно между двумя или более ведущими узлами (или БД). Это наиболее общий способ тиражирования является асинхронным. В этом случае транзакция завершается в одной БД, и асинхронно производятся изменения на всех других ведущих узлах. Транзакция может производиться синхронно; она не рассматривается завершенной, пока не завершится на всех узлах. И так и этак, тиражирование с несколькими ведущими узлами учитывает распределенность БД. Концепции тиражирования данных Узлы тиражирования Имеется два основных типа узлов тиражирования: ведущий (master site) и ведомый узел(snapshot site). Ведущий узел - это БД, имеющая полный набор данных, который необходимо тиражировать. Ведомый узел - это БД, содержащая все или часть данных, находящихся на ведущем узле. Ведомый узел может содержать объекты из одного или более ведущего узла. Тиражирование с несколькими ведущими узлами - это просто два или более ведущих узла, по которым синхронизируются тиражируемые объекты. В этой статье, я буду создавать одиночный ведущий узел и ведомый узел. Что такое тиражирование (репликация)? Данные в таблицах могут размножаться (тиражироваться), индексы созданные по этим таблицам, также могут тиражироваться. В этом случае работа с индексом будет такая же, если бы индекс был создан локально. Другие объекты БД также могут тиражироваться, и PL/SQL объекты (пакеты, процедуры, и функции), и представления, триггера, и последовательности. Тиражирование последовательностей так же возможно. Однако при тиражировании последовательностей синхронизация значения nextvals не поддерживается, потому что две последовательности в различных БД могут генерировать одно то же значение. Механизм тиражирования Снимки таблиц или материализованные представления (синоним, начиная с Oracle 8.1) - это моментальные снимки (копии в определенный момент времени) данных таблицы, находящейся на ведущей стороне. В нижеследующем примере, создается снимок scott.dept_snap таблицы scott.dept_snap доступный только по чтению (по умолчанию).
Снимки таблиц могут создаваться как редактируемые (это требует опции "Расширенное Тиражирование"). Пользователи могут вставлять, обновлять, и удалять строки ведущей таблицы, производя соответствующие изменения на снимке. При этом существуют потенциальные конфликты данных, которые будут рассмотрены позже. Журнал изменений снимка или материализованного представления (snapshot log или materialized view log) - таблица, содержащая изменения таблицы, находится на ведущем узле. Снимок таблицы может быть обновлён (регенерирован) полностью или к нему могут применены те изменения, которые содержатся в журнале изменений снимка. Этот тип обновления называется быстрым обновлением (fast refresh). Группы мастер таблиц (Master groups) и Группы снимков (snapshot groups) служат для объединения объектов тиражирования. Тиражируемые объекты (таблицы, последовательности ...) могут принадлежать одной и только одной группе. Это служит для обеспечения легкости администрирования и требуется для обновляемых снимков. Единственный ведущий узел должен быть определен для каждой группы снимков, подробнее об этом позже. Группы мастер таблиц и группы снимков будут созданы в примерах тиражирования снимков и для тиражирования с многими ведущими узлами. Установка и настройка БД Установка Расширенного Тиражирования При установке Oracle с использованием Универсального Установщика (Universal Installer) будут установлены необходимые компоненты и скрипты для Расширенного Тиражирования (Advanced Replication). Необходимо отметить "галочкой" опцию в пункте: Oracle 8i Enterprise Edition | Product Options | Oracle 8i Server | Advanced Replication. Если Вы выбираете опцию "установить начальную БД" (в типичной или минимальной конфигурации), Расширенное Тиражирование будет установлено, и никакие дополнительные действия не требуются. Если вы не устанавливали начальную БД, необходимо выполнить скрипт:/rdbms/admin/catrep.sql. Этот скрипт используется при создании "начальной" БД и необходим для создания каталогов тиражирования в системных табличных пространствах (все каталоги начинаются сrepcat$). Интерфейс программиста для тиражирования (Replication API ) и Менеджер Тиражирования (Replication Manager) Replication API - это основной набор инструментов для управления и конфигурирования узлов тиражирования. Этот API представляет собой набор пакетов PL/SQL, которые устанавливаются в ходе выполнения скрипта catrep.sql. Он может самостоятельно использоваться для конфигурации узлов тиражирования, однако это может быть достаточно длительным по времени занятием. Наиболее простым способом настройки узлов тиражирования является использование Oracle Replication Manager. Replication Manager - это инструмент входящий в состав Oracle Enterprise Manager, который позволяет достаточно быстро устанавливать и конфигурировать среду тиражирования, используя графический интерфейс. Он прост в использовании и может применяться для решения основных задач тиражирования. Replication Manager не альтернатива API, он построен "сверху" его (вы это можете проверить, используя кнопку "View SQL", доступную в функциях Replication Manager). В этой статье Oracle Replication Manager используется для конфигурирования ведомого и ведущего узлов, груп тиражирования и объектов. Параметры инициализации Базы данных Для работы механизма тиражирования данных, следует обратить внимание на значения некоторых параметров инициализации БД. В Таблице 1 приведен список параметров с примерами и примечаниями описывающими как они используются. Таблица 1. Параметры инициализации БД
Параметр JOB_QUEUE_PROCESSES определяет, сколько SNP процессов будут работать для выполнения заданий на узле тиражирования. В Таблице 1, значение 4 означает, что при открытии БД будут порождаться четыре SNP процесса. Для того чтобы убедиться в этом, после открытия БД, используйте команду "ps" (UNIX). В следующем примере команда "ps" выдает четыре различных SNP процесса, работающих на узле тиражирования main.
Параметр JOB_QUEUE_INTERVAL управляет тем, как часто SNP процессы "просыпаются" и выполняют задания из очереди. Эти задания включены в расписание обновлений данных ведомого (ведущего для обновляемых снимков) узла, получаемых от ведущего узла, и производят "разбор" очереди заданий. Например, если Вы хотите обновлять данные в снимке dept_snap2 каждые две минуты, лучше установить значение этого параметра не более двух минут. Понимание параметра GLOBAL_NAMES может помочь Вам избежать головной боли. Когда установлено значение TRUE, требуется, чтобы БД имела имя совпадющее с именем связи на неё. Например, если ведомая БД имеет имя main.collegeclub.com, то связь к этой БД также должна называться main.collegeclub.com. Если существует проблема из-за этого (например, ORA-12154), выполните следующий запрос в SQL*PLUS:
Сравните результат выполнения этого запроса с именем связи к этой БД. Если они не совпадают, существует проблема с вашей настройкой. Вам придется использовать команду "alter database rename global_name" для установки нового значения global_name. Например, если выдается значение main, следующая команда установит значение global_name с main на main.collegeclub.com:
Полный список допустимых параметров приведен в документе Oracle Replication Reference. Если Вы планируете использовать Java Replication API или параллельное тиражирование (не описывается в этой статье), либо промышленную эксплуатацию БД, необходима техническая консультация. Настройка тиражирования данных Существует некоторые стандартные шаги, которые необходимо выполнить для настройки ведущего и ведомого узла при использовании Расширенного Тиражирования данных (Advanced Replication). Для простых случаев установка может быть произведена с использованием интерфейса Replication Manager. Все узлы тиражирования требуют, по крайней мере, одного ведущего узла (минимум два необходимы для тиражирования с несколькими ведущими узлами), и ведомого узла, для тиражирования снимков. В этой статье, будут конфигурироваться единственный ведущий узел stg1 и ведомый узел, который называется main. Настройка ведомого узла Для начала настройки ведомого узла, запустите Replication Manager и зайдите как системный пользователь. Из главного меню, выберите Setup | Snapshot Sites для старта мастера установки. Этот мастер предложит несколько форм, которые необходимо заполнить для настройки. В Таблице 2 приведены формы, для чего они необходимы, и ответы, использующиеся для типовых случаев. Таблица 2. Настройка ведомого узла с использованием Replication Manager
После завершение работы мастера установки, на ведомом узле:
Таблица 3. Пользователи и их Роли
Настройка ведущего узла Для старта зайдите в Replication Manager системным пользователем. Из главного меню выберите: Setup | Master Sites для запуска мастера установки. Этот мастер предложит несколько форм, которые необходимо заполнить для настройки. В Таблице 4 приведены формы, для чего они необходимы, и ответы, использующиеся для типовых случаев. После завершение работы мастера установки, на ведущем узле выполняются следующие задачи.
Таблица 4. Настройка ведущего узла с использованием Replication Manager
Таблица 5. Роли пользователей на ведущем узле
Заключение Мы провели установку и настройку узлов тиражирования. Теперь время приступить к сути тиражирования данных. В статье следующего месяца описывается технология тиражирования снимков snapshot replication, как это работает. Используются специфические примеры для иллюстрации этой концепции. Будет создаваться конфигурация со снимками доступными только по чтению, а так же обновляемыми (редактируемые) снимками, данные в них будут обновляться вручную или с использованием технологии fast refresh. Литература
|