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;

image

(Figure1_1:文件夾權限)

這里需要設置SQL Server Agent登陸帳號為上面文件夾訪問用戶barefootadmin;

image

(Figure1_2:SQL Server Agent登陸帳號)

image

(Figure2:分發服務器)

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

image

(Figure3:快照文件夾)

image

(Figure4:數據庫)

  • 快照發布:隔一段時間會覆蓋訂閱服務器的數據庫,在訂閱服務器上做的修改同樣被覆蓋;
  • 事務發布:是一種接近實時地從源到目標分發數據的方法;
  • 具有可更新訂閱的事務發布:訂閱服務器可更新發布服務器的數據;
  • 合並發布:發布服務器和訂閱服務器的更新都會同步到對方,注意ID在合並發布上的沖突

image

(Figure5:事務發布)

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

image

(Figure6_1:表字段)

image

(Figure6_2:表字段)

image

(Figure6_3:表字段)

image

(Figure7:快照代理)

image

(Figure8:安全設置)

使用上面創建好的ReplicationUser帳號作為連接到發布服務器的帳號和密碼;

image

(Figure9:使用剛剛創建的帳號密碼)

image

(Figure10:創建發布)

image

(Figure11:發布名稱)

image

(Figure12:查看復制情況)

 

B. 訂閱服務器配置

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

image

(Figure13:查找發布服務器)

image

(Figure14:查找發布服務器)

image

(Figure15:選擇發布)

image

(Figure16:請求訂閱)

image

(Figure17:訂閱數據庫)

image

(Figure18:訂閱連接)

image

(Figure19:帳號密碼)

image

(Figure20:代理計划)

image

(Figure21:初始化訂閱)

image

(Figure22:創建訂閱)

image

(Figure23:訂閱)

image

(Figure24:發布服務器上的訂閱)

image

(Figure25:復制監視器)

image

(Figure26:訂閱數據庫新增的表)

image

(Figure27:表數據)

 

三、注意事項

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

2. 發布服務器與訂閱服務器的SQL Server Agent代理帳號必須設置的一樣,否則不能互訪;

3. 如果你希望在復制的過程中一並復制非聚集索引,可以對發布屬性-項目進行如下設置,修改完之后需要重新生成快照;

image

(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. 如果是跨網段(跨機房)的發布與訂閱,有沒辦法實現?需要注意什么?

解惑:可以通過修改host文件的方式搭建復制,請參考:SQL Server跨網段(跨機房)復制

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

解惑:在SQL Server配置管理器里建立別名,同樣可參考:SQL Server跨網段(跨機房)復制

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

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

 

五、參考文獻

快照復制

SQL Server 復制

timestamp (Transact-SQL)

SQL Server 復制訂閱與發布

SQL Server復制入門(一)----復制簡介

SQL Server復制入門(二)----復制的幾種模式

使用快照初始化訂閱

復制


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM