這兩天有一個同事在設計項目的時候考慮到數據量查詢和寫入都比較大,問我數據庫該怎麼設計,瞭解了他們的業務後,我給的建議是發佈一個訂閱的數據庫來分擔壓力,寫下本身的操做步驟分享給你們。sql
數據庫複製涉及數據庫
發佈服務器:
數據的來源服務器,維護源數據,決定哪些數據將被分發,檢測哪些數據發生了修改,並將這些信息提交給分發服務器。windows
分發服務器:
分發服務器負責把從發佈服務器拿來的數據傳送至訂閱服務器。安全
訂閱服務器:
訂閱服務器就是發佈服務器數據的副本,接收維護數據。服務器
訂閱類型
推訂閱
推訂閱是指由發佈服務器將全部發生修改過的數據複製給訂閱者,這種在數據同步性價比較高的場合,推薦使用推訂閱。
拉訂閱
拉訂閱是指訂閱服務器在通過一段時間就會向發佈服務器要求複製出版數據庫發生的變化的數據。網絡
發佈,分發,訂閱能夠部署在獨立的服務器上面也能夠部署在一臺sql server 上面,然而分開部署確定能提升性能。架構
複製代理:ide
(1) 快照代理
快照代理在分發者上建立並存儲快照文件,任務是:在分發數據庫中準備已發佈表的架構和初始數據以及其餘對象、存儲快照文件並記錄出版數據庫和訂閱服務器之間的同步信息,快照代理運行在分發者服務器上,並與出版者相鏈接。每個出版物都有本身的快照代理。與各類類型的複製一塊兒使用。性能
(2) 日誌閱讀代理
日誌讀取器代理與事務性複製一塊兒使用。它將發佈服務器上的事務日誌中標記爲複製的事務移至分發數據庫中。使用事務性複製發佈的每一個數據庫都有本身的日誌讀取器代理,該代理運行於分發服務器上並與發佈服務器鏈接(分發服務器與發佈服務器能夠是同一臺計算機)。測試
(3) 分發代理
分發代理與快照複製和事務性複製一塊兒使用。它將初始快照應用於訂閱服務器,並將分發數據庫中保存的事務移至訂閱服務器。分發代理既能夠運行於分發服務器(對於推送訂閱),也可運行於訂閱服務器(對於請求訂閱)。
(4) 合併代理:
合併代理與合併複製一塊兒使用。它將初始快照應用於訂閱服務器,並移動和協調所發生的增量數據更改。每一個合併訂閱都有本身的合併代理,該代理同時鏈接到發佈服務器和訂閱服務器並對它們進行更新。合併代理既能夠運行於分發服務器(對於推送訂閱),也能夠運行於訂閱服務器(對於請求訂閱)。默認狀況下,合併代理將訂閱服務器上的更改上載到發佈服務器,而後將發佈服務器上的更改下載到訂閱服務器。
(5) 隊列閱讀代理
隊列讀取器代理與包含排隊更新選項的事務性複製一塊兒使用。該代理運行於分發服務器,並將訂閱服務器上所作更改移回至發佈服務器。與分發代理和合並代理不一樣,只有一個隊列讀取器代理的實例爲給定分發數據庫的全部發布服務器和發佈提供服務。
複製類型:
SQL SEVER提供了三大類複製類型:快照複製、事務複製、合併複製。能夠在實際應用中使用相應的複製類型,每一種複製類型都在不一樣程序上實現數據的一致性。
(1) 快照複製
如其名字所言,快照複製指在某一時刻給出版數據庫中的出版數據照相,而後將數據複製到訂閱者服務器。快照複製實現較爲簡單,其所複製的只是某一時刻數據庫的瞬間數據,
快照複製是將整個出版物傳送給訂閱者,就是在某一時刻將出版數據進行一次「照相」,生成一個描述出版數據庫中數據的當前狀態的一個文件,而後在相應的時間將其複製到訂閱都的數據庫上,快照複製並非不停的監視出版數據庫中發生的變化狀況,它是對出版數據庫進行一次掃描,把全部出版數據中的數據從源數據庫送至目標數據庫,而不只僅是變化的數據。若是數據量很大,那麼要複製的數據就不少。所以對網絡資源要求很高,不只要有較快的傳輸速度,並且要保證傳輸的可靠性。
快照複製是最爲簡單的一種複製類型,可以在出版者和訂閱者之間保證數據的一致性。快照複製一般使用在如下場合:
在必定時間內出現大量的更改的操做,但數據總量不大,變化週期較長。
(2) 事務複製
快照複製是將整個數據集發送給訂閱服務器,因爲體積大而形成複製週期較長,會造成複製滯後問題。那麼事務複製使用事務日誌來生成將複製到訂閱服務器的事務,由於它只複製事務也就是變化,因此滯後也比快照複製低得多,由於將不斷地在訂閱服務器處獲得及時應用。
事務複製有三個組件:
快照代理,它生成架構,數據以及跟蹤複製過程所需的數據;
分發代理:它分發快照和隨後的命令;
日誌讀取器代理:它讀取發佈數據的事務日誌。
在事務複製中,當出版數據庫發生變化時,這種變化就會當即傳遞給訂閱者。並在較短期內完成(幾秒),而不是像快照複製那樣要通過很長一段時間間隔。所以,事務複製是一種接近實時地從源到目標分發數據的方法。因爲某種緣由事務複製的頻率較高。因此必須保證在訂閱者與出版者之間要有可靠的網絡鏈接。
(3) 合併複製
合併複製是爲移動用戶設計的,能夠在發佈服務器或是訂閱服務器處執行修改,在合併代理運行時,這些修改將同步,多用於發佈服務器與訂閱服務都修改數據的狀況下。工做原理以下:在要複製的每一個表上實現觸發器,並使用包含GUID列惟一標識要複製的表中的每一行。對其中的任何一個表進行修改時,都會將更改將記錄一個數據表中,在合併代理運行時,它收集數據表中的GUID,這些GUID指出了在發佈服務器和訂閱服務器處修改過的行。對於只在發佈服務器或是訂閱端修改的數據則直接進行相應操做,如INSERT,UPDATE,DELETE,若是雙方都有GUID則按照用戶指定的方式解決衝突,默認發佈服務器伏先。
配置複製:
不管是快照複製,事務性複製仍是合併複製,建立複製都要通過如下幾個步驟:
1. 建立發佈服務器。選擇要發佈的服務器。若是有條件的,也能夠分發服務器,在這裏咱們就將發佈服務器和分發服務器設置在同一臺計算機上。
2. 不管是發佈服務器仍是訂閱服務器必須開啓代理服務。
3. 建立一個發佈。即將須要的數據庫及對象發佈出來。
4. 選擇一個適合本身的發佈類型。
5. 設置複製代理及安全,即指定能夠運行代理的用戶賬號。
建立可使用此發佈的訂閱服務器。
測試服務器的版本是企業版 Enterprise Edition
Microsoft SQL Server 2005 - 9.00.4035.00 (X64) Nov 24 2008 16:17:31 Copyright (c) 1988-2005 Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 5.2 (Build 3790: Service Pack 2)
查看服務器的名是否和數據庫一致,不一致須要統一計算機名.
統計命名語句,統一完命名須要從新啓動數據庫。
一 .配置發佈
啓動SQL SERVER Agnet,在數據庫複製簡單下面點擊發布:
若是是第一次可能會出一些步驟,忽悠便可,選擇要發佈的數據庫
選擇複製的數據庫:
選擇複製的類型:
選擇要複製的表
選擇要過濾的字段
下面兩項請都選上
設置複製時間間隔
配置帳號
輸入windows 帳號和密碼
建立發佈
輸入發佈名字
二. 配置訂閱
新建訂閱,選擇發佈服務器和發佈數據庫
Push爲推送,pull 爲請求 通常設置爲請求。
設置帳號
設置爲連續運行
當即運行
建立訂閱
完成