четверг, 21 июня 2012 г.

Step by step: Настройка репликации транзакций


Репликация - это механизм распространения данных из основной базы данных(издатель) к базам данным- подписчикам. MS SQL Server имеем несколько видов репликаций, одна из них репликация транзакций, которую и будем настраивать .


Для начало немного теории. При настройки репликации используются следующие термины:

Статья (article) — это объекты, которые мы будем реплицировать, такие как таблицы, процедуры, вьюшки, функции и т. д.

Публикация(publication) — это набор статей, или проще говоря окончательный набор объектов для репликации.

Фильтры — набор условий для статьи. В репликации возможно использовать фильтры на таблицы, вьюшки, что позволяет нам реплицировать только необходимые данные, благодаря этому уменьшается передаваемый трафик, уменьшается избыточность, уменьшается хранимый объем данных.

В репликации используются так же следующие роли:

Издатель(publisher) -хранит главную копию базы данных , на которой настроена публикация

Подписчик (subscriber) — база данных, которая получает реплицируемые данные.

Распространитель(distribution) - экземпляр MS SQL server настроенный для сбора транзакция с публикаций и их распространения на подписчики. Распространитель так же имеет базу данных для хранения реплицируемых транзакций.


Итак, приступим к настройке репликации:

  1. Необходимо настроить распространителя.
Это может быть отдельный сервер \экземпляр, так и экземпляр с базой данной публикации или подписчика. Рекомендую выбирать отдельный сервер с установленным экземпляром MS SQL или экземпляр с базой данной подписчика. Распространитель может использоваться для нескольких издателей и подписчиков.

Настраивать репликацию легче всего в графическом режиме.
На объекте «Репликация» в контекстном меню выбираем настройка Распространиетеля (Configure Distribution)

Далее выбираем, что указанный сервер будет Издателем:

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

В следующем окне указываем название базы данных распространителя, рекомендуется оставить по умолчание - distribution.

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

2)Следующий шаг — настройка публикации.

Выбираем на объекте MS SQL сервера Replication пункт меню новая публикация:

добавляем наш ранее настроенный сервер Распространителя

в следующем окне указываем пароль доступа к распространителю, указанный в п.1.

Выбираем базу данных для репликации:

выбираем тип репликации, у нас репликация транзакций (Transactional publication)

Далее выбираем стать для публикации, т.е выбираем объекты базы данных для репликации, на примере выбраны таблицы схемы Person и таблица databaselog, а также процедура. В таблицах можно выбрать репликацию отдельных полей, т.е которые нам нужны, далее можно указать свойства отдельных статей, кнопка Article Properties.
В окне выбора фильтров, укажем фильтр на таблицу DatabaseLog ='Person'
Далее указываем, что моментальный снимок создается сразу при инициализации подписчика:

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

3)Настройка подписчика.
На подписчике выбираем объект сервере репликация -> подписчики


Выбираем нашу публикацию, указываем сервер и после этого отобразятся доступные публикации

Выбираем тип репликации:

На примере выбрана репликация с расположением агентов на подписчиках, т.е Pull репликация, образно говоря каждые подписчик «тянет» на себя транзакции с распространителя.

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

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

В следующем окне указываем учетную запись для доступа к распространителю, далее указываем тип запуска агента


На примере указана тип запуска постоянно, т.е проверка новых транзакций будет постоянна.

И указываем инициализацию

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

После этого за репликацией можно наблюдать ч помощью «Монитора Репликации»

Данное средство помогает отслеживает работу репликации, отображать ошибки и состояние агентов.

Так же после создание репликация, создаются три джоба с примерно такими именами:

Данные джобы отвечают за:

  1. Создание моментального снимка - категория задания Repl-Snapshot
  2. Чтение журнала транзакций - категория задания Repl-LogReader
  3. Агент распространения транзакций — категория задания Repl-Distribution

Это основные агенты, которые отвечают в репликации за передачу данных.

Так же репликация создает дополнительные задания ( см. выше указанный список), которые необходимы для обслуживания репликации.

Небольшие советы и ограничения по репликации:
  1. В публикацию можно включать только таблицы с первичным ключом
  2. Есть ограничения на поля Identity и триггера
  3. Рекомендуется отключить расписание создания моментального снимка, т.к для больших баз данных это будет довольно расточительная операция
  4. Реплицируются по умолчанию только кластерные индексы, на подписчике возможно создавать свои индексы, в отличие от других способов HighAvailable MS SQL Server-а,. Так же, базу данных на подписчике доступна как для чтения, так и для изменения данных, что вкупе с созданием индексов идеально подходит для использования отчетной базы данных.
  5. На подписчике нужно быть аккуратно с изменениями в базе данных, т.к при приходе транзакции, которая изменяет данные, а эти данные были удалены или изменены, то репликация может остановиться, до решения данной проблемы.
Вот и все - репликция транзакций настроена.


1 комментарий :

  1. Добрый день
    Спасибо за статью, оч доступно.
    Раз Вы в этом разбираетесь, хотелось бы получить на три вопроса:
    1. Как правильно добавить дополнительную таблицу или вьюху в существующую публикацию, какой порядок действий ?
    2. Какой порядок действий при изменении РК в таблице участвующей в репликации ??
    3. Как можно посмотреть на сервере публикации, на какой сервер и в какую БД переливаются данные ??

    Спасибо.

    ОтветитьУдалить