


SQL Server數(shù)據(jù)庫中合并復制詳解
也許讀者對下面的實際例子并不陌生,在某一大型企業(yè)的分銷系統(tǒng)中,銷售經(jīng)理或一些銷售骨干人員經(jīng)常要外出處理業(yè)務,將簽訂的合同通過手邊的筆記 本電腦傳遞到總部銷售信息數(shù)據(jù)庫。在這一例子中有兩個主要的特;征任何銷售經(jīng)理和銷售骨干都可以修改銷售信息數(shù)據(jù)庫;只有在進行數(shù)據(jù)傳遞時才將源數(shù)據(jù)庫與 目標數(shù)據(jù)庫相連。在SQL Server 中,合并復制為這一情況提供了較好的解決方案。
合并復制作為一種從出版者向訂購者分發(fā)數(shù)據(jù)方
法允許出版者和訂購者對出版數(shù)據(jù)進行修改,而不管訂購者與出版者是相互連接或斷開,然后當所有(或部分)節(jié)點相連時便合并發(fā)生在各個節(jié)點的變化。在合并復
制中,每個節(jié)點都獨立完成屬于自己的任務,不像事務復制和快照復制那樣訂購者與出版者之間要相互連接,完全不必連接到其它節(jié)點,也不必使用MS DTC
來實現(xiàn)兩階段提交就可以在多個節(jié)點對出版進行修改,只是在某一時刻才將該節(jié)點與其它節(jié)點相連(此時所指的其它節(jié)點并不一定指所有其它節(jié)點),然后將所發(fā)生
的數(shù)據(jù)變化復制到這些相連節(jié)點的數(shù)據(jù)庫中。
如果在復制時因更新同一數(shù)據(jù)而發(fā)生沖突,則數(shù)據(jù)的最終結(jié)果并不總是出版者修改后的結(jié)果,也
不一定包含在某一節(jié)點上所做的所有修改。因為各節(jié)點都有自主權(quán),都可以對出版物(復制數(shù)據(jù))進行修改,這樣在按照所設定的沖突解決規(guī)則對沖突處理之后,數(shù)
據(jù)庫最終的結(jié)果往往是包含了多個節(jié)點的修改。
可以看出盡管最后所有的數(shù)據(jù)庫都有相同的結(jié)果集,但這個結(jié)果是在多個節(jié)點共同參與下形成的,是多個修改合并到目標數(shù)據(jù)庫的結(jié)果。因此合并復制并不維護事務的一致。
與創(chuàng)建快照復制和事務復制出版物相比,當創(chuàng)建一個合并出版物時,SQL Server 會對數(shù)據(jù)庫以及出版表進行以下處理(見圖16-54):
(1) SQL Server 把出版表中的每一行都加上一個標識列,這樣在表的多個拷貝間能惟一標識出該行。如果基本表上已存在具有ROWGUIDCOL 屬性的標識列,則 SQL Server 將自動把其作為復制表的行標識,如果沒有,則或在創(chuàng)建出版物過程中這些表被激活時,或在SQL Server Agent 第一次為該出版物提供服務時, SQL Server 將向表中添加一個具有ROWGUIDCOL 屬性的rowguid。
(2) SQL Server 添加一個觸發(fā)器來跟蹤每一行或列數(shù)據(jù)的變化,并把捕捉到的變化存儲到幾個系統(tǒng)表中,或在創(chuàng)建出版物過程中復制表被激活時,或在SQL Server Agent 第一次為出版物提供服務時,將創(chuàng)建這些跟蹤觸發(fā)器。
(3) SQL Server 把用戶跟蹤的系統(tǒng)表添加到數(shù)據(jù)庫,來執(zhí)行沖突的檢測,解決和記錄。MSmerger_contents MSmerger_tombstone 系統(tǒng)表用來跟蹤對出版物中數(shù)據(jù)的UPDATE、 DELETE、 INSERTS 操作。
合并復制的執(zhí)行步驟
合并復制的執(zhí)行需要快照代理和合并代理。其主要步驟是:
(1) 與快照復制、事務復制中快照代理的作用一樣,合并復制的快照代理在開始復制之前也要完成二項任務;創(chuàng)建快照文件(同步集合)將存儲在分發(fā)者的復制目錄下; 在出版數(shù)據(jù)庫記錄同步作業(yè)。合并代理將初始快照文件分發(fā)給訂購者,從而完成訂購初始化(出版數(shù)據(jù)庫與訂購數(shù)據(jù)庫同步)。
(2) 當在某一節(jié)點(訂購者)對出版物中表的某一行進行修改時,觸發(fā)器會觸發(fā),并將該行的生成列g(shù)eneration column 設置為零。當合并代理執(zhí)行時,它把所有生成列為零的合成一組或多組,凡是新的生成列值比原來的大,則用新值替換舊值。
(3) 在進行同步處理時,合并代理把所有生成列值為零的列(被修改的列)復制到所有其它訂購者。
(4) 在目標數(shù)據(jù)庫,從節(jié)點送來的數(shù)據(jù)與已存在數(shù)據(jù)進行合并,合并代理來進行沖突檢測,如果未發(fā)生沖突則接收復制數(shù)據(jù);如果發(fā)生沖突,合并代理根據(jù)缺省或所設定的沖突解決規(guī)則來解決沖突。
關(guān)鍵字:SQL Server、數(shù)據(jù)庫、合并復制
新文章:
- CentOS7下圖形配置網(wǎng)絡的方法
- CentOS 7如何添加刪除用戶
- 如何解決centos7雙系統(tǒng)后丟失windows啟動項
- CentOS單網(wǎng)卡如何批量添加不同IP段
- CentOS下iconv命令的介紹
- Centos7 SSH密鑰登陸及密碼密鑰雙重驗證詳解
- CentOS 7.1添加刪除用戶的方法
- CentOS查找/掃描局域網(wǎng)打印機IP講解
- CentOS7使用hostapd實現(xiàn)無AP模式的詳解
- su命令不能切換root的解決方法
- 解決VMware下CentOS7網(wǎng)絡重啟出錯
- 解決Centos7雙系統(tǒng)后丟失windows啟動項
- CentOS下如何避免文件覆蓋
- CentOS7和CentOS6系統(tǒng)有什么不同呢
- Centos 6.6默認iptable規(guī)則詳解