Репликация
- это механизм
распространения данных из основной
базы данных(издатель) к базам данным-
подписчикам. MS SQL Server имеем
несколько видов репликаций, одна из них
репликация транзакций, которую и будем
настраивать .
Для начало немного теории. При настройки
репликации используются следующие
термины:
Статья
(article)
— это объекты, которые мы будем
реплицировать, такие как таблицы,
процедуры, вьюшки, функции и т. д.
Публикация(publication)
— это набор статей, или проще говоря
окончательный набор объектов для
репликации.
Фильтры — набор условий для статьи.
В репликации возможно использовать
фильтры на таблицы, вьюшки, что позволяет
нам реплицировать только необходимые
данные, благодаря этому уменьшается
передаваемый трафик, уменьшается
избыточность, уменьшается хранимый
объем данных.
В репликации используются так же
следующие роли:
Издатель(publisher)
-хранит главную копию
базы данных , на которой настроена
публикация
Подписчик
(subscriber)
— база данных, которая получает
реплицируемые данные.
Распространитель(distribution)
- экземпляр MS
SQL server настроенный для
сбора транзакция с публикаций и их
распространения на подписчики.
Распространитель так же имеет базу
данных для хранения реплицируемых
транзакций.
Итак, приступим к настройке репликации:
- Необходимо настроить распространителя.
Это
может быть отдельный сервер \экземпляр,
так и экземпляр с базой данной публикации
или подписчика. Рекомендую выбирать
отдельный сервер с установленным
экземпляром MS SQL или
экземпляр с базой данной подписчика.
Распространитель может использоваться
для нескольких издателей и подписчиков.
Настраивать
репликацию легче всего в графическом
режиме.
На
объекте «Репликация» в контекстном
меню выбираем настройка Распространиетеля
(Configure Distribution)
Далее выбираем, что указанный сервер
будет Издателем:
Затем
указываем расположение моментального
снимка, Моментальный снимок необходим
для начальной инициализации репликации.
В
следующем окне указываем название базы
данных распространителя, рекомендуется
оставить по умолчание -
distribution.
После этого надо в свойства распространителя добавить наш сервер издателя и указать пароль доступа к распространителю:
2)Следующий
шаг — настройка публикации.
Выбираем
на объекте MS SQL сервера
Replication пункт
меню новая публикация:
в следующем
окне указываем пароль доступа к
распространителю, указанный в п.1.
Выбираем
базу данных для репликации:
выбираем тип репликации, у нас репликация транзакций (Transactional publication)
Далее выбираем стать для публикации, т.е выбираем объекты базы данных для репликации, на примере выбраны таблицы схемы Person и таблица databaselog, а также процедура. В таблицах можно выбрать репликацию отдельных полей, т.е которые нам нужны, далее можно указать свойства отдельных статей, кнопка Article Properties.
В
окне выбора фильтров, укажем фильтр на
таблицу DatabaseLog ='Person'
Далее
указываем, что моментальный снимок
создается сразу при инициализации
подписчика:
В следующих
окнах указываем учетную запись для
моментального снимка, затем указываем
имя публикации и создаем публикацию.
После этого у разделе репликации появится
наша публикация:
3)Настройка подписчика.
Выбираем
нашу публикацию, указываем сервер и
после этого отобразятся доступные
публикации
Выбираем
тип репликации:
На
примере выбрана репликация с расположением
агентов на подписчиках, т.е Pull
репликация, образно говоря
каждые подписчик «тянет» на себя
транзакции с распространителя.
Указываем базу данных, куда будет идти репликация, или создаем новую базу данных:
В следующем
окне указываем учетную запись для
доступа к распространителю, далее
указываем тип запуска агента
На примере
указана тип запуска постоянно, т.е
проверка новых транзакций будет
постоянна.
И указываем
инициализацию
После
этого запускаем создание подписки, в
том числе создание моментального снимка
в ранее указанный каталог. После того
как моментальный снимок будет создан,
этот снимок применяется на подписчике:
создаются все объекты, которые у
нас были включены в публикацию.
После
этого за репликацией можно наблюдать
ч помощью «Монитора Репликации»
Данное
средство помогает отслеживает работу
репликации, отображать ошибки и состояние
агентов.
Так же
после создание репликация, создаются
три джоба с примерно такими именами:
Данные
джобы отвечают за:
- Создание моментального снимка - категория задания Repl-Snapshot
- Чтение журнала транзакций - категория задания Repl-LogReader
- Агент распространения транзакций — категория задания Repl-Distribution
Это
основные агенты, которые отвечают в
репликации за передачу данных.
Так же
репликация создает дополнительные
задания ( см. выше указанный список),
которые необходимы для обслуживания
репликации.
Небольшие
советы и ограничения по репликации:
- В публикацию можно включать только таблицы с первичным ключом
- Есть ограничения на поля Identity и триггера
- Рекомендуется отключить расписание создания моментального снимка, т.к для больших баз данных это будет довольно расточительная операция
- Реплицируются по умолчанию только кластерные индексы, на подписчике возможно создавать свои индексы, в отличие от других способов HighAvailable MS SQL Server-а,. Так же, базу данных на подписчике доступна как для чтения, так и для изменения данных, что вкупе с созданием индексов идеально подходит для использования отчетной базы данных.
- На подписчике нужно быть аккуратно с изменениями в базе данных, т.к при приходе транзакции, которая изменяет данные, а эти данные были удалены или изменены, то репликация может остановиться, до решения данной проблемы.
Вот и все - репликция транзакций настроена.
Добрый день
ОтветитьУдалитьСпасибо за статью, оч доступно.
Раз Вы в этом разбираетесь, хотелось бы получить на три вопроса:
1. Как правильно добавить дополнительную таблицу или вьюху в существующую публикацию, какой порядок действий ?
2. Какой порядок действий при изменении РК в таблице участвующей в репликации ??
3. Как можно посмотреть на сервере публикации, на какой сервер и в какую БД переливаются данные ??
Спасибо.