SQL Server複製入門(一)----複製簡介

   SQL Server中的複製(Replication)是SQL Server高可用性的核心功能之一,在我看來,複製指的並不僅僅是一項技術,而是一些列技術的集合,包括從存儲轉發數據到同步數據到維護數據一致性。使用複製功能不僅僅需要你對業務的熟悉,還需要對複製功能的整體有一個全面的瞭解,本系列文章旨在對SQL Server中的複製進行一個簡單全面的探討。(PS:在我的上篇文章中我發現某些文章的圖片使用mspaint手繪更有感覺,但被很多人吐槽,因此在不考慮個人羞恥感的前提下,本系列文章中的一些圖片繼續使用mspaint微笑)。

 

複製是什麼

    複製,英文是Replication,這個詞源自於拉丁文replicare,原意是重複。SQL Server中的複製也是這個意思,複製的核心功能是存儲轉發,意味着在一個在一個位置增刪改了數據以後,重複這個動作到其他的數據源,概念如圖1所示。

    1

    圖1.複製的基本概念

 

    當然,上面的這個模型是複製最簡單的模型,實際中的模型可能會複雜很多,但是大多數使用複製的原因可以分爲如下幾類:

    1.負載均衡----通過將數據複製到其它數據庫服務器來減少當前服務器的負載,比如說最典型的應用就是分發數據來分離OLTP和OLAP環境。

    2.分區----將經常使用的數據和歷史數據隔離,將歷史數據複製到其它數據庫中

    3.授權----將一部分數據提供給需要使用數據的人,以供其使用

    4.數據合併-每個區域都有其各自的數據,將其數據進行合併。比如一個大公司,每個地區都有其各自的銷售數據,總部需要彙總這些數據。

    5.故障轉移----複製所有數據,以便故障時進行轉移。

 

    雖然需要使用複製的原因多種多樣,但是在使用之前你首先要了解複製技術所需的組成元素。

 

複製的組成部分

     複製的概念很像發行雜誌的模型,從發行商那裏出版後,需要通過報刊亭等地方分發到訂閱雜誌的人手裏。對於SQL Server複製來說,這個概念也是如此。對於SQL Server複製來說,發行商,報刊亭,訂閱者分別對應的是發佈服務器,分發服務器,訂閱服務器。概念如圖2所示。

    2

    圖2.發佈分發訂閱的基本概念

 

發佈服務器

   圖2中的發佈服務器包含了需要被髮布的數據庫。也就是需要向其它數據源分發內容的源數據庫。當然,被髮布的數據首先需要被允許發佈。關於這裏的詳細設置會在文章後面提到。

分發服務器

    圖2中的分發服務器包含了分發數據庫,分發數據庫的作用是存儲轉發發佈服務器發過來的數據。一個分發服務器支持多個發佈服務器,就像一個報刊亭可以出售多個出版社所出的雜誌一樣。同理,分發服務器也可以和發佈服務器是同一個實例,這就像出版商不通過報刊亭,自己直接販賣雜誌一樣。

訂閱服務器

    圖2中的訂閱服務器包含了發佈服務器所發佈的數據的副本。這個副本可以是一個數據庫,或者一個表,甚至是一個表的子集。根據不同的設置,有些發佈服務器發佈的更新到訂閱服務器就是隻讀的(比如說用於出報表的OLAP環境),或者是訂閱服務器也可以進行更新來將這些改變提交到發佈服務器。

 

發佈和文章

    發佈指的是可以發佈的文章的集合,這些文章包括表,存儲過程,視圖和用戶自定義函數,如圖3所示。

    3

    圖3.可以發佈的內容

 

    當我們發佈表時,還可以根據限定條件只發布表的子集。

 

訂閱

    訂閱是相對發佈的一個概念,訂閱定義了訂閱服務器從哪個分發服務器接收發布。有兩類訂閱方式,推送訂閱(Push)和請求訂閱(Pull),根據名字就可以望文生義的知道,在推送訂閱的情況下,當發佈服務器產生更新時,分發服務器直接更新訂閱的內容,而請求訂閱需要訂閱服務器定期查看分發服務器是否有可用更新,如果存在可用更新,則訂閱服務器更新數據。

 

複製類型

    SQL Server將複製方式分爲三大類,每一個發佈只能有一種複製類型,分別爲:快照複製,事務複製和合並複製。

 

快照複製

   快照複製將發佈的所有表做成一個鏡像,然後一次性複製到訂閱服務器。中間的更新不會像其它複製類型那樣自動傳送到訂閱服務器。由這個概念不難看出,快照複製的特點會是:

   1.佔用網絡寬帶,因爲一次性傳輸整個鏡像,所以快照複製的內容不應該太大。

   2.適合那些更新不頻繁,但每次更新都比較大的數據。比如企業員工信息表,每半年更新一次這類的業務場景。

   3.適合訂閱服務器是OLAP只讀的環境。

  

   來自MSDN的配圖能很好的闡述快照複製,如圖4所示。

    snap

    圖4.快照複製

 

