Талисман sql не проходит репликация

MS SQL Server: пошаговая настройка репликации

В этой статье мы рассмотрим, как настроить самый распространений тип репликации в SQL Serverтранзакционную репликацию. Этот тип репликации SQL Server используется для копирования данных в режиме реального времени, то есть данные на подписчиках появляются практически сразу (с учетом времени которое тратится на копирование данных по сети).

Репликация транзакций проста в настройке и доступна во всех версиях SQL Server. Данный тип репликации используется для двух целей:

  • Репликация данных между несколькими серверами для read доступа (например, для разгрузки серверов OLTP типа);
  • Как решение для избыточности данных отдельных объектов.

Хотя у SQL Server есть много решений для балансировки нагрузки select запросов и средств обеспечения отказоустойчивости, транзакционная репликация это самый простой и быстрый способ, так как вы можете реплицировать отдельные объекты. Так же этот вид репликации полностью доступен в Standard лицензии SQL Server ( в отличии от групп доступности Always On, которые полноценно доступны только в Enterprise).

Преимущество репликации перед Always ON и зеркалированием баз данных в том, что с помощью репликации вы можете скопировать отдельные объекты (отдельные таблицы/представления), а не базу данных целиком.

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

SQL Server: основы технологии репликации

В любом типе репликации SQL Server есть 3 типа серверов:

  • Publisher (издатель) – основной экземпляр-источник, который публикует статьи;
  • Distributor (распространитель) – экземпляр который распространяет статьи на сервера-подписчики. Этот тип экземпляра не хранит у себя данные издателя на постоянной основе, а распространяет их подписчикам;

Роли могу пересекаться между собой. Например, один экземпляр может быть и издателем, и подписчиком (но не самого себя).

Работа репликации транзакций осуществляется через внутренние агенты SQL Server’а:

  • Агент чтения журналов;
  • Агент моментальных снимков;
  • Агент распространения.

При появлении транзакций в объектах, участвующих в репликации, на издателе, агент чтения журналов копирует эти транзакции на экземпляр-распространитель, затем агент распространитель копирует данные на подписчиков. Агент моментальных снимков участвует только тогда, когда нужно скопировать новый моментальный снимок (обычно это происходит при инициализации и реинициализации репликации).

Транзакции доставляются на подписчиков в той последовательности, в которой они были отправлены на издателя. Если транзакций слишком много, образуется очередь.

Транзакционная репликация работает асинхронно, так же как и асинхронные режимы Always On и зеркалирования баз данных. То есть, данные, которые были записаны на издатель, будут отправлены на подписчики без гарантии доставки в случае сбоя во время передачи данных. Это нужно учитывать, если вы собираетесь использовать транзакционную репликацию для избыточности и высокой доступности данных в SQL Server.

Схема связи агентов между собой из официальной документации:

Рассмотрим, как настроить репликацию в SQL Server на следующем тестовом стенде:

  • 2 виртуальные машины с Windows Server 2019 в одной сети;
  • 2 установленных экземпляра SQL Server 2019.
  • testnode1\node1 – издатель (Publisher);
  • testnode2\node2 – подписчик (Subscriber);
  • testnode2\node2 – распространитель (Distributor).

В этом примере мы будем реплицировать одну таблицу с testnode1\node1 на testnode\node2. В роли распространителя будет выступать testnode2\node2.

Настройка распространителя в SQL Server

Для начала нужно настроить экземпляр распространителя. В разделе Replication, в контекстном меню нажмите Configure Distribution

Так как мы хотим использовать этот экземпляр в качестве распространителя, выбираем первый пункт (testnove2 will act as its own Distributor; SQL Server will create a distribution databasse and log).

Указываем директорию для моментальных снимков. Я оставлю стандартный путь.

Указываем директорию для базы данных Distribution. Если есть такая возможность, то лучше разместить файлы базы данных distribution на отдельном массиве дисков. Особенно это важно, если планируется большой объём реплицируемых данных.

На этом шаге можно указать экземпляры, которые смогут использовать данный сервер как распространитель. Я сразу добавлю testnode1\node1. Это можно сделать и позже, после начальной конфигурации.

Укажите пароль для связи с экземплярами, которые будут связываться с распространителем.

После этого можно жать Finish. На этом настройка распространителя завершена.

Если вы хотите изменить пароль распространителя или разрешить другим издателям использовать этот распространитель, то можно это сделать через Distributor Properties

