經過SQL Server 2008數據庫複製實現數據庫同步備份

SQL Server 2008數據庫複製是經過發佈/訂閱的機制進行多臺服務器之間的數據同步,咱們把它用於數據庫的同步備份。這裏的同步備份指的是備份服務器與主服務器進行實時數據同步,正常狀況下只使用主數據庫服務器,備份服務器只在主服務器出現故障時投入使用。它是一種優於文件備份的數據庫備份解決方案。php

在選擇數據庫同步備份解決方案時,咱們評估了兩種方式:SQL Server 2008的數據庫鏡像和SQL Server 2008數據庫複製。數據庫鏡像的優勢是系統能自動發現主服務器故障,而且自動切換至鏡像服務器。但缺點是配置複雜,鏡像數據庫中的數據不可見(在SQL Server Management Studio中,只能看到鏡像數據庫處於鏡像狀態,沒法進行任何數據庫操做,最簡單的查詢也不行。想眼見爲實,看看鏡像數據庫中的數據是否正確都不行。只有將鏡像數據庫切換主數據庫纔可見)。若是你要使用數據庫鏡像,強烈推薦killkill寫的SQL Server 2005 鏡像構建手冊,咱們就是按照這篇文章完成了數據庫鏡像部署測試。數據庫

最終,咱們選擇了SQL Server 2008數據庫複製。安全

下面經過一個示例和你們一塊兒學習一下如何部署SQL Server 2008數據庫複製。服務器

測試環境:Windows Server 2008 R2 + SQL Server 2008 R2(英文版),兩臺服務器,一臺主數據庫服務器CNBlogsDB1,一臺備份數據庫服務器CNBlogsDB2。網絡

複製原理:咱們採用的是基於快照的事務複製。主數據庫服務器生成快照,備份庫服務器讀取並加載該快照,而後不停地從主數據庫服務器複製事務日誌。見下圖:學習

圖片來自SQL Server聯機叢書測試

安裝與配置步驟:this

1、在兩臺服務器上安裝好SQL Server 2008 R2,主要安裝的組件:Database Engine(含SQL Server Replication),Management Tools。spa

2、主數據庫服務器(發佈服務器)的配置:代理

1. 在主數據庫服務器CNBlogsDB1新建示例數據庫CNBlogsDemo(注意Recovery mode要使用默認值Full,只有這個模式才能進行事務複製),而後創建一張測試表,好比:CNBlogsTest。

2. 設置存放快照的文件夾:

建立發佈以前,先設置一下存放快照的文件夾,建立發佈後會在該文件夾生成快照文件,訂閱服務器須要在初始化時加載該快照文件。

選擇Replication》Local Publications》屬性,在出現的窗口中選擇Publishers,以下圖:

點擊紅框處的按鈕,出現設置窗口:

在Default Snapshot Folder中設置快照文件存放路徑。

3. 在主數據庫服務器建立發佈:

在Replication》Local Publications中選擇New Publication,出現一個嚮導。先選擇要發佈的數據庫CNBlogsDemo,而後選擇發佈類型Transational publication,以下圖:

點擊Next,出現錯誤:

原來全部要複製的表都須要有主鍵,剛纔建CNBlogsTest表時,沒有建主鍵。建一下主鍵,並從新啓動向導就能夠了。

接着選擇要複製的對象:

點Next,Next,進入Snapshot Agent窗口,選擇Create a snapshot immediately and keep the snapshot available to initialize subscriptions,見下圖:

Next,進入Agent Security:

選擇Security Settings,進行相應的賬戶設置:

一個是設置運行Snapshot Agent的Windows賬戶,咱們這裏選擇與SQL Server Agent一樣的賬戶。

一個是設置鏈接發佈服務器的SQL賬戶,咱們這裏就用主數據庫服務器的sa賬戶。

繼續:OK,Next,Next,爲這個發佈起個名字:

 

點擊Finish,就開始正式建立發佈,建立成功就會出現以下窗口:

這時查看快照文件夾,就會看到unc文件夾,快照文件就在這個文件夾中。

這裏要考慮這樣一個問題,如何讓訂閱服務器經過網絡訪問這個快照文件夾。

