SQL Server2012高可用之事物複製(發佈訂閱)測試

image

 

(一)測試目的

目前公司使用的SQL SERVER 2012高可用環境爲主備模式,其中主庫可執行讀寫操作,備庫既不可寫也不可讀,即採用的高可用技術爲“數據庫鏡像”。存在的問題爲:開發人員需要登錄到生產服務器上去確認數據,無法保證數據安全。因此,需要搭建一種主備模式,保證備庫可讀,從而讓開發人員在不接觸生產環境的情況下也能通過備庫校驗數據的正確性。

 

(二)技術選擇

經過確認,SQL Server2012的高可用主要有以下方案:

高可用技術

優勢

劣勢

最終選擇

SQL Server集羣

多臺服務器組成一個集羣,可保證一個節點出故障,其它節點仍正常運行

集羣使用共享存儲,存儲故障會導致整個集羣出故障

不符合本次主備分離的特點。

日誌傳送

通過主庫的日誌恢復備庫,可保證主備庫數據一摸一樣

備份作業每隔一段時間觸發一次,所以不是實時的

日誌恢復有延遲,無法查到最新的數據

數據庫鏡像

可保證主備庫數據一摸一樣

鏡像數據庫是一個一直處於“恢復”狀態的數據庫,因此不能直接訪問

備庫無法訪問,不符合要求

複製-->快照複製

直接同步數據庫某一時刻的整個狀態

數據有延遲、需要保證整體數據量小,數據量大的時候速度非常慢

不符合要求

複製-->事務複製

通過日誌讀取代理和分發代理程序,將發佈服務器上的數據更改和架構修改幾乎實時傳遞給訂閱服務器;

暫時無

符合要求

複製-->合併複製

允許用戶同時修改訂閱服務器和發佈服務器上的數據,並把這些修改合併成一個統一的結果

暫時無

實際環境中主庫不需要同步備庫的變更,不符合要求

經過確認,使用複製技術中的事物複製來測試是否滿足需求。

    

(三)搭建步驟

測試基礎環境信息如下:

 

主庫

備庫

操作系統

Windows Server 2012 R2 64bit

Windows Server 2012 R2 64bit

數據庫版本

cn_sql_server_2012_enterprise_edition_x86_x64

cn_sql_server_2012_enterprise_edition_x86_x64

服務器名稱(IP)

WIN-PRIMARY(10.1.106.2)

WIN-STANDBY(10.1.106.3)

同步數據庫信息

masterdb

slavedb

 

(3.1)配置分發(主庫執行)

STEP1: 在SSMS“對象資源管理器”中選擇“複製”,右鍵“配置分發”,彈出“配置分發嚮導”,點擊“下一步”

wps42

STEP2: 分發服務器可以是當前服務器,也可以是其它服務器,這裏選擇當前服務器作爲分發服務器

wps43[1]

STEP3: 快照文件夾用於存放快照

wps44

該文件夾需要手動修改權限,最好直接給“Everyone”的權限

wps45

STEP4: 配置分發數據庫,默認即可

wps46

STEP5: 配置發佈服務器,默認即可

wps47

STEP6: 後續步驟默認即可

 

(3.2)創建發佈(主庫執行)

STEP1: 在SSMS“對象資源管理器”中選擇“複製”,點擊“本地發佈”,右鍵“新建發佈”

wps1

STEP2:選擇要發佈的數據庫,這裏選擇要發佈的數據庫,即要進行主備同步的數據庫。本次測試爲masterdb數據庫的所有表,選擇masterdb

wps2

STEP3:選擇發佈類型,這裏選擇事務發佈

wps3

STEP4:發佈項目,選擇要發佈的表。需要注意,要發佈的表必須要有主鍵,否則無法發佈。

wps4

STEP5:是否要過濾數據,這裏因爲要保持主備數據相同,不過濾,直接下一步。

wps5

STEP6:勾選“立即創建快照並使快照保持可用狀態,以初始化訂閱”

wps6

STEP7:代理安全性,選擇“安全設置”

wps7

wps8

STEP8:默認在嚮導結束時創建發佈

wps9

STEP9:填寫發佈名稱,點擊“完成”

wps10

STEP10:確認發佈成功

wps11

發佈成功後,可以在對象資源管理器的“複製”-->”本地發佈”下面找到新的發佈:

wps12

(3.3)創建訂閱(備庫執行)

STEP1:在備庫服務器上創建新的數據庫slavedb。在SSMS的“對象資源管理器”-->“數據庫”-->右鍵點擊“新建數據庫”,創建slavedb。

wps13

STEP2:選擇“複製”-->“本地訂閱”-->“新建訂閱”

wps14

STEP3:發佈。“發佈服務器”菜單選擇“<查找SQL Server發佈服務器...>”,在彈出的菜單中,填寫主數據庫的信息,然後“連接”,如下:

wps15

在“數據庫和發佈”中選擇主庫的發佈

wps16

STEP4:在分發代理位置中選擇“在分發服務器xxx上運行所有代理(推送訂閱)”

wps17

STEP5:訂閱服務器中選擇“訂閱數據庫”爲slavedb

wps18

STEP6:分發代理安全性,點擊紅框部分

