深入淺出SQL Server Replication第一篇:走近Replication(上)
對於很多的SQL Server DBA而言,Replication不是什么新鮮的事物了,也是大家常常說的“復制”,很多的朋友已經在項目中使用。正如其他技術一樣:有人可以使用的好,有人會抱怨技術不行。
我們AgileSharp團隊也經過了不少高可用的案例, Replication還是非常有價值的。因此,我們整理了很多的資源,我們決定發布一系列的Replication文章,一是為了幫助大家了解Replication,另外也是為以后的講述高可用做個鋪墊。
另外,有關高可用的一些問題,請參看這篇文章談談SQL Server高可用的常見問題。
理解出版業刊物發布
提到Replication,說的通俗一點就是:傳遞數據,同步數據。既然是數據的同步和傳遞,那么就可以實時的進行,或者隔斷時間進行。既然是同步,那么就可能存在多個數據源,而且數據源的位置可以是任意的,或許在同一台服務器上面,或者處於不同的服務器,甚至網絡。
為了使得更好的討論Replication,勢必要討論它涉及到的幾個重要的組成部分:Distributor(分發服務器),Publisher(發布服務器),Subscriber(訂閱服務器),Publication(發布),Article(項目),Subscriptions(訂閱)。為了使得大家更好的明白這些組成部分,首先,我建議大家在頭腦中把Replication同步數據的過程和出版社發送刊物給讀者結合起來思考。下面我們首先看看三個重要的組件:發布者(Publisher),分發者(Distributor),訂閱者(Subscriber)。然后在一一的展開。如圖:
下面我們就借助上面的圖和出版社發行刊物的例子來說明Replication。
我們首先看看我們最熟悉的發行訂閱刊物的例子。
整個步驟是這樣的:
1. 讀者(Subscribers)去出版社(Publisher),要求訂閱書刊。
2. 既然有很多的數據,但是讀者在出版社中訂閱了《AgileSharp技術周刊》雜志(稱之為Subscriptions)。
3. 出版社同意讀者的要求,並且把這個讀者加入到他們的訂閱者清單中。
4. 刊物出版了,出版社通知下面的各級的代理商(Distributor)新書出來了。
5. 各級代理商派人去把新書和訂閱者的名單拿來。
6. 代理商每次把新書銷售都做一個記錄,方便之后結算等
7. 代理商然后把新書快遞到每個讀者手里
Replication使用出版業術語表示Replication拓撲中的組件,其中有發布服務器、分發服務器、訂閱服務器、發布、項目和訂閱:
·雜志出版商(發布服務器)生產一種或多種刊物(發布)
·刊物(發布)包含文章(項目)
·出版商(發布服務器)可以直接發行(分發)雜志,也可以使用發行商(分發服務器)
·訂閱者(訂閱服務器)接收訂閱的刊物(發布)
雖然雜志術語有助於理解Replication,但重要的是要注意到 SQL Server Replication包含有這套術語未予以表述的功能,尤其是訂閱服務器進行更新的功能以及發布服務器將增量更改發送到發布中的項目的功能。
“ Replication拓撲”定義了服務器和數據副本間的關系,並闡明了決定數據如何在服務器之間流動的邏輯。Replication進程(稱為“代理”)負責在發布服務器和訂閱服務器之間復制和移動數據。
下圖為Replication中所涉及的組件和進程的概述。

發布服務器
發布服務器是一種數據庫實例,它通過復制向其他位置提供數據。發布服務器可以有一個或多個發布,每個發布定義一組要復制的具有邏輯關系的對象和數據。
分發服務器
分發服務器也是一種數據庫實例,它起着存儲區的作用,用於復制與一個或多個發布服務器相關聯的特定數據。每個發布服務器都與分發服務器中的單個數據庫(稱作分發數據庫)相關聯。分發數據庫存儲復制狀態數據和有關發布的元數據,並且在某些情況下為從發布服務器向訂閱服務器移動的數據起着排隊的作用。在很多情況下,一個數據庫服務器實例充當發布服務器和分發服務器兩個角色。這稱為“本地分發服務器”。
當發布服務器和分發服務器按各自的數據庫服務器實例配置時,把分發服務器稱為“遠程分發服務器”。
訂閱服務器
訂閱服務器是接收復制數據的數據庫實例。訂閱服務器可以接收來自多個發布服務器和發布的數據。根據所選的復制類型,訂閱服務器還可以將數據更改傳遞回發布服務器或者將數據重新發布到其他訂閱服務器。
項目
項目用於標識發布中包含的數據庫對象。一次發布可以包含不同類型的項目,包括表、視圖、存儲過程和其他對象。當把表作為項目發布時,可以用篩選器限制發送到訂閱服務器的數據的列和行。
發布
發布是一個數據庫中的一個或多個項目的集合。將多個項目分組成一個發布,使得更便於指定一組作為一個單元復制的、具有邏輯關系的數據庫對象和數據。
訂閱
訂閱是把發布副本傳遞到訂閱服務器的請求。訂閱定義將接收的發布和接收的時間、地點。有兩種類型的訂閱:推送訂閱和請求訂閱,我們之前的那個出版社的例子就是推送訂閱,即,Push。