深入淺出SQL Server Replication第三篇:事物復制實戰-建立Publisher
對於很多的SQL Server DBA而言,Replication不是什么新鮮的事物了,也是大家常常說的“復制”,很多的朋友已經在項目中使用。正如其他技術一樣:有人可以使用的好,有人會抱怨技術不行。
我們AgileSharp團隊也經過了不少高可用的案例, Replication還是非常有價值的。因此,我們整理了很多的資源,我們決定發布一系列的Replication文章,一是為了幫助大家了解Replication,另外也是為以后的講述高可用做個鋪墊。
在之前的文章中,我們已經對Replication做了總體的介紹,而且也講述了如何配置Distributor。那么在本篇文章中,我們將會講述如何配置Publisher。
Publisher可以看出是數據產生的源頭,也是Replication的核心,因為只有Publisher產生了變化,其他的組件的運行才有意義。可以想象得到:一個Publisher可以有很多的Publication,也就是說,一個發布服務器可以有多個發布。其實這一點很好的理解。
這一點拿生活的圖書訂閱就很好解釋了:我們不可能對出版社的所有書都感興趣,我們只是訂閱自己喜歡的書籍,而出版社同時又為很多的讀者提供訂閱服務器,即發布很多不同的書。
同理,因為一個Publisher發布服務器就是一個數據庫實例,這個實例中有多的對象是變化的,如表。但是很多的訂閱服務器並不是對所有的這些變化都感興趣,只對部分感興趣,所以,我們可以在這個發布服務器上面創建多個Publication發布,從而滿足不同的訂閱服務器。
在每一個Publication發布中有包含很多的Aritcle(項目),我們知道:項目用於標識發布中包含的數據庫對象。一次發布可以包含不同類型的項目,包括表、視圖、存儲過程和其他對象。當把表作為項目發布時,可以用篩選器限制發送到訂閱服務器的數據的列和行。
下面,就帶領大家一起創建一個Publication。
擇項目(Articles)
在上面的向導中選擇了Publication的類型之后,接下來就是要選擇把那些對象作為Article發布出去。一般而言,一個Article就是指代數據庫中的一個對象。在下圖中,在Articles向導頁中列出了可以發布的所有的對象:表,存儲過程,視圖,函數。
很多的時候,當我們的Articles都是選擇表,因為我們要把表中的改變的數據發布出去。對於表,我們也有更多的選擇,例如選擇那些字段,因為可能在表中有些數據是不變的,此時我們只要選擇那些數據常常改變的字段,減少不必要的數據傳輸。如圖:
另外,我們還可以點擊”Aritlces Properties”來設置更多有關Articles的選項,如圖:
那么,這里需要注意的就是:我們可以同時為很多的Article設置選項,也可以為某一個Article設置。
如果我們的選擇的Articles中包含表,那么我們可以在向導的下一步對表添加一些過濾條件,如圖所示:
Snapshot快照
在上面選擇和配置了Articles之后,下面就要思考一個“雞生蛋,蛋生雞”的問題:既然是把Publisher中的數據同步到Subscriber中,那么,在Subscriber上面首先一定要存在一個和Publisher一樣的數據庫,之后才能把Publisher中的改變同步過去。
在向導中的這個Snapshot步驟就是來在Subscriber中創建一個現有數據庫的快照的,創建快照的過程可以在立刻進行,也可以在向導完成之后在某個時刻運行,如圖:
在這里又有一些點需要注意。建立一個快照的時候,我們的Publication選擇的那些表會被加上鎖,如果那些表很大,那么這個加鎖的過程會很長,導致對表的讀寫都延時,而且會進行大量的讀寫日志的操作,從而消耗大量的CPU,磁盤I/O等資源。另外,如果表過大,在傳輸的過程中會嚴重消耗網絡資源,可能導致外部對數據庫的訪問被阻塞。
安全設置
設置了快照之后,下一步就要設置運行Publication的代理進程采用何種的身份進行運行。如圖:
在事務復制的Publication中涉及到的兩個代理分別是快照代理和日志讀取代理。
快照代理的任務就是把Publication中的數據移動到之間在Distributor中設置的快照文件夾和distribution數據庫中。為了實現這些操作,這里設置的用戶在publication涉及到的數據庫和distribution數據庫中都必須在db_owner角色中。而起這個用戶還必須對快照文件夾有寫的權限。
日志讀取代理主要用來把publication中的數據復制到distribution中,但是這個代理不需要訪問快照文件夾。所以,日志讀取代理的這個用戶只要在distribution數據庫中處於db_owner的角色就行了。
我們可以通過點擊“Security Setting”進行更多的設置,如圖:
設置完成之后,點擊下一步,直到完成。
最后結果如圖所示:
潛在問題分析
大家從上面的操作可以知道,建立一個Replication的應用需要花很多的步驟,步驟越多,可能出現的問題也就越多。其中最有可能出現問題的地方就是安全設置那一塊。所以,在配置之前已經要把用戶和對應的角色分配好,一般的建議是在采用SQL Server驗證方式來連接。