Настройка издателя репликации в SQL Server

Теперь переходим к настройкам издателя репликации. Запустите тот же мастер Configure Distributuin.


Выберите второй пункт, указываем сервер распространитель – testnode2\node2

После этого введите пароль, который вы указывали при настройке распространителя и нажмите Finish.

Теперь можно создать новую публикацию: Replication -> Local Publication -> New Publication.

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

Выберите тип репликации. Доступны:

  • Snapshot publication;
  • Transactional publication (выберите этот тип репликации);
  • Peer-to-Peer publication;
  • Merge publication.

Выберите таблицы, которые нужно реплицировать. С помощью транзакционной репликации так же можно реплицировать пользовательские процедуры, функции и представления. Реплицируемые объекты называются Articles (Статьи).

На следующем шаге можете указать фильтр для публикации.

Чтобы мастер сразу создал моментальный снимок, выберите опцию “Create a snapshot immediately and keep the snapshot available to initialize subscriptions”.

Укажите аккаунты, из-под которых будут выполняться агенты. Нажмите Security Settings и выберите “Run under SQL Server Agent service account”.

В имени публикации я указываю названия сервера-подписчика. Так легче ориентироваться если публикаций на другие сервера будет много.

Настройка подписчика репликации в SQL

На testnode2\node2 в разделе Replication -> Local Subscriptions создайте новую подписку.

Local Subscriptions в sql server» width=»339″ height=»256″ srcset=»https://winitpro.ru/wp-content/uploads/2020/02/sozdat-podpisku-replikacii-greater-local-subscriptions.png 366w, https://winitpro.ru/wp-content/uploads/2020/02/sozdat-podpisku-replikacii-greater-local-subscriptions-300×226.png 300w» sizes=»(max-width: 339px) 100vw, 339px»/>

Выберите издателя, базу данных и публикацию в ней.

Выберите пункт “Run all agents at the Distributor”, чтобы агенты выполнялись на распространителе. В моём случае подписчик и распространитель совпадают, но обычно это разные сервера.

Если выбрать второй пункт (“Run each agent at its Subscriber”), то агенты будут выполняться на подписчике. Этот вариант предпочтителен, если распространитель у вас “формальный” и находится на одном сервере с издателем или подписчиком

Укажите базу данных, в которую будут реплицироваться данные из Subscription Database.

Снова укажите аккаунт, из-под которого будут выполняться агенты репликации.

Если вы хотите, чтобы данные реплицировались постоянно, выбирайте режим Agent Schedule -> Run continuously.

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

При включении параметра “Memory Optimized” таблицы на подписчике с этой публикации будут созданы как “In memory”. Если вы не планируете эти таблицы как таблицы для использования в оперативной памяти, то не отмечайте этот параметр.

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

Мониторинг и управление репликацией в SQL Server

Практически всю настройку существующих публикаций можно провести через Replication Monitor.

Добавьте издателей через распространителя (Add Publisher -> Specify a Distributor and Add its Publishers).

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

Убедимся, что агент моментальных снимков отработал и доставил снимок на распространителя. В моём случае сначала была ошибки о том, что аккаунту из-под которого работают агенты, не хватает прав на базе TestDatabase1. Для решения этой проблемы я добавил сервисному аккаунту (из-под которого работает SQL Server) роль db_owner в базе TestDatabase1 на обоих экземплярах.

Так же убедимся, что распространитель доставил транзакции на подписчика.

В логах агентов ошибок нет, проверим что наша таблица действительно появилась в базе.

Для начала добавим новую запись в таблицу.


Проверяем, что эта запись реплицировалась на testnode2\node2.

На этом базовая настройка репликации транзакций в SQL Server закончена.

Для диагностики проблем с репликацией в основном используется Replication Monitor, но можно использовать и дополнительные инструменты диагностики SQL Server.

Источник

Руководство по Настройка репликации между двумя полностью подключенными серверами (репликация транзакций)

Применимо к: SQL Server (все поддерживаемые версии)

Репликация транзакций — это хорошее решение для перемещения данных между постоянно подключенными серверами. С помощью мастера репликации можно легко настроить и администрировать топологию репликации.

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

Новые знания

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

В этом учебнике рассматривается следующее.

  • создание издателя путем репликации транзакций;
  • создание подписчика для издателя транзакций;
  • проверка подписки и измерение задержки.

