2010-05-10 138 views
0

我需要更新現有數據或從客戶數據庫中插入新的數據說DB1到中央數據庫DB2說都持相同的模式和兩個數據庫駐留在同一臺機器上。更新不是共同的。我只想將更改從客戶端(DB1)反映到服務器(DB2)。同步客戶端數據庫與中央數據庫

客戶端數據庫(DB1)不過是備份數據庫,連接到中央數據庫(DB2)存在相同的服務器(數據庫完全由MDF和LDF文件的備份)。一旦連接到服務器,我不會對備份數據庫(DB1)進行任何更改。備份數據庫(DB1)已經具有修改後的數據,我想將其更新到中央數據庫(DB2)。那麼如何以編程方式使用C#.NET?可以給出任何示例代碼嗎?

我已經嘗試使用推送訂閱的事務複製而不發送快照。問題是我想在第一槍本身將更改後的數據從DB1更新到中央數據庫DB2,但事務複製不允許我這樣做。它不會發送任何已經存在於DB1中的修改過的數據。因此,當您嘗試在沒有快照的情況下發送時,DB1中的初始數據不會被觸及。備份數據庫(DB1)在複製之前已經擁有修改後的數據。我如何解決這個問題,因爲在設置複製之後,我不打算將任何新數據或修改數據插入到備份數據庫(DB1)中。

感謝和問候, 帕

+0

嗨帕文,你能重新格式化你的文章?它似乎有空格填充到每行,這使得它被格式化爲源代碼。 – chiccodoro 2010-05-10 17:13:23

回答

0

要做到這一點,你有以下幾種選擇:

1)使用SQL Server事務複製。將DB1作爲發佈服務器,將DB2作爲訂閱服務器,然後轉到基於Pull或Push的訂閱。 DB1中的所有更改將僅反映到中央。如果我們在Central中爲同一個元組進行更改,它們將被DB1更改覆蓋。

優點:易於實施和可靠 缺點:很少定製

2)使用微軟同步框架SQLDataBaseProvider。 優點:非常靈活 缺點:我聽說過壞事但從未嘗試。

3.)自定義實現:這是有點難,因爲你需要跟蹤DB1的變化。一個選項可以是讀取Transactional Replication內部執行的事務日誌,或者其他選項是使用觸發器並建立變更知識。然後,你需要寫一個圖書館或例行公事,讓你改變知識,然後它將適用於中央。

編輯: 對於備份和恢復數據庫progmatically:

http://www.mssqltips.com/tip.asp?tip=1849

+0

對不起,我錯了。客戶端數據庫(DB1)僅僅是連接到中央數據庫(DB2)所在服務器的備份數據庫(由mdf和ldf文件組成的完整數據庫備份)。一旦連接到服務器,我不會對備份數據庫(DB1)進行任何更改。備份數據庫(DB1)已經具有修改後的數據,我想將其更新到中央數據庫(DB2)。那麼我如何以編程方式使用C#.NET?我真的需要一些幫助。如果可能的話,你可以給我一些示例代碼。 感謝和問候 Pavan – 2010-05-10 12:46:08

0

微軟同步框架是最好的解決方案,特別是如果你使用的是速成版(在這種情況下,複製將無法工作)。

如果與SQL Server 2008中的SQL Server更改跟蹤一起使用,則同步框架非常簡單。您還可以定義同步模式(雙向,僅上載,僅下載),並定義在那裏發生的情況是衝突(例如約束受到侵犯等)。

是的 - 只是谷歌的一個例子,有幾個直接的主題,包括點對點同步(可能是你需要的一個)和客戶端服務器同步(客戶端應該是sql server精簡版)。

+0

對不起,其實我錯了。我已經再次描述了我的情景,對於Nithin Medha給出的答覆。你能爲我找到解決方案嗎?謝謝回覆。 – 2010-05-10 13:22:03

+0

我忘記提及我使用SQL Server 2005標準版 – 2010-05-10 13:32:04

+0

進行評論:「特別是如果您使用快速版(​​在這種情況下,複製將無法使用)。」您可以使用RMO(複製管理對象)以編程方式在Express版本中執行同步。 – 2010-05-10 17:09:52

0

您可能還想了解SQL Server的merge replication功能。這是一種複製類型,旨在允許衛星數據庫自動將其結果回送到中央存儲庫。