1. 程式人生 > >翻譯:Stairway to SQL Server Replication: Level 1 - Introduction to SQL Server Replication SQL Server複製的階梯:第1級 - SQL Server複製簡介

翻譯:Stairway to SQL Server Replication: Level 1 - Introduction to SQL Server Replication SQL Server複製的階梯:第1級 - SQL Server複製簡介

轉載自:Stairway to SQL Server Replication: Level 1 - Introduction to SQL Server Replication,Sebastian Meine,侵必刪

本系列
本文是Stairway系列的一部分:SQL Server複製的階梯                                                                                                                                                                                            SQL Replication可以解決執行資料庫驅動的應用程式中的許多問題。 釋出/訂閱者模型不是很容易理解,指令碼和監視複製系統的複雜性需要一些思考。 最後,這是一系列文章,它們負責製作所有型別的SQL Server Replication的無術語方法。

第1級:SQL Server複製簡介

主要條目:代表
發音:\?re-pl? - 'ka-sh?n \
功能:名詞
日期: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以為釋出建立測試資料庫。

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物件資源管理器中,開啟“複製”資料夾,然後右鍵單擊“本地釋出”。 在下拉選單中選擇“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。

USE MASTER;
GO
EXECUTE AS LOGIN = 'SA';
GO
CREATE DATABASE ReplB;
GO
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中。

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 Server例項上的資料庫中的物件(稱為標記為要複製的釋出者)稱為文章。 文章組合成出版物。 訂閱者通過訂閱更新文章發生的更改。 資料流經分發資料庫,該資料庫駐留在分發者身上。 釋出者,分發者和訂閱者可以是相同或不同計算機上的相同例項或單獨例項。 源資料庫和目標資料庫可以相同(如果釋出者和訂閱者實際上是相同的SQL Server例項),但分發資料庫必須是獨立的。