Предварительные требования

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

Для работы с этим учебником требуется SQL Server, среда SQL Server Management Studio (SSMS) и база данных AdventureWorks.

На сервере-издателе (источник) установите следующее:

  • Любой выпуск SQL Server, кроме SQL Server Express или SQL Server Compact. Эти выпуски не могут быть издателями репликации.
  • Образец базы данных AdventureWorks2012 . В целях повышения безопасности образцы баз данных по умолчанию не устанавливаются.

На сервере-подписчике (целевом) установите любой выпуск SQL Server, кроме SQL Server Compact. SQL Server Compact не может быть подписчиком при репликации транзакций.

  • Репликация не поддерживается в экземплярах SQL Server, которые отличаются друг от друга больше, чем на две версии. См. дополнительные сведения о поддерживаемых версиях SQL Server в топологии репликации.
  • В среде SQL Server Management Studio необходимо подключиться к издателю и подписчику с помощью имени входа, которое является членом предопределенной роли сервера sysadmin. Дополнительные сведения о роли см. в статье Роли уровня сервера.

На изучение этого руководства потребуется примерно 60 минут

Настройка издателя для репликации транзакций

В этом разделе с помощью среды SQL Server Management Studio создается публикация транзакций для публикации фильтрованного подмножества таблицы Продукт из примера базы данных AdventureWorks2012. Также в список доступа к публикации (PAL) добавляется имя входа SQL Server, используемое агентом распространителя.

Создание публикации и определение статей

Подключитесь к издателю в среде SQL Server Management Studio, а затем раскройте узел сервера.

Щелкните правой кнопкой мыши элемент Агент SQL Server и выберите пункт Запустить. Прежде чем приступить к созданию публикации, необходимо запустить агент SQL Server. Если при выполнении этого действия агент не запускается автоматически, его нужно запустить вручную с помощью диспетчера конфигурации SQL Server.

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

На странице База данных публикации выберите AdventureWorks2012 и нажмите кнопку Далее.

На странице Тип публикации выберите Публикация транзакций и нажмите кнопку Далее:

На странице Статьи разверните узел Таблицы и установите флажок Продукт. Затем разверните узел Продукт и снимите флажки ListPrice и StandardCost. Выберите Далее.

На странице Фильтрация строк таблицы нажмите кнопку Добавить.

В диалоговом окне Добавление фильтра выберите столбец SafetyStockLevel. Щелкните стрелку вправо, чтобы добавить столбец в предложение WHERE инструкции фильтра запроса. После этого вручную введите следующий модификатор предложения WHERE:

Нажмите кнопку ОК, а затем кнопку Далее.

Установите флажок Создать моментальный снимок немедленно и обеспечить доступ к нему для инициализации подписок и нажмите кнопку Далее:

На странице Безопасность агентов снимите флажок Использовать настройки безопасности агента моментальных снимков.

Выберите Настройки безопасности для агента моментальных снимков. Введите \repl_snapshot в поле Учетная запись процесса, укажите пароль этой учетной записи и нажмите кнопку ОК.

Повторите предыдущий шаг, чтобы указать \repl_logreader в качестве учетной записи процесса для агента чтения журнала. Нажмите кнопку ОК.

На странице Завершение работы мастера введите AdvWorksProductTrans в поле Имя публикации и нажмите кнопку Готово:

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

Если при попытке создать публикацию обнаруживается, что агент SQL Server не запущен, может возникнуть следующая ошибка. Она указывает на то, что публикация создана успешно, но при этом агент моментальных снимков запустить не удалось. В этом случае необходимо запустить агент SQL Server, а затем вручную запустить агент моментальных снимков. Инструкции приведены в следующем разделе.

Просмотр состояния создания моментального снимка

Подключитесь к издателю в среде SQL Server Management Studio, а затем разверните узел сервера и папку Репликация.

В папке Локальные публикации щелкните правой кнопкой мыши публикацию AdvWorksProductTrans и выберите пункт Просмотр состояния агента моментальных снимков:

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

Если агент SQL Server не был запущен при создании публикации, в сведениях о состоянии агента моментальных снимков для публикации будет указано, что он никогда не запускался. В таком случае выберите Запустить, чтобы запустить агент моментальных снимков:

Если отображается сообщение об ошибке, ознакомьтесь с разделом Устранение неполадок с агентом моментальных снимков.