事務複製

    事務複製就像其名字一樣,複製事務。在第一次設置好事務複製後,發佈的表、存儲過程等將會被鏡像,之後每次對於發佈服務器所做的改動都會以日誌的方式傳送到訂閱服務器。使得發佈服務器和訂閱服務器幾乎可以保持同步。因此,可以看出事務複製的特點是:

    1.發佈服務器和訂閱服務器內容基本可以同步

    2.發佈服務器,分發服務器,訂閱服務器之間的網絡連接要保持暢通。

    3.訂閱服務器也可以設置成請求訂閱,使得訂閱服務器也可以不用一直和分發服務器保持連接。

    4.適用於要求實時性的環境。

 

    來自MSDN的配圖能很好的闡述事務複製,如圖5所示

    grid.ai

    圖5.事務複製

 

合併複製

    合併複製即允許發佈服務器更新數據庫,也允許訂閱服務器更新數據。定期將這些更新進行合併,使得發佈的數據在所有的節點上保持一致。因此,有可能發佈服務器和訂閱服務器更新了同樣的數據,當衝突產生時,並不是完全按照發布服務器優先來處理衝突,而是根據設置進行處理,這些會在後續文章中講到。

  

    來自MSDN的配圖能很好的闡述合併複製,如圖6所示。

    merge

     圖6.合併複製

 

建立一個簡單的事務複製

    下面我進行一個簡單的事務複製。首先,在本地安裝兩個SQL Server實例,我本機安裝的兩個實例分別爲SQL Server 2008R2和SQL Server 2012,其中,SQL Server 2008R2作爲發佈和分發服務器,SQL Server 2012作爲訂閱服務器,如圖7所示。

    7

    圖7.複製的兩個實例

 

    首先在SQL Server 2008R2上配置發佈服務器和分發服務器,選擇配置分發,如圖8所示。

    8

    圖8.配置分發

 

    將發佈服務器和分發服務器選擇爲同1臺,如圖9所示。

    9

    圖9.設置發佈服務器和分發服務器爲同一臺服務器

 

    設置快照文件夾,由上面MSDN的圖可知,快照代理是需要在分發服務器上暫存快照的,設置這個目錄,如圖10所示。

    10

    圖10.設置快照文件夾

 

    這裏值得注意的是,需要給這個目錄對於Everyone設置讀取權限,如圖11所示。

    11

    圖11.設置讀取權限

 

    下一步配置分發嚮導就按照默認值來,如圖12所示。

    12

    圖12.配置分發嚮導

 

    剩下的步驟都保持默認值,最後成功在SQL Server 2008R2實例上配置發佈服務器和分發服務器,如圖13所示。

    13

    圖13.成功配置發佈和分發服務器

 

    下面就要建立一個發佈了,選擇新建發佈,如圖14所示。

    14

    圖14.新建發佈

 

   一路next,在選擇發佈類型時選擇事務發佈,如圖15所示。

    15

    圖15.選擇事務發佈

 

   發佈用於測試的一個表,只有兩個列,一個爲自增的int型主鍵id,另一個爲隨便設置的列,如圖16所示。

   16

  圖16.設置發佈的表(文章)

 

   下一個頁面不過濾文章,直接保持默認值下一步。在下一個窗口中選擇立即創建快照並初始化..如圖17所示。

    17

    圖17.立即創造快照並初始化

 

   安全設置保持和SQL Server Agent一樣的賬戶,如圖18所示。

   18

    圖18.快照代理和日誌讀取代理設置和SQL Server Agent同一個賬戶

 

  剩下的步驟一路下一步,設置好發佈名稱後,成功創建發佈,如圖19所示。

  19

   圖19.成功創建發佈

 

   下面我們來在SQL Server 2012的實例上創建訂閱,選擇新建訂閱,如圖20所示。

    20

    圖20.新建訂閱

 

    在歡迎界面選擇下一步後,選擇剛剛創建的發佈,如圖21所示。

    21

    圖21.選擇發佈服務器

 

    下一步選擇推送訂閱,以便發佈服務器所做的改動能自動更改到訂閱服務器,如圖22所示。

    23

    圖23.選擇推送訂閱

 

   選擇保持連接,下一步保持默認值,然後在分發代理安全性下選擇模擬進程賬戶。如圖24所示。

    24

    圖24.選擇模擬進程賬戶

 

    保持默認值,一路下一步直到訂閱創建完成,如圖25所示。

    25

    圖25.創建訂閱成功

 

    現在我們進行測試,向表中插入100條數據,監視狀態,發現100個事務已經成功傳到了訂閱服務器,如圖26所示。

    26

    圖26.插入的100條數據已經成功傳送到訂閱服務器

 

    現在我們再來看訂閱服務器(SQL Server 2012),在發佈服務器插入的100條數據已經成功存在於訂閱服務器,如圖27所示。

   27

    圖27.100條數據已經成功發佈到了訂閱服務器

 

 

總結

    本文對SQL Server的複製進行了大致的講解,並實現了一個簡單的複製。複製的概念需要對SQL Server的各個方面都要有所涉獵,本系列文章的下一篇將會將複製應用的一些模式。

發佈了41 篇原創文章 · 獲贊 12 · 訪問量 19萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章