Published on

June 30, 2023

Как переместить подписчика для объединения публикации на новый SQL Server

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

Сценарий

Допустим, у нас есть два экземпляра, SERV1 и SERV2. База данных публикации, db1, находится на SERV1, а база данных подписчика, db1, находится на SERV2. Наша цель – переместить подписчика с SERV2 на SERV3, не удаляя существующую подписку и не создавая новую на новом сервере.

Шаги по перемещению объединения репликации на новый SQL Server

  1. Остановите синхронизацию публикации с помощью Replication Monitor.
  2. Создайте полное резервное копирование базы данных SQL Server существующего подписчика на SERV2.
  3. BACKUP DATABASE db1 TO DISK = N'C:\db1.bak' WITH NOFORMAT, NOINIT, NAME = N'db1-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10
    GO
  4. Скопируйте файл резервного копирования SQL Server с SERV2 на SERV3 и восстановите его с помощью опции KEEP_REPLICATION.
  5. RESTORE DATABASE db1 FROM DISK = N'C:\db1.bak' WITH FILE = 1, KEEP_REPLICATION, NOUNLOAD, STATS = 10
    GO
  6. Обновите имя сервера в нескольких таблицах репликации в базе данных издателя SQL Server.
  7. -- Запустите в базе данных публикации
    SELECT * FROM sysmergepublications WHERE name = 'MergeReplication1'
    
    UPDATE sysmergesubscriptions 
    SET subscriber_server = 'SERV3' 
    WHERE subscriber_server = 'SERV2' 
    AND DB_NAME = 'db1'
    AND pubid = '4936E2B1-4B35-4658-890A-AE7F05C90AEC'
  8. Повторите предыдущий шаг в новой базе данных подписчика на сервере SERV3.
  9. Обновите имя сервера в таблицах MSmerge_agents и MSmerge_subscriptions в базе данных распределения.
  10. SELECT * FROM MSmerge_agents
    
    UPDATE MSmerge_agents 
    SET subscriber_name = 'SERV3' 
    WHERE subscriber_db = 'db1' 
    AND publication = 'MergeReplication1'
    AND subscriber_name = 'SERV2'
    
    
    SELECT * FROM MSmerge_subscriptions 
    
    UPDATE MSmerge_subscriptions 
    SET subscriber = 'SERV3' 
    WHERE subscriber = 'SERV2'
    AND publisher_db = 'db1'
  11. Измените задание SQL Server Agent, заменив старое имя подписчика на новое.
  12. Включите синхронизацию для публикации SQL Server.

Теперь вы можете снова начать синхронизацию из Replication Monitor и убедиться, что изменения успешно реплицируются.

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

Спасибо за прочтение этой статьи. Мы надеемся, что она поможет вам решить ваши проблемы с репликацией SQL Server.

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.