16.4.1 事務復制的特點
前面我們指出復制的本質就是從源數據庫向目標數據庫復制數據,但對不同的復制類型而言總是有差別的。從復制的具體內容來看快照復制是真正意義上的數據復制,不管采用何種數據接收方式(如將表刪除後再重建或刪除表中數據但保留表結構),在網絡中傳送的是數據。而事務復制在網絡中傳送的是事務(由一條或多條INSERT、 DELETE、 UPDATE);從傳輸的數據量來看,事務復制僅將發生的變化傳送給訂購者,是一種增量復制,但快照復制卻將整個出版物復制給訂購者。
由於事務復制要不斷地監視源數據庫的數據變化,所以與快照復制相比,其服務器負載相應要重。
在事務復制中當出版數據庫發生變化時,這種變化就會被立即傳遞給訂購者,並在較短時間內完成(幾秒或更短),而不是像快照復制那樣要經過很長一段時間間隔。因此,事務復制是一種幾近實時地從源數據庫向目標數據庫分發數據的方法。由於事務復制的頻率較高,所以必須保證在訂購者與出版者之間要在可靠的網絡連接。
事務復制只允許出版者對復制數據進行修改(若設置了立即更新訂購者選項,則允許訂購者修改復制數據),而不像合並復制那樣,所有的節點(出版者和訂購者)都被允許修改復制數據,因此事務復制保證了事務的一致性。它所實現的事務一致性介於立即事務一致性和潛在事務一致性之間。
由於事務復制在極小的時延內把數據分發到訂購者,因此要求出版者與訂購者總是保持連接。但在快照復制中,由於相鄰兩次復制數據的傳遞間隔時間較長,則允許訂購者與出版者不必保持永久連接。
事務復制另外一個獨有特點是支持並行的快照處理,這也是SQL Server 2000 事務復制的新特征。正如在快照復制一節中所敘述的那樣,通常而言,在創建初始快照文件的整個處理過程中,都要在出版表上放置一個共享鎖來阻止對出版的更。新但事務復制所支持的並行快照處理卻允許在創建快照文件的整個過程中不必將共享鎖保持到快照文件創建結束之時。其具體過程是:在復制開始時,快照代理在出版表上放置共享鎖。當表示快照開始的事件被寫入事務日志時,該共享鎖即被釋放。這樣在隨後的時間,即使快照文件仍處於生成過程中,仍可以對出版表進行修改。由此可見,共享鎖在出版表時持續的時間很短。釋放共享鎖的時刻正是快照代理開始創建快照文件的時刻。在結束快照文件創建時。表明創建結束的事件被記錄到事務日志中。在從開始到結束的整個快照生成過程中所發生的影響出版表的事務將被日志閱讀代理發送到分發數據庫。
並行快照處理雖然允許在創建快照文件的過程中對出版表進行修改,但也因此而增加了快照處理的負載,降低了復制處理的性能,所以應在系統活動較少時,進行快照初始化處理。
16.4.2 事務復制的執行步驟
事務復制的執行主要需要三個代理:快照代理、日志閱讀代理、分發代理。
1 快照代理快照代理從出版者獲取新的變化之前,必須使訂購數據庫的表與出版數據庫表具有相同的表結構和數據。因此快照代理首先要實現同步集合的初始化。SQL Server 只有在確認訂購者包含表描述與數據的快照文件後,才能進行事務復制。
2 日志閱讀代理從出版者事務日志中搜索出帶有復制標志的事務,並將這些事務插入分發數據庫。
3 分發代理分發代理將日志閱讀代理插入到分發數據庫中的事務分發到訂購者。
在事務復制中快照代理和分發代理的具體步驟與快照復制基本相同。事務復制中各代理按照以下的執行順序來協調工作完成事務復制(見圖16-53)。