Добавление имени входа агента распространения в список доступа к публикации

Подключитесь к издателю в среде SQL Server Management Studio, а затем разверните узел сервера и папку Репликация.

В папке Локальные публикации щелкните правой кнопкой мыши публикацию AdvWorksProductTrans и выберите пункт Свойства. Откроется диалоговое окно Свойства публикации.

а. Выберите страницу Список доступа к публикации и нажмите кнопку Добавить.
b. В диалоговом окне Добавление доступа к публикации выберите \repl_distribution и нажмите кнопку ОК.

Создание подписки на публикацию транзакций

В рамках этого раздела к созданной ранее публикации добавляется подписчик. В этом руководстве используется удаленный подписчик (NODE2\SQL2016), но при необходимости подписку для издателя можно добавить локально.

Создание подписки

Подключитесь к издателю в среде SQL Server Management Studio, а затем разверните узел сервера и папку Репликация.

В папке Локальные публикации щелкните правой кнопкой мыши публикацию AdvWorksProductTrans и выберите команду Создать подписку. Запустится мастер создания подписки:

На странице Публикация выберите публикацию AdvWorksProductTrans и нажмите кнопку Далее:

На странице Расположение агента распространения установите флажок Выполнять все агенты в распространителе и нажмите кнопку Далее. Дополнительные сведения о подписках см. в статье Подписка на публикации.

На странице Подписчики, если имя экземпляра подписчика не отображается, выберите пункт Добавить подписчик, а затем выберите Добавить подписчик SQL Server из раскрывающегося списка. После этого откроется диалоговое окно Подключение к серверу. Введите имя экземпляра подписчика, а затем выберите Подключиться.

Добавив подписчик, установите флажок рядом с именем его экземпляра. Затем выберите пункт Создать базу данных в разделе База данных подписки.

Откроется диалоговое окно Новая база данных. Введите ProductReplica в поле Имя базы данных, нажмите кнопку ОК и затем кнопку Далее:

На странице Безопасность агента распространения нажмите кнопку с многоточием ( ). Введите \repl_distribution в поле Учетная запись процесса, введите пароль этой учетной записи, нажмите кнопку ОК, а затем — кнопку Далее.

Нажмите кнопку Готово, чтобы принять значения по умолчанию на оставшихся страницах и завершить работу мастера.

Установка разрешений базы данных на подписчике

Подключитесь к подписчику в SQL Server Management Studio. Разверните узел Безопасность, щелкните правой кнопкой мыши Имена для входа, а затем выберите команду Создать имя для входа.

а. На странице Общие в разделе Имя для входа выберите Найти и добавьте имя для входа для \repl_distribution.

b. На странице Сопоставления пользователей назначьте базе данных ProductReplica членство с именем для входа db_owner.

Нажмите кнопку ОК, чтобы закрыть диалоговое окно Создание имени для входа.

Просмотр сведений о состоянии синхронизации подписки

Подключитесь к издателю в SQL Server Management Studio. Разверните узел сервера и папку Репликация.

В папке Локальные публикации разверните публикацию AdvWorksProductTrans, щелкните правой кнопкой мыши подписку в базе данных ProductReplica и выберите пункт Просмотр состояния синхронизации. Отобразятся сведения о текущем состоянии синхронизации подписки:

Если подписка не отображается под публикацией AdvWorksProductTrans, нажмите клавишу F5 для обновления списка.

Дополнительные сведения см. в разделе:

Измерение задержки репликации

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

Подключитесь к издателю в SQL Server Management Studio. Разверните узел сервера, щелкните правой кнопкой мыши папку Репликация и выберите пункт Запустить монитор репликации:

Разверните группу издателей на левой панели, затем разверните экземпляр издателя и выберите публикацию AdvWorksProductTrans.

а. Откройте вкладку Трассировочные токены.
b. Выберите команду Вставить трассировочный токен.
c. Просмотрите затраченное время для трассировочного токена в следующих столбцах: От издателя к распространителю, От распространителя к подписчику, Общая задержка. Значение Ожидание указывает на то, что маркер еще не достиг указанной точки.

Дополнительные сведения см. в разделе:

Дальнейшие действия

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

В следующей статье будет описана настройка репликации слиянием:

Источник

Читайте также:  Знак зодиака близнецы амулет оберег
Оцените статью