SQL Server 複製:事務發佈(讀寫分離)

1、背景html

  在複製的運用場景中,事務發佈是使用最爲普遍的,我遇到這樣一個場景:在YangJiaLeClub數據庫中有表、存儲過程、視圖、用戶定義函數,須要提供給其它程序讀取放入緩存,程序須要比較及時的獲取到這些數據,須要從權限和性能控制的角度出發,我採用了SQL Server的事務複製技術和timestamp,下面只講述事務複製的搭建過程;sql

 

2、實現過程數據庫

(一) 環境信息緩存

  操做系統 IP 服務器名稱 數據庫版本 數據庫名稱 數據庫賬號信息
發佈服務器 Windows 10 企業版  192.168.2.100 DESKTOP-SDIK64J SQL Server 2008 R2 YangJiaLeClub

sa/bwl安全

reg/bwl服務器

分發服務器 與發佈服務器同一臺機器
訂閱服務器1 Windows Server 2008r2 Enterprise 192.168.2.117 Win-DB-Slave1 SQL Server 2008 R2 YangJiaLeClub

sa/bwl架構

訂閱服務器2 Windows Server 2008r2 Enterprise 192.168.2.118 Win-DB-Slave2 SQL Server 2008 R2 YangJiaLeClub

sa/bwl併發

1.發佈服務器:負載均衡

 1.1 在防火牆中設置入棧規則,開放1433和1434端口分佈式

      

 

2.訂閱服務器:

2.1.Sql Native Client 10配置(32位)新建別名:

 

 2.Host 服務器名與IP映射(因爲發佈訂閱服務器名稱必須是:服務器+「\」+實例名訪問)

 目錄: C:\Windows\System32\drivers\etc

 

3.控制面板\用戶賬戶\憑據管理器

    建立憑據

 

 

 

(二) 搭建步驟

A. 發佈服務器配置

  首先在發佈數據庫和訂閱數據庫上建立相同的賬號和密碼(reg/bwl),而且設置YangJiaLeClub數據庫的安全對象,設置這樣的賬號的目的就是爲了和程序鏈接到數據庫的賬號區分開,能夠作權限上的控制,方便問題的排查;

--更改安全對象的全部權

ALTER AUTHORIZATION ON DATABASE::[YangJiaLeClub] TO [reg]

在F盤目錄下建立文件夾:F:\DB\Net\ReplData,並設置這個文件夾爲共享目錄,共享用戶爲biwl

 

(Figure1_1:文件夾權限)

這裏須要設置SQL Server Agent登錄賬號爲上面文件夾訪問用戶biwl(發佈服務器和訂閱服務器都須要創建biwl相同賬號和密碼設置SQLServer代理服務)

 

(Figure1_2:SQL Server Agent登錄賬號)

 

(Figure2:配置分發-分發服務器)

  若是你設置快照文件夾路徑爲:F:\DB\Net\ReplData,即便你的發佈服務器自己就是分發服務器,若是訂閱服務器是另一臺機器,那麼在請求(Pull)訂閱(若是是推送(Push)訂閱就沒有這個限制)模式下訂閱代理是沒法訪問到這個快照文件的;除非你發佈服務器、分發服務器和訂閱服務器都是同一臺機器;你應該設置快照文件夾路徑爲:\\DESKTOP-SDIK64J\ReplData;

 

(Figure3:快照文件夾)

(Figure4:數據庫)

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

image

(Figure5:事務發佈)

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

(Figure6_1:表字段)

 

(Figure6_2:存儲過程)

 

(Figure6_3:視圖)

 

(Figure6_4:用戶定義函數)

image

(Figure7:快照代理)

image

(Figure8:安全設置)

使用上面建立好的ReplicationUser賬號做爲鏈接到發佈服務器的賬號和密碼;

(Figure9:使用剛剛建立的賬號密碼)

image

(Figure10:建立發佈)

(Figure11:發佈名稱)

 

(Figure12:查看複製狀況)

 

B. 訂閱服務器配置

建立完發佈服務器(分發服務器也一塊兒建立了),接下來就能夠建立訂閱服務器了,下面是具體的步驟:

 

(Figure13:查找發佈服務器)

(Figure14:查找發佈服務器)

(Figure15:選擇發佈)

(Figure16:請求訂閱)

(Figure17:訂閱數據庫)

(Figure18:訂閱鏈接)

(Figure19:賬號密碼)

(Figure20:代理計劃)

(Figure21:初始化訂閱)

image

(Figure22:建立訂閱)

(Figure23:訂閱)

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

(Figure25:複製監視器)

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

(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複製入門(二)----複製的幾種模式

使用快照初始化訂閱

複製

相關文章
相關標籤/搜索