Вы сталкиваетесь с проблемой перемещения подписчика для объединения публикации на новый SQL Server? Удаление старого подписчика и создание нового может показаться единственным вариантом, но есть другое решение. В этой статье мы рассмотрим, как выполнить эту задачу, восстановив полное резервное копирование существующего подписчика на новый сервер и внесши несколько изменений в таблицы репликации, не удаляя старую подписку и не создавая новую.
Сценарий
Допустим, у нас есть два экземпляра, SERV1 и SERV2. База данных публикации, db1, находится на SERV1, а база данных подписчика, db1, находится на SERV2. Наша цель – переместить подписчика с SERV2 на SERV3, не удаляя существующую подписку и не создавая новую на новом сервере.
Шаги по перемещению объединения репликации на новый SQL Server
- Остановите синхронизацию публикации с помощью Replication Monitor.
- Создайте полное резервное копирование базы данных SQL Server существующего подписчика на SERV2.
- Скопируйте файл резервного копирования SQL Server с SERV2 на SERV3 и восстановите его с помощью опции KEEP_REPLICATION.
- Обновите имя сервера в нескольких таблицах репликации в базе данных издателя SQL Server.
- Повторите предыдущий шаг в новой базе данных подписчика на сервере SERV3.
- Обновите имя сервера в таблицах MSmerge_agents и MSmerge_subscriptions в базе данных распределения.
- Измените задание SQL Server Agent, заменив старое имя подписчика на новое.
- Включите синхронизацию для публикации SQL Server.
BACKUP DATABASE db1 TO DISK = N'C:\db1.bak' WITH NOFORMAT, NOINIT, NAME = N'db1-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10
GORESTORE DATABASE db1 FROM DISK = N'C:\db1.bak' WITH FILE = 1, KEEP_REPLICATION, NOUNLOAD, STATS = 10
GO-- Запустите в базе данных публикации
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'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'Теперь вы можете снова начать синхронизацию из Replication Monitor и убедиться, что изменения успешно реплицируются.
Следуя этим шагам, вы можете переместить подписчика для объединения публикации на новый SQL Server, не удаляя старую подписку и не создавая новую. Этот подход может сэкономить вам время и усилия, особенно при работе с большими базами данных и сложными настройками репликации.
Спасибо за прочтение этой статьи. Мы надеемся, что она поможет вам решить ваши проблемы с репликацией SQL Server.