SQL Server 複製(Replication) ——事務複製搭建

來源:互聯網
上載者:User

標籤:

本文示範如何搭建最基本的事務複製。

環境準備:虛擬機器2台:

伺服器名分別為RepA和RepB,RepA為發行伺服器,RepB為訂閱伺服器。均安裝WindowsServer 2008R2英文版(在外企工作的原因)。並確保兩台伺服器能互訪。

SQL Server:

在上面的虛擬機器中分別安裝SQLServer 2008 R2 x64 英文企業版。

示範資料庫:

微軟樣本資料庫AdventureWorks2008 R2

 

配置事務複製

複製的配置可以使用T-SQL來實現,但是所需的T-SQL及預存程序加起來可能上百個,所以這裡以SSMS操作來示範。

事務複製的配置需要對發行伺服器、散發者和訂閱伺服器都進行配置。本例使用發布和散發者均在一個執行個體上的情景:

下面是拓撲圖:

步驟一:檢查資料庫是否已經參與了複製環節,這一步為了保證避免重複對一個資料庫進行複製配置:

[sql] view plaincopyprint?
  1. USE master  
  2. go  
  3. SELECT  name ,  
  4.         CASEis_published  
  5.           WHEN0 THEN N‘未發布‘  
  6.           ELSE N‘發行‘  
  7.         END N‘是否發布‘ ,  
  8.         CASEis_subscribed  
  9.           WHEN0 THEN N‘未訂閱‘  
  10.           ELSE N‘已訂閱‘  
  11.         END N‘是否訂閱‘  
  12. FROM    sys.databases  
  13. WHERE   name = ‘AdventureWorks2008R2‘  


 

步驟二:配置散發者:

散發者是事務複製的核心。其他組件的運行都必須以散發者的可用為前提。所以是首要配置項。首先登入SSMS,這裡是RepA。然後右鍵:


 

這是執行個體層級的配置,可以單獨在獨立的執行個體上配置,但是為了成本考慮,很多實際環境都不會這樣用,所以我也把分發和發布部署在同一個執行個體上。配置步驟很簡單:

步驟2.1:配置分發嚮導:

這步直接跳過也是沒有問題的,簡單說一下,如果選擇了分發發布同一執行個體,則選擇上面的選項,如果是獨立的分發執行個體,就選擇下面的選項。由於本例使用分發與發布相同執行個體,所以這裡點擊下一步。

步驟2.2:配置分發代理:

 

從描述中得知,用於配置SQLServeragent是否在機器啟動後自動運行,作為正式應用,這裡幾乎沒有理由選擇手動啟動,所以直接下一步。大家是否好奇為什麼這裡就有一個可點擊的【Finish】?因為微軟系列的產品大部分都已經比較自動化,所以實際上都已經預設了一些配置,讀者可以直接點【Finish】看結果,如果沒有進一步的配置,SQLServer會預設使用下面的路徑來存放分發資料:

 

我們先回到上一步。

步驟2.3.快照檔案夾:

前面一文說過,所有類型的複製都以快照為基礎,事務複製中的快照用於初始化之用,所以所有的複製類型都要配置快照檔案夾,每次初始化,複製會把發行伺服器中配置為發布項的資料進行快照,然後存放到這個檔案夾中,根據pull還是push模式,再進行對這個檔案夾資料的處理。

需要說明的是這裡是【共用資料夾】,由於訂閱伺服器需要從這個檔案夾讀取資料,所以這個檔案夾最起碼要讓複製所涉及的帳號有讀的許可權,對於發行伺服器,還需要有寫的許可權。

這個快照檔案夾可以是原生任意路徑或者網路路徑,通常來說,這個路徑應該建立在散發者上的網際網路共用盤,本例中就是在發行伺服器上。比如使用下面中的路徑,然後賦予合適的許可權。在例子中,我使用在C盤下建立一個叫做ReplicationSnaeshotFolder的檔案夾,然後賦權,這裡建立一個叫做【授權使用者】(AuthenticatedUsers)的使用者組,然後賦予寫的許可權,添加【Everyone】,授予讀的許可權。

然後我們用這裡的路徑作為快照的共用資料夾路徑:

步驟2.4.配置散發資料庫:

這一步主要是配置散發資料庫存放在哪個地方,由於示範環境的限制,都放在C盤,如果可以,建議獨立分開,最起碼不要放在C盤,系統硬碟,你懂的。

步驟2.5:配置發行者(發行伺服器):

 

這裡可以配置分發者使用的帳號密碼,及其他混合項,Impersonatethe agent process account是指用sqlagent的帳號作為串連發行者的帳號。

另外,還可以在這裡指定是SQLServer的發布還是oracle的發布。

步驟2.6:配置完成

這裡可以選擇直接配置或者只產生指令碼,建議兩者都選擇,這樣一旦有問題,指令碼還是可以很快重建。最後點【完成】,讓SQLServer自己去配置。

最後可以看到系統資料庫檔案夾下出現了新資料庫:

步驟三:配置發布

3.1. 發布(Publication):

這是一個名詞,前面提到過,是一組項目(articles)的邏輯集合,每個發布可以包含一個或多重專案。發布中的配置項會影響它包含的所有項目,通過這種方式,可以減少管理對象所帶來的影響。其中最重要的配置項就是複製類型。由於本文用微軟樣本資料庫,所以這裡不用再建立測試資料庫。

3.2. 建立發布:

開啟圖中的部分,配置發布項:

3.3. 發行集資料庫:

這裡是選擇需要進行發布的資料庫。

3.4. 複製類型:

這裡我們選擇單純的事務發布,對於第三個選項,實際上就是【對等發布】,在後續文章中示範。

3.5. 選擇發布對象(article)

我們隨便找幾個,但是這裡注意,事務複製要求表上必須有主鍵,我隨便建立了一個簡單的表,沒有主鍵,在選擇的時候就能看到這種情況:

補充一下,這裡選表的時候,可以指定某些列,也可以全表發布。但是即使你沒勾選主鍵列,只要你選了表中的某些列,主鍵列也會被自動選上的。

3.6. 篩選表資料

上面一步是對列進行篩選,這一步是對行進行篩選,可以對已經選擇的列中資料進行條件式篩選,然後點下一步:

3.7. 配置快照引擎

這裡可以選擇在配置完畢之後馬上建立快照,並在訂閱初始化之前都保留這個快照,也可以選擇安排特定時間運行,比如系統閑時。也可以都不勾選。很多例子上都會勾選第一項,但是本人建議全部不勾選,特別是對大資料庫。這部分在後面的文章再介紹,這裡只做示範。

3.8. 代理安全性

 

本文選擇借用sqlagent來運行,出於安全性,通常會建立專用的域帳號或者本地帳號(非域環境)和安全的密碼,這樣不需要經常更改。

3.9. 完成發布:

這裡和配置分發一樣,可以儲存指令碼。

3.10. 定義發布項的名稱:

這個名稱是標識每個項目的名字,這裡我使用FirstPublication作為發布項的名稱

步驟4:配置訂閱

訂閱伺服器實際上可以在同一台機器,不過在實踐中,通常是分開伺服器,所以這裡也單獨一台伺服器,在完成發布之後,接下來就是配置訂閱,接收來自發布的資訊:

首先要保證兩台機器能互聯,另外,複製技術要求使用伺服器名,如果使用IP地址或者別名,會報錯,錯誤資訊如下,所以你需要使用伺服器名來登入,本例中使用RepB登入:

4.1. 配置訂閱項

現在連到訂閱伺服器,本例使用RepB,這裡的步驟基本上和配置發布項是一樣的

4.2.

這裡有個需要提醒的,如果兩個伺服器不在域中,由於DNS解析問題,可能需要修改host檔案,路徑在:

C:\Windows\System32\drivers\etc\host  把對方伺服器的IP加進去即可:

另外防火牆等問題都是要預先處理的。

串連之後,就能看到發布項,如:

4.3. 選擇分發代理位置

實際上就是選擇訂閱類型,在第一篇中已經提到它們的區別,這裡選擇pull模式:

4.4. 選擇訂閱者

實際上就是訂閱資料庫,這裡下拉框可以選擇新庫,或者現有的庫,如果選擇新庫,而且是庫比較大的時候,初始化的時候會很久,所以對於第一次部署,並且是大庫,建議先把發布庫的備份還原到本地,這樣就減少需要同步的資料量。由於是示範庫,我這裡建立一個不同名的庫,庫名也可以相同。

這裡建立一個叫Adventureworks_Rep的庫,注意圖32中的紅框部分,有時候覆制中的報錯是因為這裡沒有填寫,如果許可權要求不是很嚴格的話,可以填入sa。

 

4.5. 訂閱代理安全性:

這裡可以選擇專用的帳號,也可以使用SQLServer代理帳號,為了簡便,這裡選擇代理帳號,但是對於正式環境,還是建議使用專用帳號:

4.6. 同步計劃

這裡可以選擇是連續運行還是按需運行,因為是事務複製,我們實際上是希望能盡量即時同步,如果不是,其實合併式複寫也行,所以我們這裡選擇連續運行:

 

初始化訂閱:

可以選擇馬上進行初始化或者在第一次同步時初始化,這裡選擇馬上初始化,然後點下一步

由於在配置發布時沒有初始化,所以目前可以看到訂閱庫中沒有任何錶

我們只需要初始化發布項即可。

 

 

Errormessages:

·         Theprocess could not execute ‘sp_replcmds‘ on ‘REPA‘. (Source: MSSQL_REPL, Errornumber: MSSQL_REPL20011)
Get help: http://help/MSSQL_REPL20011

·         Cannotexecute as the database principal because the principal "dbo" doesnot exist, this type of principal cannot be impersonated, or you do not havepermission. (Source: MSSQLServer, Error number: 15517)
Get help: http://help/15517

The process could not execute‘sp_replcmds‘ on ‘REPA‘. (Source: MSSQL_REPL, Error number: MSSQL_REPL22037)
Get help: http://help/MSSQL_REPL22037

 

 

完成後可以看到本機訂閱中已經有訂閱項:

 

在配置的過程中,我們可能會遇到各類問題,但是絕大部分問題都是可以解決的,而且很多問題都是因為一個根源導致的,比如下面的兩個報錯:

報錯一:

英文描述:

Cannot execute as the database principal because theprincipal "dbo" does not exist, this type of principal cannot beimpersonated, or you do not have permission.

中文描述:

無法作為資料庫主體執行,因為主體 "dbo" 不存在、無法類比這種類型的主體,或您沒有所需的許可權。

已將資料庫上下文更改為 ‘AdventureWorks2008‘。 (Microsoft SQL Server,錯誤: 15517)

問題2:

SQL Server 2008 replication failing with: process couldnot execute ‘sp_replcmds‘

這兩個問題雖然會有其他原因引起,但是通常來說是因為發布的資料庫擁有者未填寫,此時可以查一下資料庫屬性->檔案->所有者如果沒有話,填個sa再試一次就可以。

SQL Server 複製(Replication) ——事務複製搭建

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.