MS SQL Server資料庫中合併複製詳解
合併複製的概述
也許讀者對下面的實際例子並不陌生,在某一大型企業的分銷系統中,銷售經理或一些銷售骨幹人員經常要外出處理業務,將簽訂的合同通過手邊的膝上型電腦傳遞到總部銷售資訊資料庫。在這一例子中有兩個主要的特;徵任何銷售經理和銷售骨幹都可以修改銷售資訊資料庫;只有在進行資料傳遞時才將源資料庫與目標資料庫相連。在SQL Server 中,合併複製為這一情況提供了較好的解決方案。
合併複製作為一種從出版者向訂購者分發資料方法允許出版者和訂購者對出版資料進行修改,而不管訂購者與出版者是相互連線或斷開,然後當所有(或部分)節點相連時便合併發生在各個節點的變化。在合併複製中,每個節點都獨立完成屬於自己的任務,不像事務複製和快照複製那樣訂購者與出版者之間要相互連線,完全不必連線到其它節點,也不必使用MS DTC 來實現兩階段提交就可以在多個節點對出版進行修改,只是在某一時刻才將該節點與其它節點相連(此時所指的其它節點並不一定指所有其它節點),然後將所發生的資料變化複製到這些相連節點的資料庫中。如果在複製時因更新同一資料而發生衝突,則資料的最終結果並不總是出版者修改後的結果,也不一定包含在某一節點上所做的所有修改。因為各節點都有自主權,都可以對出版物(複製資料)進行修改,這樣在按照所設定的衝突解決規則對衝突處理之後,資料庫最終的結果往往是包含了多個節點的修改。
可以看出儘管最後所有的資料庫都有相同的結果集,但這個結果是在多個節點共同參與下形成的,是多個修改合併到目標資料庫的結果。因此合併複製並不維護事務的一致。
與建立快照複製和事務複製出版物相比,當建立一個合併出版物時,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 操作。
16.5.2 合併複製的執行步驟
合併複製的執行需要快照代理和合並代理。其主要步驟是:
(1) 與快照複製、事務複製中快照代理的作用一樣,合併複製的快照代理在開始複製之前也要完成二項任務;建立快照檔案(同步集合)將儲存在分發者的複製目錄下;在出版資料庫記錄同步作業。合併代理將初始快照檔案分發給訂購者,從而完成訂購初始化(出版資料庫與訂購資料庫同步)。
(2) 當在某一節點(訂購者)對出版物中表的某一行進行修改時,觸發器會觸發,並將該行的生成列generation column 設定為零。當合並代理執行時,它把所有生成列為零的合成一組或多組,凡是新的生成列值比原來的大,則用新值替換舊值。
(3) 在進行同步處理時,合併代理把所有生成列值為零的列(被修改的列)複製到所有其它訂購者。
(4) 在目標資料庫,從節點送來的資料與已存在資料進行合併,合併代理來進行衝突檢測,如果未發生衝突則接收復制資料;如果發生衝突,合併代理根據預設或所設定的衝突解決規則來解決衝突。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-623981/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MS SQL資料庫中合併複製詳解SQL資料庫
- MS SQL Server 刪除重複行資料SQLServer
- MS SQL Server 資料庫備份方法SQLServer資料庫
- SQL Server 合併複製遇到identity range check報錯的解決SQLServerIDE
- 利用SQL Server Management Studio(SSMS)複製資料庫SQLServerSSM資料庫
- 複製或傳送SQL Server資料庫(ADP)SQLServer資料庫
- 複製的SQL Server 7資料庫的恢復方法 (轉)SQLServer資料庫
- SQL Server資料庫啟動過程詳解SQLServer資料庫
- MS SQL Server資料庫事務鎖機制分析(轉)SQLServer資料庫
- 在Linux下訪問MS SQL Server資料庫(轉)LinuxSQLServer資料庫
- SQL Server資料庫中Substring函式的用法例項詳解SQLServer資料庫函式
- Python連線三大資料庫MS Sql Server、Oracle、MySQLPython大資料資料庫ServerOracleMySql
- 使用SqlBulkCopy匯入資料至MS SQL ServerSQLServer
- 講解SQL Server的複製及缺陷SQLServer
- ASP.NET2.0連線SQL Server資料庫詳解ASP.NETSQLServer資料庫
- MS SQL Server 2000 系統資料庫及相關資訊SQLServer資料庫
- ms sql server排序SQLServer排序
- Sql Server之資料型別詳解SQLServer資料型別
- SQL Server 複製訂閱SQLServer
- SQL Server 複製故障排除SQLServer
- SQL Server 2008資料庫恢復模式詳解SQLServer資料庫模式
- 在SQL Server資料庫中匯入MySQL資料庫Server資料庫MySql
- 資料庫複製資料庫
- 複製資料庫資料庫
- Oracle\MS SQL Server的資料庫多表關聯更新UPDATE與多表更新OracleSQLServer資料庫
- sql server2008資料庫複製實現資料同步常見問題SQLServer資料庫
- SQL Server實戰二:建立、修改、複製、刪除資料庫表並加以資料處理SQLServer資料庫
- Sql Server資料庫資料匯入到SQLite資料庫中Server資料庫SQLite
- ORACLE SQL Developer4資料庫複製案例OracleSQLDeveloper資料庫
- SQL Server置疑資料庫解決方法SQLServer資料庫
- [zt SQL Server2005複製功能實現與Oracle資料庫同步SQLServerOracle資料庫
- Sql Server基礎:資料型別詳解SQLServer資料型別
- rman複製資料庫詳細的步驟資料庫
- 資料複製的併發控制
- 初識MS SQL Server中的CONVERTSQLServer
- SQL Server 2016資料庫快照代理過程詳解SQLServer資料庫
- 資料庫複製(一)–複製介紹資料庫
- SQL Server複製的表中如何修改欄位SQLServer