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:數據庫)
(Figure5:事務發佈)
注意表必須有主鍵才能進行復制,選擇你必要的字段,這樣能夠減輕快照文件的大小和傳輸時間,並且在業務邏輯上更加安全,若是有須要,你還能夠對記錄進行過濾;
(Figure6_1:表字段)
(Figure6_2:存儲過程)
(Figure6_3:視圖)
(Figure6_4:用戶定義函數)
(Figure7:快照代理)
(Figure8:安全設置)
使用上面建立好的ReplicationUser賬號做爲鏈接到發佈服務器的賬號和密碼;
(Figure9:使用剛剛建立的賬號密碼)
(Figure10:建立發佈)
(Figure11:發佈名稱)
(Figure12:查看複製狀況)
B. 訂閱服務器配置
建立完發佈服務器(分發服務器也一塊兒建立了),接下來就能夠建立訂閱服務器了,下面是具體的步驟:
(Figure13:查找發佈服務器)
(Figure14:查找發佈服務器)
(Figure15:選擇發佈)
(Figure16:請求訂閱)
(Figure17:訂閱數據庫)
(Figure18:訂閱鏈接)
(Figure19:賬號密碼)
(Figure20:代理計劃)
(Figure21:初始化訂閱)
(Figure22:建立訂閱)
(Figure23:訂閱)
(Figure24:發佈服務器上的訂閱)
(Figure25:複製監視器)
(Figure26:訂閱數據庫新增的表)
(Figure27:表數據)
3、注意事項
1. 在SQL SERVER下實現發佈服務器和訂閱服務器的通訊正常(便可以互訪),打開1433端口,在防火牆中設置入站規則;
2. 發佈服務器與訂閱服務器的SQL Server Agent代理賬號必須設置的同樣,不然不能互訪;
3. 若是你但願在複製的過程當中一併複製非彙集索引,能夠對發佈屬性-項目進行以下設置,修改完以後須要從新生成快照;
(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、參考文獻