Увімкнути транзакційну реплікацію поновлюваних підписок у SQL Server 2019

Дата створення сторінки :

Вступ і запобіжні заходи

Ця стаття призначена для реплікації в SQL Server 2019. Одна з функцій в ньому - "поновлювана підписка" включена.

Ця функція була включена за промовчанням у попередніх версіях SQL Server, але була відключена з (ймовірно) 2017 року.

Майбутні версії SQL Server можуть видалити цю функцію. За винятком оновлення існуючого середовища, ми рекомендуємо замінити його на нову конструкцію з реплікацією злиття тощо.

Посилання

середовище

Використовуйте два сервери, один сервер і два SQL Server. Windows Server знаходиться в стані, коли ніяких додаткових налаштувань не було зроблено відразу після установки.

1-й блок (сторона публікації)
  • Стандартне видання Windows Server 2019
  • Sql Server 2019 розробник видання (стандартне видання або вище потрібно)
  • SQL Server управління студії 18.9.1
Другий блок (абонентська сторона)
  • Стандартне видання Windows Server 2019
  • Експрес-видання SQL Server 2019
  • SQL Server управління студії 18.9.1

мета

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

До речі, один на стороні публікації в порядку, але абонентська сторона може мати будь-яку кількість одиниць. Він також працює з кількома екземплярами SQL Server на одному сервері.

Інсталяція SQL Server

Установка SQL Server не є основною частиною цих порад, тому я не буду вдаватися в подробиці. Перераховані лише ті, які мають відношення до реплікації.

Для інсталяції сторони публікації потрібне стандартне видання або новіша версія. Ці поради інсталює developer edition як тестове середовище.

Абоненти в порядку з Експрес-видання. Звичайно, інші видання в порядку, в залежності від конфігурації БД.

Для вибору функцій виберіть службу обробника баз даних і реплікації SQL Server. Це те ж саме як для сторони публікації, так і для абонентської сторони.

Конфігурація екземпляра за промовчанням виконується як на стороні публікації, так і на стороні передплатника. Навіть якщо ви зміните ім'я екземпляра, різниця полягає в тому, чи вкажете ви ім'я екземпляра в специфікації сервера пізніше.

На стороні публікації настройте агент SQL Server для автоматичного запуску. Ви можете змінити цей параметр пізніше.

Ця порада автентифікує реплікацію за допомогою облікового запису SQL Server sa. Таким чином, увімкнути автентифікацію SQL Server. Якщо ви не хочете використовувати обліковий запис А комп'ютера SA з міркувань безпеки, замінити частину автентифікації SQL Server пояснення пізніше на автентифікацію Windows або інший обліковий запис А комп'ютера.

Зробіть цей параметр однаковим на обох серверах.

Інсталяція студії керування SQL Server

Інсталюйте завантажену студію керування SQL Server. Оскільки екран установки призначений тільки для установки, пояснення опускається.

Перезавантажте Windows, якщо буде запропоновано перезавантажити комп'ютер після інсталяції. Крім того, інсталюйте будь-які виправлення в службі Windows Update.

Створення бази даних і таблиць на стороні публікації

У разі створення таблиці на стороні публікації сторона передплатника автоматично копіює таблицю або запис.

Спосіб створення такий же, як і звичайна процедура, тому я опускаю деталі.

Ви створюєте базу даних з іменем publication DB в SQL Server управління студії.

Створіть таблицю з назвою "Користувачі" та зареєструйте стовпці наступним чином: Все, що вам потрібно зробити, це перевірити синхронізацію записів, щоб ім'я, число та вміст стовпця таблиці могли бути будь-якими. Однак потрібен тільки первинний ключ.

Додайте кілька записів, щоб переконатися, що записи синхронізовано після створення реплікації.

Настроювання віддалених підключень

Налаштуйте їх, щоб дозволити віддалений доступ до баз даних серверів один одного. Деталі узагальнюються в наступних порадах.

Настроювання дозволів папки

На сервері на стороні публікації відкрийте властивості такої папки: Шлях до папки залежить від версії SQL Server та імені екземпляра.

  • C:\Program Files\Microsoft SQL Server\MSSQL15. MSSQLSERVER\MSSQL\ReplData

На вкладці Безпека додайте обліковий запис "СЕРВІС" і встановіть його на повний контроль.

Настроювання дистрибутива

На цей раз дистрибутив створюється на тому ж сервері, що і публікація.

Запустіть студію керування SQL Server, клацніть правою кнопкою миші реплікацію та виберіть пункт Настроїти розподіл.

Натисніть кнопку Далі.

Поставте галочку "Зробіть свій власний сервер > власним дистриб'ютором" <.

Після цього натисніть "Далі", як це є, щоб завершити його.

Створення публікації

Спочатку він створюється з майстра, як показано на наступному малюнку, У SQL Server 2019 створення з майстра не вмикає "поновлювані підписки" і не дозволяє синхронізації записів між таблицями.

