Sql 如何在线同步&;脱机数据库

Sql 如何在线同步&;脱机数据库,sql,sql-server,database,database-design,synchronization,Sql,Sql Server,Database,Database Design,Synchronization,我有一个web应用程序,它为我的客户提供一些信息。我有另一个版本(windows),它的工作原理与web应用程序的工作原理完全相同 这是因为Web连接可能会丢失几个小时,在这段时间内,用户将使用该应用程序 我想知道如何同步这些SQL Server数据库。 请注意,web应用程序正在使用来自3个不同城市的。我该怎么办 注:windows verision正是安装在3个不同城市的本地web服务器上的web应用程序,用户可以通过其局域网访问它们您的选择可能是使用数据库备份进行同步(可能非常慢且不切实际

我有一个web应用程序,它为我的客户提供一些信息。我有另一个版本(windows),它的工作原理与web应用程序的工作原理完全相同

这是因为Web连接可能会丢失几个小时,在这段时间内,用户将使用该应用程序

我想知道如何同步这些
SQL Server
数据库。

请注意,web应用程序正在使用来自3个不同城市的
。我该怎么办


注:windows verision正是安装在3个不同城市的本地web服务器上的web应用程序,用户可以通过其
局域网访问它们
您的选择可能是使用数据库备份进行同步(可能非常慢且不切实际)。之后,您必须使用ETL。选择你最喜欢的工具。您可以使用sql server CDC或我建议的更改跟踪来识别您的更改并加载这些更改。然后使用“合并”同步更改。当然,这些解决方案将要求您设置链接服务器或使用第三方临时保存dml更改


我想我会添加一个非microsoft的解决方案,它不是免费的,但完全满足您的需要。

从/到web/windows的数据中的所有更新都来自windows应用程序。但问题是windows应用程序将在没有互联网连接的情况下运行

因此,您必须使用windows服务,该服务将调用Web服务进行本地和远程数据库更新。windows可以每x分钟唤醒一次,并更新远程和本地数据库

Web服务将有两种方法:

GetData(DateTime getRecordsFromThisDate) - Windows service should call this on regular intervals and update the local database.

UploadData(dataRows/collection) -  Windows service should call this on regular intervals and update the remote database.
数据库中的每条记录都有一个时间戳。对于本地更新,获取最大的时间戳并将其作为参数发送到GetData()。Web服务将返回在此时间之后创建的记录


对于上载数据,您必须存储上次成功运行上载操作时的时间。在此之后获取记录(插入并更新),并将其发送到UploadData()。

同步是双向的还是单向的?先将3个数据库同步在一起,然后再与服务器同步不是更好吗?或者我应该将它们全部与服务器同步,然后使用服务器的同步版本,并将其备份发送给客户端?@Aseem这些都是插入,还是您也需要担心更新?如果是这样的话,您很可能会遇到与update的争用,其中多个客户端更新了相同的记录。然后你必须确定正确的一个。如果只是插入顺序不重要。此解决方案将以不可预测的方式丢失某些更改-如果两个用户都在脱机时更新同一字段,则在同步发生时,他们的一个更改将被覆盖。使用诸如Microsoft Sync Framework之类的同步库,而不是编写自己的同步库。