連接:http://www.sqlservercentral.com/articles/Stairway+Series/72274/web
文章:Stairway to SQL Server Replication: Level 1 - Introduction to SQL Server Replicationsql
通往SQL Server複製的階梯:一級- SQL服務器複製介紹數據庫
By Sebastian Meine, 2012/12/26安全
該系列服務器
本文是樓梯系列的一部分:SQL Server複製的階梯網絡
SQL複製能夠解決運行數據庫驅動的應用程序中的許多問題。發佈/訂閱模型並不徹底容易理解,腳本和監控複製系統的複雜性須要一些思考。在這裏,最後是一系列的文章,這些文章將會爲全部類型的SQL服務器複製提供一種無術語的方法。sqlserver
級別1:SQL Server複製的介紹測試
主條目:rep-li-ca-tionui
發音:\ re-pl ?——「ka-sh ? n \spa
功能:名詞
日期:14世紀
「複製」這個詞來源於拉丁語「複製」,意思是重複。複製描述了複製或複製的過程(www.merriam - webster.com)。
SQL Server中的複製就是這樣作的;它複製或複製數據。任什麼時候候,您須要建立數據的副本,或複製該數據的更改,均可以使用複製。該副本能夠在相同的數據庫中建立,也能夠在獨立服務器上的遠程位置建立。
該副本能夠與源數據保持同步,或按預約的時間間隔同步。單向同步和雙向同步是可能的。複製甚至能夠用來使幾個數據集保持同步。
在第一個級別中,我將介紹基本的複製組件,並描述它們如何協同工做,以容許您複製數據和數據更改。咱們還將查看設置簡單複製場景的詳細示例。
複製組件
SQL Server複製由三個組件組成:發佈者、分發服務器和訂閱者。這些組件做用於出版物和訂閱中定義的文章。
文章
對於應該複製的每一個SQL Server對象,須要定義複製文章。每一篇文章都對應一個SQL Server對象,或者一個對象的一個子集。被複制的對象一般是表、視圖和存儲過程。對於能夠複製的對象的完整列表,能夠在線查看圖書的發佈數據和數據庫對象。一篇文章的屬性決定了文章是否包含整個對象,或者是否通過篩選的對象子集組成了複製的文章。經過一些限制,能夠在單個對象上建立多個文章。
出版
一組邏輯上屬於一塊兒的文章能夠合併成一個出版物。該出版物有定義適用於該出版物中的全部文章的選項。發行版定義的主要選項是要使用的複製類型。
出版商
用於複製的發佈的SQL服務器實例稱爲發佈者。
發佈者監視全部更改的文章,並向分發服務器提供有關更改的信息。
經銷商
該分發服務器是SQL Server實例,它跟蹤全部訂閱者,並對全部已發佈的更改進行跟蹤,並確保每一個訂閱者都獲得每一個更改的通知。大多數更改都在分發數據庫中進行跟蹤。分發服務器能夠是一個單獨的SQL服務器實例,但分發服務一般與發佈服務器運行在同一臺機器上。
訂閱者
訂閱者是經過訂閱接收全部已發佈信息的SQL服務器實例。
訂閱
訂閱是出版物的副本。訂閱定義了哪一個服務器(訂閱者)將接收發布中發佈的更新。每一個訂閱在一個發佈和一個訂閱者之間建立一個連接。訂閱有兩種類型:推送訂閱和吸引訂閱。在推送訂閱中,分銷商直接更新訂閱者數據庫中的數據。在pull訂閱中,訂閱服務器按期向分發服務器詢問是否有任何新的更改,而後更新數據自己。
複製類型
在SQL Server中有三種主要的複製類型。它們是快照複製、合併複製和事務複製。
快照複製
快照複製在每次運行時建立複製對象及其數據的完整副本。它使用sqlserver的BCP實用程序將每一個表的內容寫入快照文件夾。快照文件夾是在啓用複製時必須在分發服務器上設置的共享文件夾位置。複製設置中的每一個參與者都須要訪問快照文件夾。
每次運行快照複製時,一切都是從頭開始,所以它具備高帶寬和存儲需求。默認狀況下,全部其餘類型的複製都使用一個複製快照,僅在初始設置期間將全部訂閱服務器與分發服務器同步。
事務性複製
事務性複製的工做方式,顧名思義,是基於事務的。每個提交的事務都會被掃描到用於複製文章的更改。對更改的掃描是經過日誌讀取器代理完成的,該代理讀取發佈服務器數據庫的事務日誌。若是有更改影響已發佈的對象,則這些更改將登陸到分發數據庫的分發服務器。他們從那裏開始向訂戶們前進。
事務性複製容許接近實時同步,而且只給發佈者留下很小的足跡。雖然有幾種容許雙向數據移動的選項,但事務性複製最初只是設計爲單向的。
合併複製
合併複製是從一開始就設計的,容許對發佈服務器和訂閱方的數據進行更改。合併複製還容許斷開鏈接的場景,其中用戶可能在白天不鏈接。該訂戶將在晚上從新鏈接後進行同步。若是一行在兩個不一樣的地方同時更新,就會發生衝突。合併複製附帶了幾個用於解決這些衝突的選項。
設置事務複製
本節將逐步指導如何設置包含單個複製表的事務複製。
要設置複製,須要配置分發服務器、發佈者和訂閱者。可使用t - sql腳本徹底地設置和控制複製。可是,必要的t - sql涉及到使用存儲過程,這些存儲過程總共有超過100個必需的參數。所以,使用ssms - gui開始是有意義的。這裏顯示的示例屏幕截圖是在一個服務器上(WIN2008A)上安裝的,上面安裝了一個sql - server實例(R2A)。這個實例是一個sql - server 2008R2實例。可是,您也能夠參考SQL Server 2008和2005的示例。
創建分佈
分發服務器是事務性複製的核心。在設置全部其餘組件時,須要提供它,所以須要首先配置它。
從打開SSMS開始,鏈接到包含複製源數據的sql - server實例。雖然分發服務器能夠在本身的sql - server實例上,但在許多狀況下,讓發佈者和分發服務器都生活在同一臺機器上是有意義的,正如本例中所假定的那樣。
鏈接到服務器後,右鍵單擊服務器下的「複製」文件夾並選擇「配置分發…」如圖1所示。
圖1:配置分佈
配置分佈嚮導將以其啓動屏幕向您表示歡迎,如圖2所示。
圖2:配置分發嚮導
忽略此屏幕並單擊「Next」是安全的。
在下一個屏幕(圖3)中,您將選擇分發服務是否應該在該服務器上運行,或者您的網絡中是否已經有一個已配置的分發服務器。分發服務運行的機器也將包含分發數據庫。在缺省狀況下保留此選擇,即在此服務器上安裝分發版並單擊「Next」。
圖3:選擇分發服務器
這將打開圖4中的對話框,要求您選擇快照文件夾的位置。
圖4:快照文件夾
快照文件夾能夠是您的機器上的任何位置,也能夠是您的網絡中的任何位置。爲它建立一個網絡共享是有意義的。這個示例使用「\ \ WIN2008A \ ReplicationSnapshotFolder」。
快照文件夾的設置要求授予適當的權限。如今,不要過多地討論細節,授予對「已驗證用戶」(圖5)的訪問權限,並讀取「每一個人」的訪問權限(圖6)。有關如何增強這一地區的安全的更多信息將在這個樓梯的稍後一層給出。
圖5:容許訪問快照文件夾
圖6:容許訪問快照文件夾共享
設置好共享並將網絡路徑放入嚮導的輸入字段後,按下「Next」,進入圖7所示的「分發數據庫」表單。
圖7:分佈數據庫
這裏指定了分佈數據庫的名稱,以及它的數據和日誌文件的位置。保留默認值,而後單擊「Next」,以進入「發佈者」屏幕(圖8)。
在「發佈者」屏幕上,您可讓潛在的發佈者可以使用該分發器。咱們將在同一個實例上安裝咱們的發佈者,所以您能夠將默認值和「Next」保留到最後一個問題(圖9)。
圖8:出版商作準備
圖9:嚮導操做
最後一個問題是,您是否但願嚮導當即執行您的選擇,或者您但願嚮導建立腳本,您將在稍後的時間手動執行該腳本。再次,保留默認設置,最後一次單擊「Next」。
如今您將看到一個操做列表,如圖10所示。點擊「Finish」開始這個過程。
圖10:嚮導總結
最後,圖11中顯示的屏幕提供了關於複製配置的進展和成功的信息。
圖11:執行狀態
第一次出版
要建立發佈,首先須要有一個包含要發佈的表的數據庫。執行SQL腳本1,爲發佈建立一個測試數據庫。
USE MASTER;
GO
EXECUTE AS LOGIN = 'SA';
GO
CREATE DATABASE ReplA;
GO
USE ReplA;
GO
IF OBJECT_ID('dbo.Test') IS NOT NULL DROP TABLE dbo.Test;
GO
CREATE TABLE dbo.Test(
Id INT IDENTITY(1,1) PRIMARY KEY,
Data INT CONSTRAINT Test_Data_Dflt DEFAULT CHECKSUM(NEWID())
);
GO
INSERT INTO dbo.Test DEFAULT VALUES;
GO 1000
USE MASTER;
GO
REVERT;
GO
腳本1:爲發佈建立一個測試數據庫
如今,您已經準備好設置一個發佈了。
在SSMS對象資源管理器中打開復制文件夾並右鍵單擊「本地發佈」。選擇「新出版…在下拉菜單中(圖12)。
圖12:新的出版物
「新發布嚮導」的歡迎頁面如圖13所示。
圖13:配置發佈嚮導
單擊「下一步」。
在「發佈數據庫」框中(圖14)選擇您剛剛建立的數據庫ReplA並單擊「Next」。「發佈類型」屏幕(圖15)容許您選擇要使用的複製類型。選擇「事務性發布」並單擊「Next」。
圖14:選擇發佈數據庫
圖15:出版類型
如今您能夠選擇該發佈的哪篇文章(圖16)。dbo選擇表。測試並再次點擊「Next」,以移動到「過濾器錶行」對話框(圖17)。過濾器是一個高級的主題,它將在後面的樓梯中被覆蓋,因此如今只需點擊「Next」,而不須要在這個表單上作出選擇。
圖16:文章
圖17:行過濾器
接下來的三個屏幕處理快照代理。在第一個屏幕上(圖18)選擇「當即建立一個快照」並單擊「Next」。在「代理安全」屏幕上(圖19)單擊「安全設置」按鈕,並在打開的表單上選擇「在sqlserver代理服務賬戶下運行」(圖20)。
圖18:快照時間表
圖19:代理安全性
\
圖20:選擇一個賬戶
在表單上單擊「肯定」,而後在代理安全屏幕上單擊「下一步」。
這就引出了「嚮導操做」表單(圖21),供您選擇「建立發佈」。最後一次點擊「Next」會將您帶到摘要屏幕(圖22)。
圖21:嚮導操做
圖22:嚮導總結
在這裏,您須要爲發佈選擇一個名稱。在字段中鍵入「MyFirstPublication」,而後單擊「Finish」啓動進程。一樣,最後一個屏幕(圖23)顯示了進程結束時的進度信息和成功狀態。
圖23:執行狀態
第一次訂購
在大多數狀況下,訂閱服務器將位於不一樣的機器上,可是您但願它位於同一實例上的場景。爲了保持這個示例的簡單性,咱們將繼續使用相同的實例。使用腳本2中的代碼:建立數據庫ReplB。
USE MASTER;
GO
EXECUTE AS LOGIN = 'SA';
GO
CREATE DATABASE ReplB;
GO
REVERT;
GO
腳本2:建立目標數據庫
如今咱們訪問SSMS對象資源管理器,右鍵單擊「本地訂閱」並選擇「新訂閱……」在下拉菜單中(圖24)。
圖24:選擇新訂閱
「新訂閱嚮導」(圖25)歡迎您,併爲您提供另外一個練習按下「Next」按鈕的機會。
圖25:新的訂閱嚮導
在「發佈」表單中(圖26)選擇您剛剛建立的發佈,並單擊「Next」。「分佈代理位置」屏幕(圖27)容許您在push和pull訂閱之間進行選擇。保留默認值並移動到「訂閱者」屏幕(圖28)。
圖26:選擇發佈
圖27:推或拉
圖28:目標數據庫
在這裏,您須要選擇您的服務器並選擇ReplB數據庫。
下一個屏幕容許您設置「分發代理安全性」(圖29)。
圖29:分發代理安全性
單擊右側的小省略號按鈕,並在打開的表單中選擇「運行在sqlserver代理服務賬戶下」(圖30)。
圖30:選擇一個賬戶
點擊「OK」,而後「Next」將您帶到「同步計劃」屏幕(圖31)。選擇「連續運行」並轉移到「初始化訂閱」屏幕(圖32)。保留默認值,當即初始化,而後「下一步」到「嚮導操做」表單(圖33)。
圖31:同步時間表
圖32:初始化
圖33:嚮導操做
如前所述,保留默認值(建立訂閱)並單擊「Next」,您將看到一個即將執行的操做列表(圖34)。單擊「Finish」啓動進程,等待綠色成功標誌出如今最終表單上(圖35)。
圖34:嚮導總結
圖35:執行狀態
成功!
Script1建立了表dbo。在ReplA中測試並插入1000行。在初始快照轉移到訂閱服務器以後,您將找到dbo。測試表也在ReplB中包含了全部1000行。完成設置後的幾分鐘,您能夠運行腳本3來驗證複製是否按預期將全部數據推送到訂閱服務器。此腳本與ReplA.dbo鏈接。測試和ReplB.dbo。測試表一塊兒顯示哪些行被正確複製。您如今能夠運行本身的進一步測試,您能夠在ReplA.dbo中插入和更新行。測試和觀察這些變化會神奇地出如今replb . dbo中。測試。
SELECT TOP(20) A.Id AS [ReplA.Id],A.Data AS [ReplA.Data],B.Id AS [ReplB.Id],B.Data AS [ReplB.Data]
FROM ReplA.dbo.Test A
FULL OUTER JOIN ReplB.dbo.Test B
ON A.Id = B.Id
ORDER BY A.Id DESC
腳本3:比較發佈者和訂閱者
總結
在SQL服務器實例中,被標記爲複製的發佈者的數據庫中的對象稱爲文章。文章被分組到出版物中。訂閱方經過訂閱對文章的更改進行更新。數據流經分佈在分發服務器上的數據庫。發佈者、分發服務器和訂閱者能夠是同一個實例,也能夠是在相同或不一樣機器上的獨立實例。源數據庫和目標數據庫能夠是相同的(若是發佈者和訂閱者其實是相同的SQL Server實例),可是分發數據庫必須是獨立的。