2011-06-01 60 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

相關問題