對一個地域分散的大型企業組織來說,構建具有典型的分布式計 算特征的大型企業管理信息系統時總要解決一個很棘手的問題;如何 在多個不同數據庫服務器之間保證共享數據的完整性、安全性和可用 性。之所以引發這樣的問題在于企業組織存在這樣的數據處理和要求: 在不同的地點對具有相同結構的本地數據庫進行修改;但要保證修改 后的數據庫有相同的結果。其實質就是將對本地數據庫的修改體現在 其它具有相同結構的遠程數據庫中。 那么我們如何實現這種數據的恢灤閱兀看鳶縛贍苡瀉芏嘀鄭? 是包括sql server 在內的大多數數據庫產品都采用一種復制技術來解 決這一問題。本章的主旨就是介紹sql server 的復制技術。下面讓我 們從復制的概述開始。
sql server 提供了內置的復制能力,復制組件并不是附加產品而是核心引擎的一部 分。在復制這一支持分布式數據處理能力的重要技術幫助下,我們可以在跨局域網、廣域 網或因特網的不同數據庫服務器上維護數據的多個拷貝,從而自動地以同步或異步的方式 保證數據多個拷貝之間的數據的一致性。從本質上講,復制就是從一個源數據庫向多處目 標數據庫復制數據。
16.1.1 sql server 的復制模型 sql server 使用“出版和訂購”這一術語來描述其復制活動。所謂出版就是向其它數 據庫服務器(訂購者)復制數據。訂購就是從另外服務器(出版者)接收復制數據。雖然 出版和訂購的對象都是將復制數據,但出版和訂購卻并不是不同角度(出版者和訂購)的 同一數據操作(復制數據),而是體現出一定的層次性和順序性(總是先進行出版,然后 再進行訂購)。sql server 的復制組件有出版者、訂購者、分發者、出版物與論文、推訂 購和拉訂購。
出版者、分發者、訂購者實際上并不一定指相互獨立的服務器,它只是對sql server 在復制過程中所扮演的不同角色的描述。sql server 允許一臺sql server 服務器可以扮 演不同的角色。比如,一臺出版者服務器既可出版出版物也可以作為分發者來存儲和傳送 快照復制和事務復制。當然一臺訂購者服務器也可以同時作為其它訂購者的出版者,只不 過這種情況很少見。在實際應用中我們決定是否讓一臺服務器扮演一個或多個角色在很大 程度是基于復制系統性能的考慮。例如為了提高分發者從分發數據庫向訂購者的數據庫復 制出版物的效率,降低出版者服務器的負載。我們常不允許某一sql server 服務器既扮 演出版者又扮演分發者,而是讓另外的服務器專門承擔分發者任務從而提高了出版者和 分發者的性能。
(5) 隊列閱讀代理 在快照復制或事務復制時如果選擇了queued updating 選項或immediate updating with queued updating as a failover 選項,則需要使用隊列閱讀代理。 隊列閱讀代理是運行在分發者上的多線程代理,它主要負責從分發者消息隊列中讀到 消息并將包含在消息中的事務應用到出版者。
16.1.3 sql server 的復制類型 sql server 提供了三種復制類型:快照復制(snapshot replication)、事務復制 (transactional replication)、合并復制(merge replication)。 可以在實際應用中使用一 種或多種復制類型。每一種復制類型都在不同程度上實現數據的一致性和節點的自主性, 因此對復制類型的選擇主要依賴于應用系統對數據一致性、節點自主性的要求以及現有的 網絡資源情況(如網寬和網絡傳輸速度)。在分別介紹事務復制、快照復制和合并復制的 三節中我們將討論如何選擇合適的復制類型。下面扼要介紹一下這三種復制類型。