3

我有两台SQL服务器,我需要完全相同。自动同步应该每天发生几次。 这两个服务器之间没有“直接”连接,所以没有连接数据库等(它们在完全不同的机器,网络,域之间以及防火墙之间等)您可以使用Internet,但Web服务,FTP等。同步两个Diff SQL Server之间的数据

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

而且(现在,可能会改变)数据只应该从CopyFromDB同步到CopyToDB。如果它不会因为有人在CopyFromDB上的表上添加额外的列而“不中断”,而且该新的col不应该自动同步到CopyToDB。 (只有应该同步的列位于CopyToDB,可能有其他列不应该同步)

它应该做插入,更新或插入。在最坏的情况下,我想它可以删除和插入,但我不喜欢这样。 (当然有FK等等,所以数据必须以正确的顺序插入)

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

我的问题是;什么是最好的方式来实现这一目标?下面我有几个想法。

  • WS在CopyToDB端,从CopyFromDB端通过服务或其他东西调用?推送数据,只有自上次同步以来的更改。
  • CopyToDB端的FTP,它接受带有更改的“sql”文件。像插入/更新/删除。这由CopyFromDB推到那里。
  • 还有别的吗?内置的工具已经做到了这一点?还是3d零件工具?像红门SQL数据比较,只能自动。

谢谢你的想法和/或答案!


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

+0

嗯,我还没有找到任何“捷径”,所以我选择了第一种方式,使用WS。 (sql-file-way失败,也许可以解决它,但它花费了太多时间) 在CopyFromDB上,每个表都有一个DateTime-“update”列。我用它来检查新数据。然后将新数据放入DTO,序列化,压缩,并发送到CopyToDB端的WS。 CopyToDB获取数据,如果数据已经存在,则进行更新或者执行插入操作。那么,它有更多的逻辑,但基本上这是如何解决它。 – Rolle 2010-10-15 18:56:04

回答

0
+0

谢谢!我从来没有使用快照,我会研究这个。但是这需要所有的数据?不仅是自上次以来的变化,我猜? – Rolle 2010-10-03 18:43:50

+0

我看着快照,我认为它不适合我。它拍摄了整个数据库的快照(我想我可以忽略它),还需要源数据库或需要镜像。对于我的问题,我认为快照是太多的工作来让它工作。 (在我的情况下,还有其他缺点,http://msdn.microsoft.com/en-us/library/ms189940%28v=SQL.90%29.aspx) – Rolle 2010-10-04 07:54:26

1

编写Web服务为它和使用的工具像TableDiff数据& OpenDBDiff的架构。没有其他更简单的方法。

+0

感谢有关工具的信息。我没有听说过他们,很有趣。我检查了TableDiff,但它似乎只允许比较两个可直接“达到”的数据库,至少从其中一个数据库可以达到?或者我错过了什么?快速谷歌搜索没有建议任何其他事情。这怎么能用WS来完成? – Rolle 2010-10-15 18:47:28

+0

哎呀!我忘记你不能使用链接服务器。唯一的办法就是编写自己的代码来使用两个不同的ADO.NET对象来逐个比较表,并且您需要逐行进行比较(可能与CURSOR?)但是,我猜想它会太慢,表现不会那么好。 – gery128 2010-10-22 09:37:40

1

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

用户将是只读的,但这正是你想要的 - 否则,如果有人可以更新用户的记录,你将会处于一个受到伤害的世界。

0

如果您有权访问Visual Studio数据库项目,则可以设置可生成T-SQL差异的构建任务(如果您使用的是构建系统)。然后,这是一个运送差异和应用它们的问题,但这是一个更容易的任务(WCF,电子邮件,无论什么)。

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

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

埃里克

2

下旬的一个,但希望其他读者会发现它有用......如果

不知道你已经知道,但你可以轻松地自动通过命令行界面SQL数据比较。它确实需要额外的许可证并附带价格,但绝对有可能。

对于需要日常数据同步的类似项目,我已成功使用ApexSQL Data Diff

这两个工具都是一流的。基本上不会出错......红门似乎具有更好的可用性,但Apex拥有更多选项并且执行速度稍快。

免责声明:我与本文中提到的两个供应商中的任何一个都没有关联,但我确实有机会在我工作的公司中使用这两个供应商。

相关问题