Iva*_*off 5 replication sql-server transactional-replication sql-server-2016
我在同一台服务器上有发布者和订阅者。我需要将订阅者的数据库移动到另一台服务器但不创建新快照。我试过这个步骤:
然后我启动了代理并收到错误 20053(服务器未注册)。我通过将链接服务器添加到新服务器来修复它
之后,我收到错误 20044(订阅已过时或不存在),但订阅存在。
我做错了什么或者我错过了任何步骤?
我不能使用备份初始化,因为订阅者有一些额外的表、视图、例程。谢谢
我的回答假设您是在停机期间执行此操作。
一旦停机开始(确认应用程序服务器没有建立任何新的连接/写入发布文章):
仅复制支持 在订阅者处提供支持更新订阅的文章自定义存储过程和触发器的自动生成(如果适用)。假设订阅服务器已经拥有已发布表的架构和初始数据。配置对等事务复制拓扑时,请确保拓扑中所有节点上的数据相同。有关更多信息,请参阅对等事务复制。
不支持订阅非 SQL Server 发布。
您可以使用此查询来查找分发数据库中未传递的命令。
SELECT ss.srvname AS publisher,
[name] AS Agent,
publication,
a.publisher_db,
subscriber_db,
art.article,
art.destination_object,
art.source_object,
undelivcmdsindistdb,
delivcmdsindistdb,
s.article_id,
agent_id,
a.publisher_id,
subscriber_id
FROM distribution.dbo.msdistribution_status AS s WITH (nolock)
FULL OUTER JOIN distribution.dbo.msdistribution_agents AS a WITH (nolock)
ON s.agent_id = a.id
JOIN master.dbo.sysservers AS ss WITH (nolock)
ON a.publisher_id = ss.srvid
JOIN distribution.dbo.msarticles AS art WITH (nolock)
ON s.article_id = art.article_id
WHERE subscriber_db <> 'virtual'
AND subscriber_db = 'SubscriberDBName'
ORDER BY undelivcmdsindistdb DESC
COMPUTE sum(undelivcmdsindistdb)
Run Code Online (Sandbox Code Playgroud)