MS SQL資料庫中合併複製詳解
合併複製的概述
也許讀者對下面的實際例子並不陌生,在某一大型企業的分銷系統中,銷售經理或一些銷售骨幹人員經常要外出處理業務,將簽訂的合同通過手邊的膝上型電腦傳遞到總部銷售資訊資料庫。在這一例子中有兩個主要的特;徵任何銷售經理和銷售骨幹都可以修改銷售資訊資料庫;只有在進行資料傳遞時才將源資料庫與目標資料庫相連。在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-622380/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MS SQL Server 刪除重複行資料SQLServer
- 利用SQL Server Management Studio(SSMS)複製資料庫SQLServerSSM資料庫
- 資料庫複製(一)–複製介紹資料庫
- DM7資料複製之資料庫級複製資料庫
- 【資料庫資料恢復】MS SQL資料庫附加資料庫出錯怎麼恢復資料?資料庫資料恢復SQL
- 7.22-27MY&MS&ORA等SQL資料庫提權SQL資料庫
- MS SQL Server資料庫事務鎖機制分析(轉)SQLServer資料庫
- Python連線三大資料庫MS Sql Server、Oracle、MySQLPython大資料資料庫ServerOracleMySql
- 資料庫主從複製資料庫
- SQL Server資料庫中Substring函式的用法例項詳解SQLServer資料庫函式
- 使用SQL語句將資料庫中的兩個表合併成一張表SQL資料庫
- SQL Server 2016資料庫快照代理過程詳解SQLServer資料庫
- 資料庫容災、複製解決方案全分析(轉)資料庫
- MongoDB複合索引詳解MongoDB索引
- 複製表結構和資料SQL語句SQL
- dimitri/pgcopydb:Postgres資料庫複製工具MITGC資料庫
- Mysql(Mariadb)資料庫主從複製MySql資料庫
- 使用RMAN複製資料庫 active database資料庫Database
- mysql資料庫多表同結構合併資料MySql資料庫
- SQL Server實戰二:建立、修改、複製、刪除資料庫表並加以資料處理SQLServer資料庫
- 達夢資料庫如何將Excel表的資料複製到表中資料庫Excel
- 非關係型資料庫(NOSQL)和關係型資料庫(SQL)區別詳解資料庫SQL
- mysql資料庫的主從複製和主主複製實踐MySql資料庫
- SQL與NoSQL資料庫入門基礎知識詳解SQL資料庫
- Redis複製過程詳解Redis
- 詳談Javascript中的深複製和淺複製JavaScript
- 一個併發SQL資料庫卡主了SQL資料庫
- T-SQL——關於表資料的複製插入SQL
- 架構設計(二):資料庫複製架構資料庫
- mysql資料庫實現主從複製MySql資料庫
- 分散式資料庫的複製原理 - Quastor分散式資料庫AST
- 資料庫基礎知識詳解五:MySQL中的索引和其兩種引擎、主從複製以及關係型/非關係型資料庫資料庫MySql索引
- 詳解JavaScript中的嵌入式資料庫JavaScript資料庫
- 資料庫索引:綜合詳細指南資料庫索引
- 解決pl/sql developer中資料庫插入資料亂碼問題SQLDeveloper資料庫
- 詳解SQL Server 2012資料庫備份與還原的教程SQLServer資料庫
- MySQL 傳統複製與 GTID 複製原理及操作詳解MySql
- 資料共享(淺複製)與資料獨立(深複製)
- SQL資料庫中Truncate的用法SQL資料庫