2010-08-06 64 views
20

我有两个具有相同结构的数据库,一个在本地机器上,另一个在公司服务器上。每确定一段时间,本地数据库中的数据应与服务器数据库同步。如何同步SQL Server 2008中不同服务器中的数据库?

我对如何做到这一点有一个大致的想法 - 创建一个脚本,以某种方式“合并”不在服务器数据库上的信息,然后使该脚本作为服务器的计划作业运行。但是,我的问题在于我对此不太了解。

SQL Server Management Studio是否提供了一种简单的方法来执行此操作(某种类型的向导)并生成这种脚本?这是我必须从头开始构建的东西吗?

我已经做了一些基本的谷歌搜索,并遇到'复制'一词,但我不完全理解它。我宁愿听到一些实际做过此事的人的意见,或者对解释这种事情很好。

谢谢。

回答

12

复制听起来像是一个很好的选择,但会有一些开销(不是技术开销,但知识需要支持它)。

另一个SQL Server选项是SSIS。 SSIS提供图形工具来设计你想要做的事情。如果合适的话,SSIS包也可以运行SQL语句。一个SSIS包可以从一个SQL Server作业启动,因此可以安排。

在选择解决方案时,应该考虑同步规则的复杂性。例如,在合并数据时难以解决冲突,例如重复密钥。如果规则很简单,可以很容易地创建一个SQL脚本。但是,复杂的冲突规则可能更难以在脚本中实现(或复制)。

+1

我看到它非常简单,表格的结构根本不会改变,并且重复的键问题以及所有在插入之前已经处理的问题。基本上我需要的只是把数据放在另一个数据库上。 – 2010-08-06 16:31:20

+1

复制听起来像是一个很好的解决方案。但是,你必须决定是否适应它。祝你好运。 – bobs 2010-08-06 16:34:43

+1

我尝试过使用不同的本地数据库,它运行良好,作业足够简单,可以为此创建数据,并且数据已正确同步。虽然我用快照复制..不知道这可能是坏的?另外,我需要在服务器数据库上设置订阅,并让本地数据库充当发布者,对吗? – 2010-08-06 17:29:53

8

不幸的是,SQL Server Management Studio不提供这种方式。

您应该有一些优秀的商业产品在那里认真看:

他们都要花钱 - 但如果你是认真的,你在你的日常使用它们,他们在任何时间支付在所有 - 非常值得每一分钱。

SQL Server 2008中唯一的“免费”选项是创建两个服务器之间的链接,然后使用类似MERGE statement(SQL Server 2008中的新增功能)来传输数据。这不适用于结构性更改,并且仅限于在两台服务器之间建立连接。

+1

是的,我担心(现在至少)MERGE声明解决方案是我需要采取的路径。我会看看这个例子和其他一些例子,然后回到雅。 – 2010-08-06 16:24:47

4

你想要的是Peer-to-Peer Transactional Replication,它允许数据在两个数据库中还没有被更新保持同步通过变化的连续合并。这是您想要的最接近的匹配,但是是一个相当昂贵的选项(两个站点都需要Enterprise Edition)。另一种选择是Bidirectional Transactional Replication,但由于这也需要两个EE许可证,所以我说对等更容易部署同样的钱。

预算更便宜的选项是Updatable Subscriptions for Transactional Replication,但可更新的订阅已被弃用,您可以将赌注押在一匹松动的马上。其他选项是使用Merge Replication。最后,对于“本地”数据库非常灵活的情况,有Sync Framework

请注意,全部这些选项需要从公司的服务器数据库进行一些配置和合作。

+2

我想我们对OP的要求有不同的解释。我没有看到基于“来自本地数据库的数据应与服务器数据库同步”的双向需求。听起来有一条路(从本地到服务器)到我。 – 2010-08-06 16:50:58

0

有一些优秀的第三方工具。对我而言,xSQL Data Compare一直是个诀窍。而且由于比较的可修改性很高,它几乎适用于每个数据比较或数据同步场景。希望这可以帮助!

相关问题