我有一个托管在 SQL Server 2008R2 Standard 上的生产数据库,该数据库通过订阅生产数据库复制到运行相同版本 SQL Server 的第二台服务器。订阅者数据库用于对数据运行 SQL 报告。删除不会被复制,因此与每周清理的生产发布数据库相比,报告数据库非常大。
我正计划更换托管已发布数据库的服务器,并且想知道最好的做法是确保订阅者数据库不会丢失任何数据。这是要遵循的步骤的合理概述:
- 将最新备份的副本从旧生产数据库还原到新服务器
- 使用与旧数据库相同的设置发布此新数据库
- 从旧发布的数据库中取消订阅(或任何中断复制的适当术语)报告订阅的数据库
- 将报告数据库订阅到新发布
就这么简单,还是我错过了什么可以转身咬我的东西?我要确保的主要内容是用于报告的数据库(订阅数据库)不会丢失任何数据,并继续从新数据库接收新的复制数据。
谢谢
您的计划是正确的,只是您需要为sp_addsubscription指定复制支持的@sync_type,它假定订阅者已经拥有已发布表的架构和初始数据,并且不会初始化从而跳过删除。
如果您使用的是 New Subscription Wizard,则可以通过在Initialize Subscriptions页面上选择Do not initialize来实现相同的目的。
诀窍在于你如何同步。在 sp_addarticle 存储过程中,@pre_creation_cmd 参数的默认设置是在订阅者处删除表。这对你来说将是一个问题。这是我可以做到的:
我还建议您借此机会为您的存档数据实施一个更安全的地方。如果复制自己中断(它可以并且确实),那么就重新初始化而言,您处于一个棘手的位置。如果我必须这样做,我会创建一个由复制调用的自定义过程(您可以使用 sp_addarticle 的@del_cmd 参数指定它)将记录插入到存档表中,然后从您的活动表中删除。但是有无数种方法可以完成同样的事情。祝你好运。