1. 程式人生 > >SQL Server復制的階梯:第1級 - SQL Server復制簡介

SQL Server復制的階梯:第1級 - SQL Server復制簡介

out 單擊 rip cat sel rev 下拉菜單 val users

SQL Server復制的階梯:第1級 - SQL Server復制簡介

作者:Sebastian Meine,2012年12月26日

轉自:http://www.sqlservercentral.com/articles/Stairway+Series/72274/

系列

本文是Stairway系列的一部分:SQL Server復制的階梯

SQL Replication可以解決運行數據庫驅動的應用程序中的許多問題。 發布/訂閱者模型不是很容易理解,腳本和監視復制系統的復雜性需要一些思考。 最後,這是一系列文章,它們負責制作所有類型的SQL Server Replication的無術語方法。

第1級:SQL Server復制簡介

主要條目:rep-li-ca-tion

發音:\

功能:名詞

日期:14世紀

復制這個詞來自拉丁文“replicare”,意思是重復。復制描述了復制或復制的過程(www.merriam-webster.com)。

SQL Server中的復制就是這樣做的; 它復制或復制數據。 只要您需要創建數據副本或重現對該數據的更改,就可以使用復制。該副本可以在同一數據庫中創建,也可以在單獨服務器上的遠程位置創建。

副本可以連續保持與源數據同步,或者以預定的時間間隔同步。 可以進行單向同步以及雙向同步。復制甚至可以用於使多個數據集保持彼此同步。

在第一級中,我將告訴您基本的復制組件,並描述它們如何協同工作以允許您復制數據和數據更改。我們還將查看設置簡單復制方案的詳細示例。

復制組件

SQL Server復制由三個組件組成:發布服務器,分發服務器和訂閱服務器。 這些組件對發布和訂閱中定義的文章起作用。

文章

對於應復制的每個SQL Server對象,需要定義復制項目。每篇文章都對應一個SQL Server對象或一個對象的子集。最常復制的對象是表,視圖和存儲過程。有關可以復制的對象的完整列表,請查看聯機叢書中的發布數據和數據庫對象。文章的屬性確定文章是否包含整個對象,或者對象的已過濾子集是否構成復制文章。通過一些限制,可以在單個對象上創建多個文章。

出版物

邏輯上屬於一起的一組文章可以組合成出版物。該出版物具有適用於該出版物中所有文章的選項。發布定義的主要選項是要使用的復制類型。

出版者

使發布可用於復制的SQL Server實例稱為發布者。

發布者監視所有文章以進行更改,並向分發者提供有關這些更改的信息。

分銷商

分發服務器是SQL Server實例跟蹤所有訂戶和所有已發布的更改,並確保每個訂戶都收到有關每個更改的通知。大多數更改都在分發數據庫中進行跟蹤。分發服務器可以是單獨的SQL Server實例,但分發服務通常與發布者在同一臺計算機上運行。

訂戶

訂閱者是通過訂閱接收所有已發布信息的SQL Server實例。

訂閱

訂閱是出版物的對應物。訂閱定義哪個服務器(訂戶)將接收發布中發布的更新。每個訂閱在一個發布和一個訂閱者之間創建鏈接。訂閱有兩種類型:推送訂閱和訂閱訂閱。在推送訂閱中,分發者直接更新訂戶數據庫中的數據。在訂閱訂閱中,訂閱者定期詢問分發者是否有任何新的更改,然後更新數據本身。

復制類型

SQL Server中有三種主要的復制類型。它們是快照復制,合並復制和事務復制。

快照復制

快照復制每次運行時都會創建復制對象及其數據的完整副本。它使用SQL Server的BCP實用程序將每個表的內容寫入快照文件夾。快照文件夾是共享文件夾位置,在啟用復制時必須在分發服務器上設置該位置。復制設置中的每個參與者都需要有權訪問快照文件夾。

每次運行快照復制時,所有內容都從頭開始重新復制,因此它具有較高的帶寬和存儲要求。所有其他類型的復制 - 默認情況下 - 使用單個復制快照,僅在初始設置期間將所有訂戶與分發服務器同步。

事務復制

顧名思義,事務復制在事務基礎上起作用。掃描每個已提交的事務以查找應用於復制項目的更改。掃描更改由日誌讀取器代理完成,該代理讀取發布者數據庫的事務日誌。如果存在影響已發布對象的更改,則會在分發數據庫中的分發服務器上記錄這些更改。從那裏他們走向訂戶。

事務復制允許接近實時同步,並且在發布者上留下的占用空間很小。雖然有幾種選項可以允許雙向數據移動,但事務復制最初只設計為單向工作。

合並復制

合並復制從一開始就設計為允許在發布者和訂閱者端對數據進行更改。合並復制還允許斷開連接的方案,其中訂戶可能在白天沒有連接。該用戶將在晚上重新連接後同步。如果某行同時在兩個不同的位置更新,則會發生沖突。合並復制帶有幾個內置選項來解決這些沖突。

設置事務復制

本節是有關如何設置涉及單個復制表的事務復制的分步指南。

