切换SQL Server复制发布

我有一个SQL Server 2008R2 Standard托pipe的生产数据库,通过订阅生产数据库,将其复制到运行同一版本SQL Server的另一台服务器上。 用户数据库用于在数据上运行SQL报告。 删除不会被复制,因此报告数据库与每周清理的生产发布数据库相比相当大。

我打算更换托pipe已发布数据库的服务器,并想知道确保订阅服务器数据库不会丢失任何数据的最佳做法。 这是一个明智的步骤要遵循的步骤:

  1. 将旧生产数据库的最新备份的副本还原到新服务器
  2. 使用与旧数据库相同的设置发布此新数据库
  3. 取消订阅(或任何中断复制的适当术语)是从旧发布的数据库报告订阅的数据库
  4. 将报告数据库订阅到新的出版物

那么简单吗,还是有些东西我错过了,可以转身咬我? 我要确保的主要事情是用于报告的数据库(订阅的数据库)不会丢失任何数据,并且继续从新数据库接收新的复制数据。

谢谢

您的计划是正确的,除非您需要指定支持sp_addsubscription的复制支持 @sync_type ,假定用户已经拥有架构和已发布表的初始数据,并且不会初始化,从而跳过了删除。

如果您正在使用“新build订阅向导”,则可以通过在“ 初始化订阅”页面上select“不初始化”来实现相同的function。

在这里输入图像说明

诀窍在于如何同步。 在sp_addarticle存储过程中,@pre_creation_cmd参数的缺省值是在订阅服务器上删除表。 这对你来说是一个问题。 以下是我可能会这样做的:

  1. 做任何你将要做的事情,把发布的数据库移动到新的服务器上。 这可能包括打破复制(故意)。
  2. 在订阅者处,重新命名所有的表(或将其放入另一个模式)。 这将保护他们免受作为复制重新初始化过程中可能遭受的任何伤害。 或者,您可以重新命名数据库,以创build一个新的数据库作为订户。
  3. 重build发布和订阅
  4. 让发布同步
  5. 对于设置了这个归档条件的每个表,在订户的“实时”表中不存在移动表的位置的数据在步骤2中插入。 本质上,在每种情况下,保存的closures表和实时表之间的左连接

我还build议您借此机会为您的档案数据实施一个更安全的地方。 如果复制自行中断(它可以并且确实),那么就重新初始化而言,你处于一个棘手的地步。 如果必须这样做,我会创build一个由复制调用的自定义过程(您可以使用@del_cmd参数指定它以将其插入到您的存档表中,然后从您的活动表中删除)。 但是有很多方法可以完成同样的事情。 祝你好运。