SQL Server 複製:事務發佈

1、背景html

  在複製的運用場景中,事務發佈是使用最爲普遍的,我遇到這樣一個場景:在Task數據庫中有Basic與Group兩個表,須要提供這兩個表的部分字段給其它程序讀取放入緩存,程序須要比較及時的獲取到這些數據,做爲DBA你須要從權限和性能控制的角度出發,我採用了SQL Server的事務複製技術和timestamp,下面只講述事務複製的搭建過程;sql

 

2、實現過程數據庫

(一) 環境信息緩存

系統環境: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:表數據)

 

3、注意事項

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)。

 

4、疑問

1. SQL Server 只有在完整日誌模式下才能使用複製嘛?

解惑:在簡單模式下同樣可使用複製;

2. 若是是跨網段(跨機房)的發佈與訂閱,有沒辦法實現?須要注意什麼?

解惑:能夠經過修改host文件的方式搭建複製,請參考:SQL Server跨網段(跨機房)複製

3. 若是說上面的狀況能夠在host設置,可是若是有端口映射的,host也沒法設置吧?

解惑:在SQL Server配置管理器裏創建別名,一樣可參考:SQL Server跨網段(跨機房)複製

4. 訂閱的形式能夠選擇推送訂閱或者請求訂閱,請求訂閱下降分發服務器處理工做的開銷,這個開銷有多大呢?怎麼計算影響?

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

 

5、參考文獻

快照複製

SQL Server 複製

timestamp (Transact-SQL)

SQL Server 複製訂閱與發佈

SQL Server複製入門(一)----複製簡介

SQL Server複製入門(二)----複製的幾種模式

使用快照初始化訂閱

複製

相關文章
相關標籤/搜索