16.3.1 快照復制概述
快照復制就是在某一時刻對出版數據進行一次“照相”,生成一個描述出版數據庫中數據瞬時狀態的靜態文件,最後在規定時間將其復制到訂購者數據庫。快照復制並不像事務復制那樣要不斷地監視、跟蹤在出版數據庫中發生的數據變化,它所復制的內容不是 INSERT、 UPDATE、 DELETE 語句(事務復制的特征),也不是僅限於那些被修改數據(合並復制的特征)。它實際上是對訂購數據庫進行一次階段性的表刷新,把所有出版數據庫中的數據從源數據庫送至目標數據庫,而不僅僅是那些發生了變化的數據。如果論文很大,那麼要復制的數據就很多,因此對網絡資源需求較高,不僅要有較快的傳輸速度,而且要保證傳輸的可靠性。
快照復制是最為簡單的一種復制類型,能夠在出版者和訂購者之間保證事務的潛在一致性。快照復制通常使用在以下場合:不需要實時數據時,如在進行決策支持、查詢靜態表信息時;只讀訂購者(訂購者不對出版數據進行修改),並且不需要最近的數據;使用立即更新訂購者時對數據庫的修改次數和數據量較少。
快照復制的執行僅需要快照代理和分發代理。快照代理准備快照文件(包括出版表的數據文件和描述文件)並將其存儲在分發者的快照文件夾中,除此之外快照代理還要在分發者的分發數據庫中跟蹤同步作業。分發代理將在分發數據庫中的快照作業分發至訂購者服務器的目的表中。分發數據庫僅用於復制而不包括任何用戶表。
每一次快照代理執行時,都要創建將被分發至訂購者的數據文件和描述文件(也稱為同步集合)。快照代理主要通過以下幾步來完成這一工作(見圖16-24)。
(1)從分發者到出版者的連接並在出版物論文中的所有表上加了共享鎖。共享鎖是為了確保快照數據的一致性,因為共享鎖將防止所有的其它用戶對表進行修改。快照代理應該被安排在數據庫活動較少期間執行。
(2) 快照代理又建立從出版者到分發者的連接,並將每一個表的表描述拷貝至分發者上的一個.sch 文件中,該文件存儲在分發數據庫工作目錄下的一個子目錄。如果出版物中包括索引和聲明的參考完整性,則快照代理將所有被選擇的索引寫入分發者的.idx 文件中。
(3) 快照代理對出版者的出版表的數據執行一次快照,並把這些數據寫入分發者上的一文件當中。該文件存儲在分發數據庫的工作目錄下的一個子目錄中,如果訂購者有SQL Server, 則快照被做為.bcp 文件存儲;如果一個或多個訂購者是異構數據庫源,則快照被做為字符模式的.txt 文本文件存儲同步集合包括.sch 和.bcp 文件,出版物中每一篇論文都有一個同步集合。
(4) 快照代理向分發數據庫的Msrepl_commands 和Msrepl_trnsactions 表中插入新行。Msrepl_command 表中的每個記錄是指明同步集合和出版者等位置的命令,Msrepl_trnsactions 表中的每條記錄是引用訂購者同步任務的命令。
(5) 快照代理最後釋放在每一個論文上的共享鎖。
每一次為快照代理運行的分發代理將數據和描述文件分發給訂購者。分發代理通過以下幾步來完成該任務:
(1) 分發代理從其所在的服務器向分發者服務器建立連接,對於推訂購,分發代理位於分發者服務器上;對於拉訂購,分發代理位於訂購者上。
(2) 分發代理檢查分發者的分發數據庫中的Msrepl_commands 和Msrepl_trnsactions 表從第一個表,讀取同步集合的位置並從這兩個表讀取訂購者的同步任務。