Тому ми використовуємо T-SQL для створення публікації тут.

Нижче наведено SQL для створення публікації з автентифікацією SQL Server: Будь ласка, змініть пароль відповідно до ваших налаштувань.

-- トランザクションパブリケーションを追加するための宣言
DECLARE @publicationDB AS sysname;
DECLARE @publication AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS sysname;
SET @publicationDB = N'パブリケーションDB'; 
SET @publication = N'パブリケーション'; 
SET @login = 'sa'; 
SET @password = 'saパスワード'; 

USE [パブリケーションDB]

-- パブリケーションデータベースでトランザクションレプリケーションを有効にする。
EXEC sp_replicationdboption 
    @dbname=@publicationDB, 
    @optname=N'publish',
    @value = N'true';

-- sp_addlogreader_agent を実行して、エージェントジョブを作成します。
EXEC sp_addlogreader_agent 
    @publisher_login = @login, 
    @publisher_password = @password,
    @publisher_security_mode = 0;

-- 即時更新、キュー更新、およびプルサブスクリプションをサポートするトランザクションパブリケーションを作成します。
EXEC sp_addpublication 
    @publication = @publication, 
    @status = N'active',
    @allow_sync_tran = N'true', 
    @allow_queued_tran = N'true',
    @allow_pull = N'true',
    @independent_agent = N'true',
    -- 関連するデフォルトのプロパティを明示的に宣言する
    @conflict_policy = N'pub wins';

-- デフォルトのスケジュールを使用して、パブリケーションの新しいスナップショットジョブを作成します。
EXEC sp_addpublication_snapshot 
    @publication = @publication, 
    @publisher_login = @login, 
    @publisher_password = @password,
    @publisher_security_mode = 0;
GO

При використанні автентифікації Windows змініть частини "sp_addlogreader_agent" і "sp_addpublication_snapshot" наступним чином.

Автентифікація SQL Server

    @publisher_login = @login, 
    @publisher_password = @password,
    @publisher_security_mode = 0;

Автентифікація Windows

    @job_login = @login, 
    @job_password = @password,
    @publisher_security_mode = 1;

Якщо він створений успішно, ви побачите наступне:

Також відкрийте властивості створеної публікації та переконайтеся, що увімкнено «Відновлювану підписку».

Визначення статей

Спочатку, якщо ви створюєте його за допомогою майстра, ви вкажете статтю одночасно, Оскільки наведений вище скрипт не включає обробку статей, він вказується з властивості.

Виберіть "Статті" з меню ліворуч, перевірте таблицю, яку потрібно синхронізувати, і натисніть кнопку OK.

До стовпців таблиці, які потрібно синхронізувати, додається msrepl_tran_version, і одночасно додається тригер таблиці.

Створення передплати

Клацніть правою кнопкою миші щойно створену публікацію та виберіть пункт Створити передплату.

Натисніть кнопку Далі.

Виберіть створену публікацію.

Установіть прапорець Запускати всіх агентів на < ім'я сервера дистриб'ютора>.

Натисніть кнопку Додати абонента SQL Server.

Визначає сервер (+ ім'я екземпляра) для реєстрації як абонента.

Якщо у вас немає абонентської бази даних, створіть нову. Якщо він уже існує, виділіть його, оскільки відображається елемент виділення.

Після визначення бази даних натисніть кнопку Далі.

Якщо у вас більше одного абонента, ви можете зареєструвати стільки, скільки вам потрібно тут.

Натисніть кнопку "..."

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

Виберіть "Запускати безперервно".

Параметр "Поновлювані джерела підписки" повинен працювати.

У разі «коміт-змін одночасно» він синхронізується відразу, але всі сервери повинні працювати.

"Зміна черги та коміт, якщо це можливо" накопичує зміни в черзі, тому вони здійснюються під час роботи сервера, навіть якщо сервер не працює. Однак, синхронізація часу повільна.

Установіть прапорець Використовувати попередньо визначений зв'язаний або віддалений сервер.

Виберіть елемент Зараз.

Натисніть кнопку Далі.

Натисніть кнопку Готово.

Закрити, якщо помилок немає.

Через кілька хвилин ви можете побачити, що база даних була створена на стороні абонента і що таблиці також були створені.

Можна переконатися, що записи також синхронізовано.

Якщо він не синхронізується через деякий час, виконайте наступне.

Клацніть правою кнопкою миші створену підписку та виберіть пункт Змінити.

Поставте галочку «Використовувати новий знімок» і натисніть кнопку «Встановити для повторного використання».

Якщо сталася помилка, повторіть спробу.

Перевірка операції

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

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

Тепер давайте змінимо запис на стороні абонента.

Можна переконатися, що його синхронізовано зі стороною публікації.

Якщо у вас зареєстровано кілька передплатників, переконайтеся, що вони синхронізовані між передплатниками.