天天看點

SQL Server 複制:事務釋出

一、背景

  在複制的運用場景中,事務釋出是使用最為廣泛的,我遇到這樣一個場景:在Task資料庫中有Basic與Group兩個表,需要提供這兩個表的部分字段給其它程式讀取放入緩存,程式需要比較及時的擷取到這些資料,作為DBA你需要從權限和性能控制的角度出發,我采用了SQL Server的事務複制技術和timestamp,下面隻講述事務複制的搭建過程;

二、實作過程

(一) 環境資訊

系統環境:Windows Server 2008 + SQL Server 2008 R2

釋出伺服器:192.168.1.151,伺服器名稱:USER-H2B2A89PEK

分發伺服器:與釋出伺服器同一台機器

訂閱伺服器:192.168.1.152,伺服器名稱:USER-FJMO8L052U

釋出資料庫:Task

訂閱資料庫:TaskSiteInfo

資料庫帳号:ReplicationUser/ ReplicationPassword

(二) 搭建步驟

A. 釋出伺服器配置

  首先在釋出資料庫和訂閱資料庫上建立相同的帳号和密碼(ReplicationUser/ ReplicationPassword),并且設定Task資料庫的安全對象,設定這樣的帳号的目的就是為了和程式連接配接到資料庫的帳号區分開,可以做權限上的控制,友善問題的排查;

--更改安全對象的所有權

ALTER AUTHORIZATION ON DATABASE::[Task] TO [ReplicationUser]

在E盤目錄下建立檔案夾:E:\ReplData,并設定這個檔案夾為共享目錄,共享使用者為barefootadmin;

SQL Server 複制:事務釋出

(Figure1_1:檔案夾權限)

這裡需要設定SQL Server Agent登陸帳号為上面檔案夾通路使用者barefootadmin;

SQL Server 複制:事務釋出

(Figure1_2:SQL Server Agent登陸帳号)

SQL Server 複制:事務釋出

(Figure2:分發伺服器)

  如果你設定快照檔案夾路徑為:E:\ReplData,即使你的釋出伺服器本身就是分發伺服器,如果訂閱伺服器是另外一台機器,那麼在請求(Pull)訂閱(如果是推送(Push)訂閱就沒有這個限制)模式下訂閱代理是無法通路到這個快照檔案的;除非你釋出伺服器、分發伺服器和訂閱伺服器都是同一台機器;你應該設定快照檔案夾路徑為:\\USER-H2B2A89PEK\ ReplData;

SQL Server 複制:事務釋出

(Figure3:快照檔案夾)

SQL Server 複制:事務釋出

(Figure4:資料庫)

快照釋出:隔一段時間會覆寫訂閱伺服器的資料庫,在訂閱伺服器上做的修改同樣被覆寫;

事務釋出:是一種接近實時地從源到目标分發資料的方法;

具有可更新訂閱的事務釋出:訂閱伺服器可更新釋出伺服器的資料;

合并釋出:釋出伺服器和訂閱伺服器的更新都會同步到對方,注意ID在合并釋出上的沖突

SQL Server 複制:事務釋出

(Figure5:事務釋出)

注意表必須有主鍵才能進行複制,選擇你必要的字段,這樣可以減輕快照檔案的大小和傳輸時間,而且在業務邏輯上更加安全,如果有需要,你還可以對記錄進行過濾;

SQL Server 複制:事務釋出

(Figure6_1:表字段)

SQL Server 複制:事務釋出

(Figure6_2:表字段)

SQL Server 複制:事務釋出

(Figure6_3:表字段)

SQL Server 複制:事務釋出

(Figure7:快照代理)

SQL Server 複制:事務釋出

(Figure8:安全設定)

使用上面建立好的ReplicationUser帳号作為連接配接到釋出伺服器的帳号和密碼;

SQL Server 複制:事務釋出

(Figure9:使用剛剛建立的帳号密碼)

SQL Server 複制:事務釋出

(Figure10:建立釋出)

SQL Server 複制:事務釋出

(Figure11:釋出名稱)

SQL Server 複制:事務釋出

(Figure12:檢視複制情況)

B. 訂閱伺服器配置

建立完釋出伺服器(分發伺服器也一起建立了),接下來就可以建立訂閱伺服器了,下面是具體的步驟:

SQL Server 複制:事務釋出

(Figure13:查找釋出伺服器)

SQL Server 複制:事務釋出

(Figure14:查找釋出伺服器)

