在两个不同的SQL Server之间同步数据

时间:2010-10-02 12:26:51

标签: sql-server sql-server-2005 replication database-replication

我有两个SQL服务器,我需要具有相同的功能。同步应该每天自动发生几次。 这两个服务器之间没有“直接”连接,所以没有链接的数据库等(它们在完全差异的机器,网络,域,防火墙之间等)你可以使用互联网,如Web服务,FTP ......

CopyFromDB拥有大量表,但是只有大约20个表(仅限数据,现在没有模式更改)应与CopyToDB同步。每天只有大约一半的表会有新的/更新的行。其他人每年几次。我猜它现在每天只有几千行。然而,这可能在未来增长到每天大约100,000行。所以也许没有太多数据我猜。

而且(现在,可能会改变)数据应该只从一个方向同步,从CopyFromDB到CopyToDB。如果它不会因为有人在CopyFromDB上的表上添加额外的列而“破坏”也会很好,但是新的col不应该同步到 CopyToDB自动。 (只有应该同步的cols驻留在CopyToDB上,可能还有其他列不应该同步)

它应该执行插入,更新或插入。在最坏的情况下,我猜它可以完全删除和插入,但我不喜欢这个。 (当然有FK等,因此必须以正确的顺序插入数据)

现在只有一个“CopyToDB”,但这可能会增加。 解决方案也应该非常简单并且不会太复杂。 : - )

我的问题是;什么是实现这一目标的最佳方法?我有以下几点想法。

  • 在CopyToDB方面的WS,通过服务或其他东西从CopyFromDB端调用?推送数据,只显示自上次同步以来的更改。
  • CopyToDB端的FTP,带有带有更改的“sql”文件。像插入/更新/删除一样。这是由CopyFromDB推送的。
  • 别的什么?内置工具已经做到了这一点?还是3d零件工具?像Red Gate SQL Data Compare这样的东西,只能自动生成。

感谢您的想法和/或答案!


我在论坛上搜索了我的问题。但我只能找到两个服务器之间存在某种“直接”连接或者进行备份/恢复的问题。但如果问题已经得到解答,请原谅,请你告诉我在哪里? :)

5 个答案:

答案 0 :(得分:3)

迟到但希望其他读者会发现它很有用......

不确定您是否已经知道,但您可以通过命令行界面轻松自动化SQL Data Compare。它确实需要额外的许可证,并且有价格,但绝对可以。

我已成功将ApexSQL Data Diff用于需要每日数据同步的类似项目。

这两种工具都是一流的。任何基本上都不会出错... Red Gate似乎有更好的可用性,但Apex有更多的选择并且表现稍快。

免责声明:我不隶属于本文中提及的两家供应商中的任何一家,但我确实有机会在我工作的公司中使用这两家供应商。

答案 1 :(得分:1)

为它编写Web服务并使用像TableDiff这样的实用程序来获取数据和数据。用于架构的OpenDBDiff。没有其他更简单的方法。

答案 2 :(得分:1)

如果复制是单向的,请使用日志传送。主服务器可以将日志备份放在任何UNC路径上,然后您可以使用任何文件同步工具来管理从一台服务器到另一台服务器的日志。订阅者只需自动恢复它在本地文件夹中找到的任何事务日志备份。

订阅者将是只读的,但这正是您想要的 - 否则,如果有人可以更新订阅者的记录,您将会处于一个受伤的世界。

答案 3 :(得分:0)

您可以将FTP传递与SQL Server复制一起使用:How to: Deliver a Snapshot Through FTP (Replication Transact-SQL Programming)

答案 4 :(得分:0)

如果您可以访问Visual Studio DataBase Projects,则可以设置可以生成T-SQL差异的构建任务(如果您使用的是构建系统)。然后,这是运送差异并应用它们的问题,但这是一个更容易的任务(WCF,电子邮件,无论如何)。

唯一的技巧是确保开始/修改后的数据库和目标数据库在启动此过程时具有相同的模式。

但是,如果您可以使用复制技术,我会高度推荐。在推出自己的解决方案的同时,管理它将成为未来的噩梦。让它现在运作并不难。确保它在接下来的XX年里继续工作是。

埃里克