我想将生产数据库中的信息添加到我的舞台数据库。我有一个生产数据库的 BAK,可以从舞台上恢复,但我担心 Merge Replication 会对此产生影响。
让我进一步解释一下;我有 15 个用户在内部测试有时连接的应用程序。其结构是每个系统上都有一个 Local SQL Express,通过 Pull Subscriptions 订阅 Stage SQL 2005 服务器。Stage 服务器充当 Publisher 和 Distributor。测试人员已请求使用“真实”数据。如果我只是将 BAK 从生产中恢复到我的 Stage 实例,我的复制集会发生什么?当本地数据库尝试同步时,他们会因为所有的 GUID 都改变而“吓坏了”吗?
我的想法是以不同的名称将 Production DB 恢复到 Stage Server,然后删除例如 tblPerson 的内容并从 Production tblPerson 运行 INSERT INTO 到现在为空的 Stage tblPerson。
我想对这两个方面的想法和建议。
从 BAK 的事业中恢复世界末日
和/或
我的第二个解决方案是一个可行的选择吗?
我还需要做那么多吗?我可以删除 tblPerson(Stage) 的内容,然后从 tblPerson(Production) 到 Stage 对应项执行 Cross DB SELECT INTO 吗?
大多数情况下,我很好奇/担心这将对我现有的订阅产生影响。
恢复数据库会破坏你的复制(至少,它在我的场景中。如果有人知道不同,请告诉我!
我们几乎按照您的建议做了 - DELETE * FROM myTable 和 INSERT INTO。这需要一段时间,但删除表或删除/恢复数据库会破坏我们场景中的复制。
我不知道这是否重要,但我们在执行此操作时还暂停了所有订阅者的复制。
您不想使用从生产到舞台环境的复制,尤其是合并复制。
您最好的选择是当您需要临时数据库中的数据来备份生产数据库并恢复整个事物时。如果您尝试拼凑它,您将不得不处理随之而来的所有参照完整性问题。
INSERT INTO 或 BCP 都可能有效。正如您所提到的,恢复生产数据库需要您在暂存实例中重新创建复制。SELECT INTO 不是一个好主意,因为您不能使用现有表作为 INTO 子句的目标 - 它必须是一个新表 - 所以您必须删除目标表,这又需要修复你的复制。
在另外两个中,INSERT 绝对是最简单的,我也经常使用这种方法。如果需要速度,请尝试 BCP。批量插入通常比标准的 INSERT 操作快很多。根据 BOL ( http://msdn.microsoft.com/en-us/library/ms151206.aspx ),您必须使用开关来强制触发触发器,但听起来它应该可以正常工作。