SQL Server複製入門(一)----複製簡介 (轉載)
簡介
SQL Server中的複製(Replication)是SQL Server高可用性的核心功能之一,在我看來,複製指的並不僅僅是一項技術,而是一些列技術的集合,包括從儲存轉發資料到同步資料到維護資料一致性。使用複製功能不僅僅需要你對業務的熟悉,還需要對複製功能的整體有一個全面的瞭解,本系列文章旨在對SQL Server中的複製進行一個簡單全面的探討。(PS:在我的上篇文章中我發現某些文章的圖片使用mspaint手繪更有感覺,但被很多人吐槽,因此在不考慮個人羞恥感的前提下,本系列文章中的一些圖片繼續使用mspaint)。
複製是什麼
複製,英文是Replication,這個詞源自於拉丁文replicare,原意是重複。SQL Server中的複製也是這個意思,複製的核心功能是儲存轉發,意味著在一個在一個位置增刪改了資料以後,重複這個動作到其他的資料來源,概念如圖1所示。
圖1.複製的基本概念
當然,上面的這個模型是複製最簡單的模型,實際中的模型可能會複雜很多,但是大多數使用複製的原因可以分為如下幾類:
1.負載均衡----通過將資料複製到其它資料庫伺服器來減少當前伺服器的負載,比如說最典型的應用就是分發資料來分離OLTP和OLAP環境。
2.分割槽----將經常使用的資料和歷史資料隔離,將歷史資料複製到其它資料庫中
3.授權----將一部分資料提供給需要使用資料的人,以供其使用
4.資料合併-每個區域都有其各自的資料,將其資料進行合併。比如一個大公司,每個地區都有其各自的銷售資料,總部需要彙總這些資料。
5.故障轉移----複製所有資料,以便故障時進行轉移。
雖然需要使用複製的原因多種多樣,但是在使用之前你首先要了解複製技術所需的組成元素
複製的組成部分
複製的概念很像發行雜誌的模型,從發行商那裡出版後,需要通過報刊亭等地方分發到訂閱雜誌的人手裡。對於SQL Server複製來說,這個概念也是如此。對於SQL Server複製來說,發行商,報刊亭,訂閱者分別對應的是釋出伺服器,分發伺服器,訂閱伺服器。概念如圖2所示。
圖2.釋出分發訂閱的基本概念
釋出伺服器
圖2中的釋出伺服器包含了需要被髮布的資料庫。也就是需要向其它資料來源分發內容的源資料庫。當然,被髮布的資料首先需要被允許釋出。關於這裡的詳細設定會在文章後面提到。
分發伺服器
圖2中的分發伺服器包含了分發資料庫,分發資料庫的作用是儲存轉發釋出伺服器發過來的資料。一個分發伺服器支援多個釋出伺服器,就像一個報刊亭可以出售多個出版社所出的雜誌一樣。同理,分發伺服器也可以和釋出伺服器是同一個例項,這就像出版商不通過報刊亭,自己直接販賣雜誌一樣。
訂閱伺服器
圖2中的訂閱伺服器包含了釋出伺服器所釋出的資料的副本。這個副本可以是一個數據庫,或者一個表,甚至是一個表的子集。根據不同的設定,有些釋出伺服器釋出的更新到訂閱伺服器就是隻讀的(比如說用於出報表的OLAP環境),或者是訂閱伺服器也可以進行更新來將這些改變提交到釋出伺服器。
釋出和文章
釋出指的是可以釋出的文章的集合,這些文章包括表,儲存過程,檢視和使用者自定義函式,如圖3所示。
圖3.可以釋出的內容
當我們釋出表時,還可以根據限定條件只發布表的子集。
訂閱
訂閱是相對釋出的一個概念,訂閱定義了訂閱伺服器從哪個分發伺服器接收發布。有兩類訂閱方式,推送訂閱(Push)和請求訂閱(Pull),根據名字就可以望文生義的知道,在推送訂閱的情況下,當釋出伺服器產生更新時,分發伺服器直接更新訂閱的內容,而請求訂閱需要訂閱伺服器定期檢視分發伺服器是否有可用更新,如果存在可用更新,則訂閱伺服器更新資料。
複製型別
SQL Server將複製方式分為三大類,每一個釋出只能有一種複製型別,分別為:快照複製,事務複製和合並複製。
快照複製
快照複製將釋出的所有表做成一個映象,然後一次性複製到訂閱伺服器。中間的更新不會像其它複製型別那樣自動傳送到訂閱伺服器。由這個概念不難看出,快照複製的特點會是:
1.佔用網路寬頻,因為一次性傳輸整個映象,所以快照複製的內容不應該太大。
2.適合那些更新不頻繁,但每次更新都比較大的資料。比如企業員工資訊表,每半年更新一次這類的業務場景。
3.適合訂閱伺服器是OLAP只讀的環境。
來自MSDN的配圖能很好的闡述快照複製,如圖4所示。
圖4.快照複製
事務複製
事務複製就像其名字一樣,複製事務。在第一次設定好事務複製後,釋出的表、儲存過程等將會被映象,之後每次對於釋出伺服器所做的改動都會以日誌的方式傳送到訂閱伺服器。使得釋出伺服器和訂閱伺服器幾乎可以保持同步。因此,可以看出事務複製的特點是:
1.釋出伺服器和訂閱伺服器內容基本可以同步
2.釋出伺服器,分發伺服器,訂閱伺服器之間的網路連線要保持暢通。
3.訂閱伺服器也可以設定成請求訂閱,使得訂閱伺服器也可以不用一直和分發伺服器保持連線。
4.適用於要求實時性的環境。
來自MSDN的配圖能很好的闡述事務複製,如圖5所示
圖5.事務複製
合併複製
合併複製即允許釋出伺服器更新資料庫,也允許訂閱伺服器更新資料。定期將這些更新進行合併,使得釋出的資料在所有的節點上保持一致。因此,有可能釋出伺服器和訂閱伺服器更新了同樣的資料,當衝突產生時,並不是完全按照發布伺服器優先來處理衝突,而是根據設定進行處理,這些會在後續文章中講到。
來自MSDN的配圖能很好的闡述合併複製,如圖6所示。
圖6.合併複製
建立一個簡單的事務複製
下面我進行一個簡單的事務複製。首先,在本地安裝兩個SQL Server例項,我本機安裝的兩個例項分別為SQL Server 2008R2和SQL Server 2012,其中,SQL Server 2008R2作為釋出和分發伺服器,SQL Server 2012作為訂閱伺服器,如圖7所示。
圖7.複製的兩個例項
首先在SQL Server 2008R2上配置釋出伺服器和分發伺服器,選擇配置分發,如圖8所示。
圖8.配置分發
將釋出伺服器和分發伺服器選擇為同1臺,如圖9所示。
圖9.設定釋出伺服器和分發伺服器為同一臺伺服器
設定快照資料夾,由上面MSDN的圖可知,快照代理是需要在分發伺服器上暫存快照的,設定這個目錄,如圖10所示。
圖10.設定快照資料夾
這裡值得注意的是,需要給這個目錄對於Everyone設定讀取許可權,如圖11所示。
圖11.設定讀取許可權
下一步配置分發嚮導就按照預設值來,如圖12所示。
圖12.配置分發嚮導
剩下的步驟都保持預設值,最後成功在SQL Server 2008R2例項上配置釋出伺服器和分發伺服器,如圖13所示。
圖13.成功配置釋出和分發伺服器
下面就要建立一個釋出了,選擇新建釋出,如圖14所示。
圖14.新建釋出
一路next,在選擇釋出型別時選擇事務釋出,如圖15所示。
圖15.選擇事務釋出
釋出用於測試的一個表,只有兩個列,一個為自增的int型主鍵id,另一個為隨便設定的列,如圖16所示。
圖16.設定釋出的表(文章)
下一個頁面不過濾文章,直接保持預設值下一步。在下一個視窗中選擇立即建立快照並初始化..如圖17所示
圖17.立即創造快照並初始化。
安全設定保持和SQL Server Agent一樣的賬戶,如圖18所示。
圖18.快照代理和日誌讀取代理設定和SQL Server Agent同一個賬戶
剩下的步驟一路下一步,設定好釋出名稱後,成功建立釋出,如圖19所示。
圖19.成功建立釋出
下面我們來在SQL Server 2012的例項上建立訂閱,選擇新建訂閱,如圖20所示。
圖20.新建訂閱
在歡迎介面選擇下一步後,選擇剛剛建立的釋出,如圖21所示。
圖21.選擇釋出伺服器
下一步選擇推送訂閱,以便釋出伺服器所做的改動能自動更改到訂閱伺服器,如圖22所示。
圖22.選擇推送訂閱
選擇保持連線,下一步保持預設值,然後在分發代理安全性下選擇模擬程序賬戶。如圖23所示。
圖23.選擇推送訂閱
選擇保持連線,下一步保持預設值,然後在分發代理安全性下選擇模擬程序賬戶。如圖24所示。
圖24.選擇模擬程序賬戶
保持預設值,一路下一步直到訂閱建立完成,如圖25所示。
圖25.建立訂閱成功
現在我們進行測試,向表中插入100條資料,監視狀態,發現100個事務已經成功傳到了訂閱伺服器,如圖26所示。
圖26.插入的100條資料已經成功傳送到訂閱伺服器
現在我們再來看訂閱伺服器(SQL Server 2012),在釋出伺服器插入的100條資料已經成功存在於訂閱伺服器,如圖27所示。
圖27.100條資料已經成功釋出到了訂閱伺服器
總結
本文對SQL Server的複製進行了大致的講解,並實現了一個簡單的複製。複製的概念需要對SQL Server的各個方面都要有所涉獵,本系列文章的下一篇將會將複製應用的一些模式。