wps19

如下圖設置分發代理安全性

wps20

STEP7:同步計劃,選擇“連續運行”

wps21

STEP8:初始化訂閱,選擇“立即”

wps22

STEP9:保持默認

wps23

wps24

STEP10:確認訂閱成功

wps25

刷新“本地訂閱”,即可看到剛剛創建的訂閱

wps26

(3.4)檢查數據同步狀態

檢查“對象資源管理器”-->“數據庫”-->“slavedb”-->“表”下面是否已經有表

wps27

檢查表中是否有數據

wps28

如果有表和數據,那麼說明數據已經同步過來。或者在主庫手動插入數據,看是否會同步到備庫,也是一個好辦法。

 

(四)數據庫操作對複製的影響

(4.1)添加新表(主庫操作)

結果:主庫添加新表,備庫並不會自動同步。

如果要同步,有3種方法:

方法一:在發佈服務器重新生成快照,重啓發布、分發作業

STEP1:在主庫上打開SSMS,點擊“複製”-->“本地發佈”,點擊要修改的發佈名稱“[masterdb]:publish_masterdb”-->右鍵“屬性”

wps29

STEP2:在“項目”中,去掉勾選“僅顯示列表中已選中的項目”,即可看到所有表,選擇新表,點擊確定,

wps30

STEP3:選擇發佈,重新初始化

wps31

wps32

STEP4:重啓快照代理和分發代理

首先確認本地發佈“publish_masterdb”的快照代理和分發代理的名稱。在“SQL Server代理”--“作業活動監視器”,找到“publish_masterdb”相關代理。

image

 

然後關閉快照代理和分發代理(停止作業),最後在開啓快照代理和分發代理(作業開始步驟...)

wps34

STEP5:確認備庫表是否同步過去

方法二:添加新表到原來的發佈中,然後重啓發布、分發作業

TEP1:在主庫上打開SSMS,點擊“複製”-->“本地發佈”,點擊要修改的發佈名稱“[masterdb]:publish_masterdb”-->右鍵“屬性”

wps35

STEP2:在“項目”中,去掉勾選“僅顯示列表中已選中的項目”,即可看到所有表,選擇新表,點擊確定,

wps36

STEP3:重啓快照代理和分發代理

首先確認本地發佈“publish_masterdb”的快照代理和分發代理的名稱。在“SQL Server代理”--“作業活動監視器”,找到“publish_masterdb”相關代理。

wps37

然後關閉快照代理和分發代理(停止作業),最後在開啓快照代理和分發代理(作業開始步驟...)

wps38

STEP4:確認備庫表是否同步過去

方法三:對新表新建發佈、訂閱

這裏以test10表爲例,將test10表同步到salvedb中。

STEP1:在主庫上對test10表新建事務發佈“p_masterdb_test10”

wps39

STEP2:在備庫上對“p_masterdb_test10”進行訂閱

wps40

STEP3:確認備庫表是否同步過去

三種方法使用總結:

方法

使用優劣勢

方法一:在發佈服務器重新生成快照,重啓發布、分發作業

優勢:能夠在同一個發佈中增加新表,管理規範、方便;

劣勢:重新初始化步驟會將主庫的所有數據重新同步到備庫,如果數據量很大,同步速度會較慢;

方法二:添加新表到原來的發佈中,然後重啓發布、分發作業

優勢:1.能夠在同一個發佈中增加新表,管理規範、方便;

        2.不需要重新生成快照,僅對新加的表增量更新,負載小

個人認爲該方法是最優的

方法三:對新表新建發佈、訂閱

優勢:直接對新表新建發佈訂閱,不影響原有的同步,對業務影響小;

劣勢:每次增加新表都需要新建發佈訂閱,管理上不規範;

(3.2)刪除表(主庫操作)

結果:主庫無法刪除正在同步的表。

drop table test01;

報錯:

消息 3724,級別 16,狀態 2,第 2 行

無法對 表'test01' 執行 刪除,因爲它正用於複製。

(3.3)修改表結構(主庫操作)

結果:①添加列:主庫添加列,備庫會自動添加列;②刪除列:主庫刪除列,備庫會自動刪除列;

(3.4)插入、更新、刪除數據(主庫操作)

結果:主庫插入、更新、刪除數據,備庫自動同步;

(3.5)truncate表(主庫操作)

結果:無法執行truncate操作;

truncate table test01;

消息 4711,級別 16,狀態 1,第 1 行

無法截斷表 'test01',因爲該表已爲複製發佈或者已啓用了變更數據捕獲。

(3.6)修改操作系統Administrator密碼(主庫操作)

結果:數據傳輸正常;

 

(四)如何監控

在SMSS中,點擊“複製”-->“啓動複製監視器”,即可看到所有的發佈、訂閱監視列表、代理,雙擊“訂閱監視列表”,即可看到具體的執行記錄。

wps41

 

(五)總結

如果使用事務複製:

1.對於要同步到備庫的表,必須要有主鍵;

2.被複制的表在主庫無法執行drop、truncate操作;

3.新添加表需要DBA重新手動將其加入到發佈中;

4.備庫僅僅作爲數據查詢使用,不具備主備切換的功能。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章