合并復制的概述 也許讀者對下面的實際例子并不陌生,在某一大型企業的分銷系統中,銷售經理或一些銷售骨干人員經常要外出處理業務,將簽訂的合同通過手邊的筆記本電腦傳遞到總部銷售信息數據庫。在這一例子中有兩個主要的特;征任何銷售經理和銷售骨干都可以修改銷售信息數據庫;只有在進行數據傳遞時才將源數據庫與目標數據庫相連。在sql server 中,合并復制為這一情況提供了較好的解決方案。
可以看出盡管最后所有的數據庫都有相同的結果集,但這個結果是在多個節點共同參與下形成的,是多個修改合并到目標數據庫的結果。因此合并復制并不維護事務的一致。 與創建快照復制和事務復制出版物相比,當創建一個合并出版物時,sql server 會對數據庫以及出版表進行以下處理(見圖16-54):
(1) sql server 把出版表中的每一行都加上一個標識列,這樣在表的多個拷貝間能惟一標識出該行。如果基本表上已存在具有rowguidcol 屬性的標識列,則 sql server 將自動把其作為復制表的行標識,如果沒有,則或在創建出版物過程中這些表被激活時,或在sql server agent 第一次為該出版物提供服務時, sql server 將向表中添加一個具有rowguidcol 屬性的rowguid。
(2) sql server 添加一個觸發器來跟蹤每一行或列數據的變化,并把捕捉到的變化存儲到幾個系統表中,或在創建出版物過程中復制表被激活時,或在sql server agent 第一次為出版物提供服務時,將創建這些跟蹤觸發器。 (3) sql server 把用戶跟蹤的系統表添加到數據庫,來執行沖突的檢測,解決和記錄。msmerger_contents msmerger_tombstone 系統表用來跟蹤對出版物中數據的update、 delete、 inserts 操作。