2009-10-07 29 views
1

我想向您介紹我與SQL Server 2005的雙向複製問題。 我需要什麼? 我的teamleader想要解決我們在兩個數據庫之間使用雙向複製的問題,每個數據庫都由不同的應用程序使用。一個應用程序在表A中創建記錄,更改應該複製到第二個數據庫到表A的副本中。當第二個服務器上的數據發生更改時,那些更改必須傳播回第一個服務器。 我想要一臺服務器,這是運行SQL Server 2005我已經設法此設置使用腳本上實現兩個數據庫之間的雙向事務複製,建立2種出版物和2個只讀環回檢測訂閱。分發數據庫已創建,兩個數據庫上的發佈都已啓用。分銷商和發行商都已啓動。我們正在使用一些規則來控制哪些記錄將被複制,因此我們需要在複製期間調用我們的自定義存儲過程。因此,文章被設置爲使用更新,插入和刪除自定義存儲過程。雙向複製更新記錄

到目前爲止好,但?

一切工作正常,更改複製,直到更新這兩個表同時進行或更改被複制之前(這大約需要3-6秒)。這兩個記錄然後以不同的值結束。

UPDATE db1.dbo.TestTable SET Col = 4 WHERE ID = 1 
UPDATE db2.dbo.TestTable SET Col = 5 WHERE ID = 1 

結果:

db1.dbo.TestTable COL = 5

db2.dbo.TestTable COL = 4

但我們希望能有最後的改變獲勝複製。請問有沒有辦法解決我的問題?我如何確保兩個記錄中的值相同?還是有比這種複製更容易的解決方案?

我可以提供我使用的樣本複製腳本。
我期待着你的想法,
米雷克

回答

0

我認爲,這兩個表添加dateUpdated領域能有所幫助。通過這種方式,只有在dateUpdated大於已存儲的記錄時,纔會更新記錄。

這dateUpdated領域顯然將存儲在當原始記錄進行了更新,而不是在執行復制

+0

日期時間但是,這將意味着,我必須做的更新包含此日期時間值列中的所有更新,是我對嗎? – Mirek 2009-10-08 10:24:10

+0

@Mirek:如果你遵循kristof的建議,你將需要一個'INSTEAD OF'觸發器和'NOT FOR REPLICATION'子句。 – filiprem 2009-12-21 21:37:33