咱們在這個問題上折騰了一些時間,原本想經過共享文件夾的方式,但又不想打開匿名共享,折騰了半天,沒搞定訂閱服務器訪問共享文件夾用戶驗證的問題。因而採用了FTP的方式,因此,下面介紹一下如何讓訂閱服務器經過FTP訪問快照文件。

4. 設置快照的FTP訪問

首先在主數據庫服務器上開通FTP服務,創建一個指向快照文件夾的FTP站點,設置好能夠遠程鏈接的FTP賬戶。而後在這臺發佈服務器設置一下FTP客戶端配置。配置方法以下:

在Replication》Local Publications中選擇剛纔建立的發佈[CNBlogsDemo]:CNBlogsDemo_Publication,選擇屬性》FTP Snapshot,以下圖:

 

選中Allow Subscribers to download snapshot files using FTP,並設置一下FTP客戶端鏈接參數,訂閱服務器就是經過這裏的設置鏈接FTP服務器的(注:Path from the FTP root folder的設置要和上圖同樣,設置爲:/ftp)。

點擊OK,這時會在快照文件夾中建立一個ftp文件夾,並在該文件夾中生成快照文件。

這樣,發佈服務器就配置好了,下面配置訂閱服務器。

3、備份數據庫服務器(訂閱服務器)的配置:

進入訂閱服務器CNBlogsDB2,建立與發佈服務器同名的數據庫CNBlogsDemo,使用徹底恢復模式。

在Replication》Local Subscriptions中選擇New Subscriptions,進入嚮導。

Next,進入選擇發佈服務器的窗口,選擇Find SQL Server Publisher,出現服務器鏈接窗口:

這裏要注意的是Server Name中必定要填寫發佈服務器的計算機名,若是計算機名鏈接不上,要在hosts文件中加一個IP地址解析。

成功鏈接發佈服務器以後,就能夠看到剛纔在主數據庫服務器上建立的發佈:

Next,進入「分發代理工做位置」的選擇窗口:

 

 

咱們這裏選擇pull subscriptions,把數據給拉過來,這樣主數據庫服務器的負擔會輕些。

Next,選擇訂閱服務器上的數據庫,以前咱們已經建好同名的數據庫,因此係統本身會找到。

Next,進入分發代理安全設置窗口:

點擊紅框內的按鈕,進入設置窗口:

設置如上圖,Connect to the Distributor處設置的是發佈服務器的sa賬戶。

OK, Next, Next, Next:

Next, Finish, Success:

備份數據庫的訂閱就建好了!

如今來瞧一瞧訂閱服務器CNBlogsDB2上的用於複製的數據庫CNBlogsDemo:

看!咱們在發佈服務器上創建的表CNBlogsTest複製過來了。

如今咱們去發佈服務器CNBlogsDB1上添加一條記錄:

再去訂閱服務器CNBlogsDB2瞧一瞧:

數據當即同步過來了!搞定!

    

遇到的問題:

在測試過程當中被兩個問題折騰了很長時間。

1)發佈服務器的Log Reader Agent不能啓動,錯誤信息:

· The process could not execute 'sp_replcmds' on 'YCSERVER006'. (Source: MSSQL_REPL, Error number: MSSQL_REPL20011) 
Get help: http://help/MSSQL_REPL20011 
· Cannot execute as the database principal because the principal "dbo" does not exist, this type of principal cannot be impersonated, or you do not have permission. (Source: MSSQLServer, Error number: 15517) 
Get help: http://help/15517 
· The process could not execute 'sp_replcmds' on 'YCSERVER006'. (Source: MSSQL_REPL, Error number: MSSQL_REPL22037) 
Get help: http://help/MSSQL_REPL22037

開始測試時,附加了一個現有數據庫進行復制遇到了這個問題,附加的是一下SQL Server 2005數據庫文件,Owner爲空,改成sa問題就解決了,以下圖:

2)第二個問題就是前面已經描述過的訂閱服務器訪問發佈服務器上的快照文件夾的問題,後來經過FTP的方式解決的。

對於SQL Server 2008數據庫複製,目前我就學習了這些,期待園子裏有這方面經驗的朋友也來分享一下,在分享過程當中你也會學到不少。

相關文章:

SQL Server 2008 數據庫同步的兩種方式 (發佈、訂閱)

相關文章
相關標籤/搜索