我有一个网络应用程序,可以为我的客户提供一些信息。我有另一个版本(Windows),与web应用程序完全相同
。
这是因为Web连接可能会失去几个小时,在此期间用户将使用该应用程序。
我想知道如何同步这些SQL Server数据库。
请注意,Web应用程序从3个不同城市
使用,并且所有这些城市都安装了基于Windows的应用程序
。我该怎么办?
请注意:Windows版本与在3个不同城市的本地Web服务器上安装的Web应用程序
完全相同,用户通过其局域网(LAN)
访问它们。
我有一个网络应用程序,可以为我的客户提供一些信息。我有另一个版本(Windows),与web应用程序完全相同
。
这是因为Web连接可能会失去几个小时,在此期间用户将使用该应用程序。
我想知道如何同步这些SQL Server数据库。
请注意,Web应用程序从3个不同城市
使用,并且所有这些城市都安装了基于Windows的应用程序
。我该怎么办?
请注意:Windows版本与在3个不同城市的本地Web服务器上安装的Web应用程序
完全相同,用户通过其局域网(LAN)
访问它们。
所有关于数据的更新都将从 Windows 应用程序发起,包括从/向 Web/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()。
你的选择可能是使用数据库备份进行同步(可能非常缓慢和不切实际)。之后,你必须使用ETL。选择你喜欢的工具。你可以使用SQL Server CDC或我建议使用Change Tracking来识别你的更改并仅加载这些更改。然后使用合并来同步你的更改。当然,这些解决方案将要求你设置链接服务器或使用第三方临时保存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/,虽然它不是免费的,但确实可以完全满足您的需求。