原文: sql server 本地複制訂閱 實作資料庫伺服器 讀寫分離
再前段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)、訂閱伺服器的釋出代理程式把快照檔案夾中的快照釋出到訂閱伺服器上。曆史記錄和快照記錄在分發伺服器中。
sql server 本地複制訂閱 實作資料庫伺服器 讀寫分離

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