2011-06-01 65 views
4

我有一个网络应用程序,它为我的客户提供一些信息。我有另一个版本(windows)那exactly work same as web application如何同步在线和离线数据库

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

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

请注意,Web应用程序正在使用3 different citiesall of them have a windows based application too。我该怎么办?

NoteL windows verision完全是web应用程序,它安装在3个不同城市的本地Web服务器上,用户可以通过它们的LAN访问它们。

+0

同步是双向还是单向? – 2011-06-01 11:19:04

+0

@Aseem,双向 – 2011-06-01 11:20:17

回答

1

您的选择可能是使用数据库备份来同步(可能非常缓慢且不切实际)。之后,您必须使用ETL。选择你最喜欢的工具。您可以使用SQL Server CDC,也可以使用更改跟踪来识别您的更改并加载这些更改。然后使用合并来同步您的更改。授予这些解决方案将要求您设置链接的服务器或使用第三方暂时保存dml更改。

http://technet.microsoft.com/en-us/library/bb510625.aspx

http://msdn.microsoft.com/en-us/library/cc305322.aspx

我以为我想补充一个http://www.red-gate.com/products/sql-development/sql-data-compare/它不是免费的,但不正是你所需要的非Microsoft解决方案。

+0

先将3个数据库同步到一起,然后与服务器同步,是不是更好?或者我应该将它们全部与服务器同步,然后使用同步版本的服务器并将其发送给客户端的备份? – 2011-06-01 11:27:40

+1

@Aseem这些都是插入的,还是你有更新,你也必须担心?如果情况如此,您很可能会遇到更新的争用,即多个客户端更新相同的记录。那么你必须确定正确的一个。如果只是插入顺序无关紧要。 – JStead 2011-06-01 11:29:25

2

所有更新数据来自/到网络/ Windows将源自Windows应用程序。但问题是,Windows应用程序将在没有互联网连接时运行。

所以你将不得不使用一个Windows服务,它将调用Web服务来进行本地和远程数据库更新。窗口可以每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()。

+1

此解决方案将以不可预知的方式丢失一些更改 - 如果两个用户在两个(或一个)都处于脱机状态时都更新相同的字段,那么当发生同步时,其中一个更改将被覆盖。使用Microsoft Sync Framework等同步库,而不是编写自己的。 – 2011-06-21 16:17:33

相关问题