再前段echosong 寫了一遍關於mysql 數據同步實現業務讀寫分離的文章,今天咱們來看下SQL Server的復制訂閱實現數據的讀寫分離
比起mysql的復制,SQL server 復制相對強大
一、 名詞解釋
1、復制的 機構組成(類比報紙流通):
1)、發布服務器(報社出版)
生產維護數據源,審閱所有出版數據的更改 發送給 分發服務器(郵局)
2)、分發服務器 (郵局)
分發服務器包括分發數據庫,並且存儲元數據、歷史數據和事務。
3)、訂閱服務器(訂報人,讀者)
保持數據的副本,並接收對所修改出版的更改。取決於所實現的復制選項,可能還允許更新者更新數據,並將其復制回服務器或者其它訂閱者。
2、復制類型
1)快照復制
快照復制是完全按照數據和數據庫對象出現時的狀態來復制和分發它們的過程。快照復制不需要連續地監控數據變化,因為已發布數據的變化不被增量地傳播到訂閱服務器,而是周期性的被一次復制。 適用於 數據主要是靜態的,比如將數據倉庫復制到數據集市中一段時間內允許有已過時的數據拷貝的情況
2)事務復制
使用事務復制,初始快照數據將被傳播到訂閱服務器,因此該訂閱服務器就具有了一個所謂的初始負載,這是可以開始工作的內容。當出版服務器上發生數據修改時,這些單獨的事務會被及時捕獲並復制到訂閱服務器。並保留事務邊界,當所有的改變都被傳播后,所有訂閱服務器將具有與傳播服務器相同的值 需要數據修改經常在其發生的幾秒鍾內被傳播到訂閱服務器需要事務是原子性的 訂閱服務器在通常是連接到出版服務器上的 應用程序不能忍受訂閱服務器接收改變的高延遲
3)合並復制
合並復制允許一組站點自治工作,在線或離線。然后在將來的某個時刻,數據按照在多個已復制站點上發生的修改或插入情況被合並成一個統一的結果。在訂閱服務器上應用初始快照,作為其初始負載,然后SQL Server跟蹤在出版服務器上和訂閱服務器上已發布數據的更改。數據按照預先定義或調度的時間,或者按需在服務器間同步。然后更新被獨立應用在多個服務器上。這意味着相同的數據可能由出版服務器或多個訂閱服務器進行了更新,因而當數據更新合並時將發生沖突。 多個訂閱服務器需要在不同時刻更新數據,並將這些數據傳播到出版服務器和其他訂閱服務器。 訂閱服務器需要接收數據,脫機更改數據,然后將更改同步到出版服務器和其他訂閱服務器 應用程序的延遲需求可高可低 站點的自治性很關鍵
3、復制模式
1)、推模式(Push)
分發代理程序在分發服務器上運行,即為推模式
2)、拉模式(Pull)
分發代理在訂閱服務器運行,即為拉模式
二、工作流程
1、快照復制
1)、發布服務器,將要發布的數據庫整個做一個快照,
2)、訂閱服務器的快照代理程序把發布服務器的快照讀取過來,放在本地的快照文件夾內
3)、訂閱服務器的發布代理程序把快照文件夾中的快照發布到訂閱服務器上。歷史記錄和快照記錄在分發服務器中。
2、事務復制
1)、初始數據和架構(通過快照復制來完成),從這里可以體現出來快照復制,是所有復制的基礎 。快照復制在訂閱服務器上建立了訂閱數據庫。
2)、發布服務器的數據修改后,寫事務日志,
3)、分發服務器的日志讀取代理讀取發生改變的數據的事務日志,把這些事務日志保存在發布服務器的發布數據庫中。
4)、分發服務器的分發代理程序 將分發數據庫中的事務日志分發到各個訂閱服務器上,然后把歷史記錄和錯誤記錄在分發數據庫中
三、具體操作流程
1、發布復制(推送模式)
1)、展開SQL Server 2008 服務器下的 【復制】 節點,會發現有【本地發布】和【本地訂閱】兩個節點,右擊【本地發布】節點,選擇【新建發布】
2)、設置分發服務器和發布服務器為同一台(推送模式)
3)、選擇數據元位置
4、選擇同步的數據庫對象
5、發布復制類型
6、設置同步計划
7、設置代理安全性
8、發布完成取名字
2、訂閱復制
1)、右鍵點擊【本地訂閱】節點,打開,【新建訂閱向導】對話框
2)搜索發布服務器去訂閱
3)、由於上面發布的和分發的是同一台服務器所以選擇推送訂閱
4)、選擇訂閱接受的對象(也就是獲取數據的數據庫,上面發布了 test 庫 pce_admin_info,這里用本機的test1來接受,同步時如果沒有表會自動在test1庫創建表)
5)、設置連接安全性
6)后面一直默認點下一步,完成訂閱
3、查看效果
同步上面步驟,把 A服務器的 test 庫 的 pce_admin_info 表同步到 B服務器的 test1 ,在第一次執行訂閱后自動創建了表,之后會根據計划設置同步的更新表pce_admin_info
四、注意事項
1、無論是發布復制還是訂閱服務 一定要在sql server安裝的服務器本機操作,不能是遠程連接操作
2、將這個文件夾共享出來,然戶用共享文件夾的UNC路徑作為快照文件夾路徑。這個文件夾要賦予SQL Server Service和Agent Service讀寫權限。
3、sql server 另外一種鏡像實現數據副本,鏡像是只能主服務器讀寫,從服務器是不支持讀寫的,而復制是可以從服務器讀 主服務器寫。所以我們實現讀寫分離往往是通過數據庫的復制來實現。
4、UNC 可以做的網絡驅動映射或者FTP連接
5、再發布服務器設置訂閱的時候 系統會提示使用計算機名,而在不同的網絡內計算機名不可以直接訪問,這個時候需要設置別名,別名要注意64 client 和32client都要加
五、補充
同步復制的時候訂閱服務器會生成相應的表的刪除,修改,添加的存儲過來來執行數據
-->
左邊的存儲過程由右邊的調用存儲過程控制,選項可以選擇其他的就不會生成存儲過程
當我們業務需要 需要對存儲過程進行修改,我們修改存儲過程后,如果改變了源數據的結構,這個時候存儲過程又會初始化,如果我們想讓存儲過程保持不變可以做以下修改
上面右圖的true 改為false 就 ok