SQL Server 複制:事務釋出

(Figure15:選擇釋出)

SQL Server 複制:事務釋出

(Figure16:請求訂閱)

SQL Server 複制:事務釋出

(Figure17:訂閱資料庫)

SQL Server 複制:事務釋出

(Figure18:訂閱連接配接)

SQL Server 複制:事務釋出

(Figure19:帳号密碼)

SQL Server 複制:事務釋出

(Figure20:代理計劃)

SQL Server 複制:事務釋出

(Figure21:初始化訂閱)

SQL Server 複制:事務釋出

(Figure22:建立訂閱)

SQL Server 複制:事務釋出

(Figure23:訂閱)

SQL Server 複制:事務釋出

(Figure24:釋出伺服器上的訂閱)

SQL Server 複制:事務釋出

(Figure25:複制螢幕)

SQL Server 複制:事務釋出

(Figure26:訂閱資料庫新增的表)

SQL Server 複制:事務釋出

(Figure27:表資料)

三、注意事項

1. 在SQL SERVER下實作釋出伺服器和訂閱伺服器的通信正常(即可以互訪),打開1433端口,在防火牆中設定入站規則;

2. 釋出伺服器與訂閱伺服器的SQL Server Agent代理帳号必須設定的一樣,否則不能互訪;

3. 如果你希望在複制的過程中一并複制非聚集索引,可以對釋出屬性-項目進行如下設定,修改完之後需要重新生成快照;

SQL Server 複制:事務釋出

(Figure28:非聚集索引複制)

4. 複制代理:快照代理(snapshot agent) 分布式代理(Distribution agent)日志讀代理(log Reader agent) 合并代理(Merge agent) 隊列讀代理(Queue Reader Agent)

5. 适合使用複制的一些場景包括:

1) 負載均衡:通過将資料複制到其它資料庫伺服器來減少目前伺服器的負載,比如說最典型的應用就是分發資料來分離OLTP和OLAP環境;

2) 分區:将經常使用的資料和曆史資料隔離,将曆史資料複制到其它資料庫中;

3) 授權:将一部分資料提供給需要使用資料的人,以供其使用;

4) 資料合并:每個區域都有其各自的資料,将其資料進行合并。比如一個大公司,每個地區都有其各自的銷售資料,總部需要彙總這些資料;

5) 故障轉移:複制所有資料,以便故障時進行轉移;

6. 快照複制或事務複制生成快照檔案的類型有:

架構 (.sch)、資料 (.bcp)、限制和索引 (.dri)、限制 (.idx)、觸發器 (.trg)(隻用于更新訂閱伺服器)、壓縮的快照檔案 (.cab)。

四、疑問

1. SQL Server 隻有在完整日志模式下才能使用複制嘛?

解惑:在簡單模式下一樣可以使用複制;

2. 如果是跨網段(跨機房)的釋出與訂閱,有沒辦法實作?需要注意什麼?

3. 如果說上面的情況可以在host設定,但是如果有端口映射的,host也無法設定吧?

4. 訂閱的形式可以選擇推送訂閱或者請求訂閱,請求訂閱降低分發伺服器處理工作的開銷,這個開銷有多大呢?怎麼計算影響?

解惑:隻有在有很多訂閱伺服器的時候才比較明顯,推送訂閱與請求訂閱更大的差別是在管理方面的不同;

五、參考文獻

<a href="http://technet.microsoft.com/zh-cn/library/ms151832.aspx">快照複制</a>

<a href="http://technet.microsoft.com/zh-cn/library/ms151198.aspx">SQL Server 複制</a>

<a href="http://msdn.microsoft.com/zh-cn/library/ms182776(SQL.90).aspx">timestamp (Transact-SQL)</a>

<a href="http://www.cnblogs.com/yuqilin/archive/2011/04/28/2031274.html">SQL Server 複制訂閱與釋出</a>

<a href="http://www.cnblogs.com/CareySon/archive/2012/06/20/IntroductToSQLServerReplicationPart1.html">SQL Server複制入門(一)----複制簡介</a>

<a href="http://www.cnblogs.com/CareySon/archive/2012/06/25/IntroductToSQLServerReplicationPart2.html">SQL Server複制入門(二)----複制的幾種模式</a>

<a href="http://technet.microsoft.com/zh-cn/library/ms151795(v=sql.105).aspx">使用快照初始化訂閱</a>

<a href="http://www.cnblogs.com/stswordman/tag/replication/">複制</a>