這兩天有一個同事在設(shè)計項目的時候考慮到數(shù)據(jù)量查詢和寫入都比較大,問我數(shù)據(jù)庫該怎么設(shè)計,了解了他們的業(yè)務后,我給的建議是發(fā)布一個訂閱的數(shù)據(jù)庫來分擔壓力,寫下自己的操作步驟分享給大家。
數(shù)據(jù)庫復制涉及
發(fā)布服務器:
數(shù)據(jù)的來源服務器,維護源數(shù)據(jù),決定哪些數(shù)據(jù)將被分發(fā),檢測哪些數(shù)據(jù)發(fā)生了修改,并將這些信息提交給分發(fā)服務器。
分發(fā)服務器:
分發(fā)服務器負責把從發(fā)布服務器拿來的數(shù)據(jù)傳送至訂閱服務器。
訂閱服務器:
訂閱服務器就是發(fā)布服務器數(shù)據(jù)的副本,接收維護數(shù)據(jù)。
訂閱類型
推訂閱
推訂閱是指由發(fā)布服務器將所有發(fā)生修改過的數(shù)據(jù)復制給訂閱者,這種在數(shù)據(jù)同步性價比較高的場合,推薦使用推訂閱。
拉訂閱
拉訂閱是指訂閱服務器在經(jīng)過一段時間就會向發(fā)布服務器要求復制出版數(shù)據(jù)庫發(fā)生的變化的數(shù)據(jù)。
發(fā)布,分發(fā),訂閱可以部署在獨立的服務器上面也可以部署在一臺sql server 上面,然而分開部署肯定能提高性能。
復制代理:
(1)快照代理
快照代理在分發(fā)者上創(chuàng)建并存儲快照文件,任務是:在分發(fā)數(shù)據(jù)庫中準備已發(fā)布表的架構(gòu)和初始數(shù)據(jù)以及其他對象、存儲快照文件并記錄出版數(shù)據(jù)庫和訂閱服務器之間的同步信息,快照代理運行在分發(fā)者服務器上,并與出版者相連接。每一個出版物都有自己的快照代理。與各種類型的復制一起使用。
(2)日志閱讀代理
日志讀取器代理與事務性復制一起使用。它將發(fā)布服務器上的事務日志中標記為復制的事務移至分發(fā)數(shù)據(jù)庫中。使用事務性復制發(fā)布的每個數(shù)據(jù)庫都有自己的日志讀取器代理,該代理運行于分發(fā)服務器上并與發(fā)布服務器連接(分發(fā)服務器與發(fā)布服務器可以是同一臺計算機)。
(3)分發(fā)代理
分發(fā)代理與快照復制和事務性復制一起使用。它將初始快照應用于訂閱服務器,并將分發(fā)數(shù)據(jù)庫中保存的事務移至訂閱服務器。分發(fā)代理既可以運行于分發(fā)服務器(對于推送訂閱),也可運行于訂閱服務器(對于請求訂閱)。
(4)合并代理:
合并代理與合并復制一起使用。它將初始快照應用于訂閱服務器,并移動和協(xié)調(diào)所發(fā)生的增量數(shù)據(jù)更改。每個合并訂閱都有自己的合并代理,該代理同時連接到發(fā)布服務器和訂閱服務器并對它們進行更新。合并代理既可以運行于分發(fā)服務器(對于推送訂閱),也可以運行于訂閱服務器(對于請求訂閱)。默認情況下,合并代理將訂閱服務器上的更改上載到發(fā)布服務器,然后將發(fā)布服務器上的更改下載到訂閱服務器。
(5)隊列閱讀代理
隊列讀取器代理與包含排隊更新選項的事務性復制一起使用。該代理運行于分發(fā)服務器,并將訂閱服務器上所做更改移回至發(fā)布服務器。與分發(fā)代理和合并代理不同,只有一個隊列讀取器代理的實例為給定分發(fā)數(shù)據(jù)庫的所有發(fā)布服務器和發(fā)布提供服務。
復制類型:
SQL SEVER提供了三大類復制類型:快照復制、事務復制、合并復制。可以在實際應用中使用相應的復制類型,每一種復制類型都在不同程序上實現(xiàn)數(shù)據(jù)的一致性。
(1)快照復制
如其名字所言,快照復制指在某一時刻給出版數(shù)據(jù)庫中的出版數(shù)據(jù)照相,然后將數(shù)據(jù)復制到訂閱者服務器?煺諒椭茖崿F(xiàn)較為簡單,其所復制的只是某一時刻數(shù)據(jù)庫的瞬間數(shù)據(jù),
快照復制是將整個出版物傳送給訂閱者,就是在某一時刻將出版數(shù)據(jù)進行一次“照相”,生成一個描述出版數(shù)據(jù)庫中數(shù)據(jù)的當前狀態(tài)的一個文件,然后在相應的時間將其復制到訂閱都的數(shù)據(jù)庫上,快照復制并不是不停的監(jiān)視出版數(shù)據(jù)庫中發(fā)生的變化情況,它是對出版數(shù)據(jù)庫進行一次掃描,把所有出版數(shù)據(jù)中的數(shù)據(jù)從源數(shù)據(jù)庫送至目標數(shù)據(jù)庫,而不僅僅是變化的數(shù)據(jù)。如果數(shù)據(jù)量很大,那么要復制的數(shù)據(jù)就很多。因此對網(wǎng)絡(luò)資源要求很高,不僅要有較快的傳輸速度,而且要保證傳輸?shù)目煽啃浴?/P>
快照復制是最為簡單的一種復制類型,能夠在出版者和訂閱者之間保證數(shù)據(jù)的一致性?煺諒椭仆ǔJ褂迷谝韵聢龊希
在一定時間內(nèi)出現(xiàn)大量的更改的操作,但數(shù)據(jù)總量不大,變化周期較長。
(2)事務復制
快照復制是將整個數(shù)據(jù)集發(fā)送給訂閱服務器,由于體積大而造成復制周期較長,會形成復制滯后問題。那么事務復制使用事務日志來生成將復制到訂閱服務器的事務,因為它只復制事務也就是變化,所以滯后也比快照復制低得多,因為將不斷地在訂閱服務器處得到及時應用。
事務復制有三個組件:
快照代理,它生成架構(gòu),數(shù)據(jù)以及跟蹤復制過程所需的數(shù)據(jù);
分發(fā)代理:它分發(fā)快照和隨后的命令;
日志讀取器代理:它讀取發(fā)布數(shù)據(jù)的事務日志。
在事務復制中,當出版數(shù)據(jù)庫發(fā)生變化時,這種變化就會立即傳遞給訂閱者。并在較短時間內(nèi)完成(幾秒),而不是像快照復制那樣要經(jīng)過很長一段時間間隔。因此,事務復制是一種接近實時地從源到目標分發(fā)數(shù)據(jù)的方法。由于某種原因事務復制的頻率較高。所以必須保證在訂閱者與出版者之間要有可靠的網(wǎng)絡(luò)連接。
(3)合并復制
合并復制是為移動用戶設(shè)計的,可以在發(fā)布服務器或是訂閱服務器處執(zhí)行修改,在合并代理運行時,這些修改將同步,多用于發(fā)布服務器與訂閱服務都修改數(shù)據(jù)的情況下。工作原理如下:在要復制的每個表上實現(xiàn)觸發(fā)器,并使用包含GUID列唯一標識要復制的表中的每一行。對其中的任何一個表進行修改時,都會將更改將記錄一個數(shù)據(jù)表中,在合并代理運行時,它收集數(shù)據(jù)表中的GUID,這些GUID指出了在發(fā)布服務器和訂閱服務器處修改過的行。對于只在發(fā)布服務器或是訂閱端修改的數(shù)據(jù)則直接進行相應操作,如INSERT,UPDATE,DELETE,如果雙方都有GUID則按照用戶指定的方式解決沖突,默認發(fā)布服務器伏先。
配置復制:
無論是快照復制,事務性復制還是合并復制,創(chuàng)建復制都要經(jīng)過以下幾個步驟:
1.創(chuàng)建發(fā)布服務器。選擇要發(fā)布的服務器。如果有條件的,也可以分發(fā)服務器,在這里我們就將發(fā)布服務器和分發(fā)服務器設(shè)置在同一臺計算機上。
2.不論是發(fā)布服務器還是訂閱服務器必須開啟代理服務。
3.創(chuàng)建一個發(fā)布。即將需要的數(shù)據(jù)庫及對象發(fā)布出來。
4.選擇一個適合自己的發(fā)布類型。
5.設(shè)置復制代理及安全,即指定可以運行代理的用戶帳號。
創(chuàng)建可以使用此發(fā)布的訂閱服務器。
測試服務器的版本是企業(yè)版 EntERPrise Edition
- select @@version
- 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)
查看服務器的名是否和數(shù)據(jù)庫一致,不一致需要統(tǒng)一計算機名.
- select @@servername
統(tǒng)計命名語句,統(tǒng)一完命名需要重新啟動數(shù)據(jù)庫。
- if servERProperty('servername') <> @@servername
- begin
- declare @server sysname
- set @server = @@servername
- exec sp_dropserver @server = @server
- set @server = cast(serverproperty('servername') as sysname)
- exec sp_addserver @server = @server , @local = 'LOCAL'
- end
一 .配置發(fā)布
啟動SQL SERVER Agnet,在數(shù)據(jù)庫復制簡單下面點擊發(fā)布:
如果是第一次可能會出一些步驟,忽悠即可,選擇要發(fā)布的數(shù)據(jù)庫
選擇復制的數(shù)據(jù)庫:
選擇復制的類型:
選擇要復制的表
選擇要過濾的字段
下面兩項請都選上
設(shè)置復制時間間隔
配置賬號
輸入windows 賬號和密碼
創(chuàng)建發(fā)布
輸入發(fā)布名字
二. 配置訂閱
新建訂閱,選擇發(fā)布服務器和發(fā)布數(shù)據(jù)庫
Push為推送,pull 為請求 一般設(shè)置為請求。
設(shè)置賬號
設(shè)置為連續(xù)運行
立即運行
創(chuàng)建訂閱
完成
轉(zhuǎn)載請注明出處:拓步ERP資訊網(wǎng)http://www.ezxoed.cn/
本文標題:SQL Server 2005通過訂閱發(fā)布同步數(shù)據(jù)庫
本文網(wǎng)址:http://www.ezxoed.cn/html/support/1112164731.html