要設置復制,需要配置分發服務器,發布者和訂戶。可以使用T-SQL腳本完全設置和控制復制。但是,必要的T-SQL涉及使用存儲過程,它們共同具有超過一百個必需參數。因此,從使用SSMS-GUI開始是有意義的。此處顯示的示例屏幕截圖是在單個服務器(WIN2008A)上安裝的,其中安裝了SQL-Server實例(R2A)。此實例是SQL-Server 2008R2實例。但是,您也可以按照SQL Server 2008和2005上的示例進行操作。

設置分發

分發服務器是事務復制的核心。在設置所有其他組件時需要它可用,因此需要先進行配置。

首先打開SSMS並連接到包含復制源數據的SQL-Server實例。雖然分發服務器可以位於自己的SQL服務器實例上,但在許多情況下,讓發布者和分發者在同一臺機器上運行是有意義的,這將在本示例中假設。

連接到服務器後,右鍵單擊服務器下的“Replication”文件夾,然後選擇“Configure Distribution ...”,如圖1所示。

技術分享圖片

圖1:配置分發

配置分發向導將通過其啟動屏幕向您致意,如圖2所示。

技術分享圖片

圖2:配置分發向導

忽略此屏幕並單擊“下一步”是安全的。

在下一個屏幕(圖3)上,您將選擇是否應在此服務器上運行分發服務,或者您是否已在網絡中配置了分發服務器。 運行分發服務的計算機也將包含分發數據庫。 將此選擇保留為默認值,即在此服務器上安裝分發,然後單擊“下一步”。

技術分享圖片

圖3:選擇分發服務器

這將打開圖4中的對話框,要求您選擇快照文件夾的位置。

技術分享圖片

圖4:快照文件夾

快照文件夾可以是計算機或網絡中的任何位置。 在分銷商上為它創建網絡共享是有意義的。 此示例使用“\\ WIN2008A \ ReplicationSnapshotFolder”。

快照文件夾的設置也需要授予適當的權限。 現在不需要太多細節,授予對文件夾本身的“Authenticated Users”(圖5)的寫訪問權限,並對共享上的“Everyone”(圖6)進行讀取訪問。 有關如何加強這一領域安全的更多信息將在本階段的更高級別中給出。

技術分享圖片

圖5:授予對快照文件夾的訪問權限

技術分享圖片

圖6:授予對快照文件夾共享的訪問權限

設置共享並將網絡路徑放入向導的輸入字段後,按“下一步”轉到圖7中所示的“分發數據庫”表單。

技術分享圖片

圖7:分發數據庫

在此處指定分發數據庫的名稱以及其數據和日誌文件的位置。 保留默認值並單擊“下一步”進入“發布者”屏幕(圖8)。

在“發布商”屏幕上,您可以讓潛在的發布商準備好使用此發布商。 我們將在同一個實例上安裝我們的發布者,因此您可以將默認值和“Next”保留為最終問題(圖9)。

技術分享圖片

圖8:準備發布者

技術分享圖片

圖9:向導操作

最後一個問題是您是否希望向導立即執行您的選擇,或者您是否希望向導創建將在以後手動執行的腳本。 再次,保留默認設置,最後一次單擊“下一步”。

現在,您將看到將要執行的操作列表,如圖10所示。 單擊“完成”以啟動該過程。

技術分享圖片

技術分享圖片

圖10:向導摘要

最後,圖11中顯示的屏幕提供了有關復制配置的進度和成功的信息。

技術分享圖片

圖11:執行狀態

第一個出版物

要創建發布,我們需要首先擁有一個包含要發布的表的數據庫。 執行SQL腳本1以為發布創建測試數據庫。

技術分享圖片
 1 USE MASTER;GOEXECUTE AS LOGIN = ‘SA‘;GOCREATE DATABASE ReplA;GOUSE ReplA;GOIF OBJECT_ID(‘dbo.Test‘) IS NOT NULL DROP TABLE dbo.Test;GOCREATE TABLE dbo.Test(
 2 
 3   Id INT IDENTITY(1,1) PRIMARY KEY,
 4 
 5   Data INT CONSTRAINT Test_Data_Dflt DEFAULT CHECKSUM(NEWID())
 6 
 7 );
 8 
 9 GOINSERT INTO dbo.Test DEFAULT VALUES;GO 1000USE MASTER;GO
10 
11 REVERT;GO
技術分享圖片

腳本1:為發布創建測試數據庫

現在您已準備好設置出版物。

在SSMS對象資源管理器中,打開“復制”文件夾,然後右鍵單擊“本地發布”。 在下拉菜單中選擇“New Publication ...”(圖12)。

技術分享圖片

圖12:新出版物

將出現“新建出版向導”的歡迎頁面,如圖13所示。

技術分享圖片

圖13:配置發布向導

點擊下一步”。

在“Publication Database”框中(圖14)選擇剛剛創建的數據庫ReplA,然後單擊“Next”。 “發布類型”屏幕(圖15)允許您選擇要使用的復制類型。 選擇“事務發布”,然後單擊“下一步”。

技術分享圖片

圖14:選擇發布數據庫

技術分享圖片

圖15:發布類型

