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