現在您可以選擇哪些文章應該成為本出版物的一部分(圖16)。 選擇表dbo.Test並再次單擊“Next”以轉到“Filter Table Rows”對話框(圖17)。 過濾器是一個高級主題,將在此Stairway的更高級別中介紹,因此現在只需單擊“下一步”而不在此表單上進行選擇。

技術分享圖片

圖16:項目

技術分享圖片

圖17:表行

接下來的三個屏幕處理快照代理。 在第一個屏幕上(圖18),選擇“立即創建快照”,然後單擊“下一步”。 在“代理安全性”屏幕上(圖19),單擊“安全性設置”按鈕,然後在打開的表單上選擇“在SQL Server代理服務帳戶下運行”(圖20)。

技術分享圖片

圖18:快照計劃

技術分享圖片

圖19:代理安全性

技術分享圖片

圖20:選擇一個帳戶

單擊表單上的“確定”,然後單擊“代理安全性”屏幕上的“下一步”。

這將打開“向導操作”表單(圖21),供您選擇“創建出版物”。 最後一次單擊“下一步”將進入摘要屏幕(圖22)。

技術分享圖片

圖21:向導操作

技術分享圖片

圖22:向導摘要

在這裏,您需要為您的出版物選擇一個名稱。 在字段中鍵入“MyFirstPublication”,然後單擊“完成”以啟動該過程。 同樣,最後一個屏幕(圖23)顯示了進程完成時的進度信息和成功狀態

技術分享圖片

圖23:執行狀態

第一次訂閱

在大多數情況下,訂戶將位於不同的計算機上,但有些情況下您希望它位於同一實例上。 為了使這個例子簡單,我們將繼續保持同一個實例。 使用腳本2中的代碼:創建數據庫ReplB。

1 USE MASTER;GOEXECUTE AS LOGIN = ‘SA‘;GOCREATE DATABASE ReplB;GO
2 
3 REVERT;GO

腳本2:創建目標數據庫

我們現在轉到SSMS對象資源管理器並右鍵單擊“本地訂閱”並在下拉菜單中選擇“新訂閱...”(圖24)。

技術分享圖片

圖24:選擇新訂閱

“新訂閱向導”(圖25)歡迎您,並為您提供另一個練習按“下一步”按鈕的機會。

技術分享圖片

圖25:新建訂閱向導

在“發布”表單(圖26)中,選擇剛剛創建的發布,然後單擊“下一步”。 “分發代理位置”屏幕(圖27)允許您在推送和拉取訂閱之間進行選擇。 保留默認值並轉到“Subscribers”屏幕(圖28)。

技術分享圖片

圖26:選擇發布

技術分享圖片

圖27:推送或運行

技術分享圖片

圖28:目標數據庫

在這裏,您需要選擇服務器並選擇ReplB數據庫。

下一個屏幕允許您設置“分發代理安全性”(圖29)。

技術分享圖片

圖29:分發代理安全性

單擊右側的小省略號按鈕,然後在打開的表單中選擇“在SQL Server代理服務帳戶下運行”(圖30)。

技術分享圖片

圖30:選擇一個帳戶

單擊“確定”,然後單擊“下一步”,將進入“同步計劃”屏幕(圖31)。 選擇“連續運行”並轉到“初始化訂閱”屏幕(圖32)。 保留默認值,立即初始化,然後“Next”到“Wizard Actions”表單(圖33)。

技術分享圖片

圖31:同步計劃

技術分享圖片

圖32:初始化

技術分享圖片

圖33:向導操作

和以前一樣,保留默認值(創建訂閱)並單擊“下一步”可以進入摘要屏幕(圖34),其中包含要執行的操作列表。 單擊“完成”以啟動該過程,並等待最終表單上出現綠色成功徽標(圖35)。

技術分享圖片

圖34:向導摘要

技術分享圖片

圖35:執行狀態

成功!

Script1在ReplA中創建了表dbo.Test並在其中插入了1000行。 將初始快照傳輸到訂戶後,您將在ReplB中找到dbo.Test表,其中包含所有1000行。 完成設置後幾分鐘,您可以運行腳本3來驗證復制是否按預期將所有數據推送到訂閱者。 此腳本將ReplA.dbo.Test和ReplB.dbo.Test表連接在一起,以顯示正確復制的行。 您現在可以運行自己的進一步測試,可以在ReplA.dbo.Test中插入和更新行,並觀察這些更改神奇地出現在ReplB.dbo.Test中。

1 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 AFULL OUTER JOIN ReplB.dbo.Test BON A.Id = B.IdORDER BY A.Id DESC

腳本3:比較發布者和訂閱

摘要

SQL Server實例上的數據庫中的對象(稱為標記為要復制的發布者)稱為文章。 文章組合成出版物。 訂閱者通過訂閱更新文章發生的更改。 數據流經分發數據庫,該數據庫駐留在分發者身上。 發布者,分發者和訂閱者可以是相同或不同計算機上的相同實例或單獨實例。 源數據庫和目標數據庫可以相同(如果發布者和訂閱者實際上是相同的SQL Server實例),但分發數據庫必須是獨立的。v

SQL Server復制的階梯:第1級 - SQL Server復制簡介