最近做的一個(gè)項(xiàng)目要獲取存在于其他服務(wù)器的一些數(shù)據(jù),為了安全起見,采用由其他“服務(wù)器”向我們服務(wù)器推送的方式實(shí)現(xiàn)。我們服務(wù)器使用的是sql server 2008 R2,其他“服務(wù)器”使用的都是SQL Server 2000,還都是運(yùn)行在Windows XP上的,整個(gè)過程遇到了一些問題,也參考了一些文檔,最終費(fèi)了好多事才算搞定。
【一、配置分發(fā)服務(wù)器】
SQLServer 2000的復(fù)制服務(wù)包括三個(gè)角色:發(fā)布服務(wù)器、分發(fā)服務(wù)器和訂閱服務(wù)器,關(guān)系如圖1所示。
![](/d/20211018/57bf0c8ae79c7bd7e11ead25c5dab37c.gif)
圖1
其中發(fā)布服務(wù)器(數(shù)據(jù)源服務(wù)器)負(fù)責(zé)將數(shù)據(jù)的改變(如快照或事務(wù)等)傳送到分發(fā)服務(wù)器中,由分發(fā)服務(wù)器將這些數(shù)據(jù)的改變分發(fā)到訂閱服務(wù)器(目標(biāo)服務(wù)器)中。其中分發(fā)服務(wù)器可以與發(fā)布服務(wù)器配置在一臺服務(wù)器中。
在配置分發(fā)服務(wù)器之前,首先需要打開SQL Server Agent服務(wù)并配置為自動啟動。除此之外,對于數(shù)據(jù)庫復(fù)制操作,SQL Server Agent不能使用系統(tǒng)賬戶登錄,而必須為本地賬戶,可以在“登錄”選項(xiàng)卡中,將“登錄身份”設(shè)置為“此賬戶”,選擇任一管理員賬戶即可(該管理員賬戶必須有密碼)。
然后就可以配置分發(fā)服務(wù)器了。在SQL Server 2000中,打開企業(yè)管理器,然后選擇已經(jīng)注冊的SQL Server服務(wù)器(此處為本機(jī)服務(wù)器),然后選擇“工具”菜單,選擇“向?qū)А?,出現(xiàn)如圖2所示的對話框。
![](/d/20211018/d1044babe783e258165f3fcafd670b0f.gif)
圖2
選擇“配置發(fā)布和分發(fā)向?qū)А?,確定后點(diǎn)擊下一步出現(xiàn)如圖3所示的對話框。
![](/d/20211018/f57d59e0a1a23920a37ed655f792a93f.gif)
圖3
如果需要在當(dāng)前數(shù)據(jù)庫服務(wù)器上創(chuàng)建分發(fā)服務(wù)器,選擇第一項(xiàng)即可,否則選擇第二項(xiàng),然后點(diǎn)擊下一步,出現(xiàn)如圖4所示的對話框。
![](/d/20211018/ab7c746cc1add232cedd57994b5bf0a5.gif)
圖4
這里需要注意的是,快照文件夾路徑必須為網(wǎng)絡(luò)路徑,即\\計(jì)算機(jī)名\盤符默認(rèn)共享\路徑,默認(rèn)系統(tǒng)已經(jīng)填好該項(xiàng),直接點(diǎn)擊下一步即可。如果出現(xiàn)出錯的情況,可以打開cmd,輸入“net share”查看當(dāng)前共享中是否有盤符的默認(rèn)共享,如果沒有的話,使用“net share c$”即可創(chuàng)建默認(rèn)共享,如果還不行可以訪問參考鏈接2。
成功后一路下一步即可配置好分發(fā)服務(wù)器。配置完分發(fā)服務(wù)器后,在注冊的數(shù)據(jù)庫服務(wù)器中就會出現(xiàn)“復(fù)制監(jiān)視器一項(xiàng)”。
【二、配置發(fā)布數(shù)據(jù)庫】
對于SQL Server 2000向2000推送數(shù)據(jù),接下來的操作可以繼續(xù)在企業(yè)管理器中完成,而對于SQL Server 2000向高版本SQL Server推送數(shù)據(jù),則需要安裝相應(yīng)版本的SQL Server Management Studio,否則在最后一步連接訂閱服務(wù)器時(shí)無法連接(出現(xiàn)“[sql-dmo]必須使用sql server2005 管理工具才能連接到此服務(wù)器”粗無)。我們的目標(biāo)服務(wù)器安裝的是SQL Server 2008 R2,所以需要安裝SQL Server 2008 R2 Management Studio。
安裝完成后首先連接到本機(jī)服務(wù)器,注意,服務(wù)器名稱不能使用“(local)”或者IP,必須使用本機(jī)計(jì)算機(jī)名,登錄方式使用SQL Server 身份認(rèn)證。
要配置待發(fā)布的數(shù)據(jù)庫,首先需要確保該數(shù)據(jù)庫的“恢復(fù)模式”為“完整”,右鍵單擊數(shù)據(jù)庫,選擇屬性,然后選擇“選項(xiàng)”,在“恢復(fù)模式”中設(shè)置為“完整”即可。
接下來就可以創(chuàng)建本地發(fā)布了,展開本機(jī)數(shù)據(jù)庫,展開“復(fù)制”,在“本地發(fā)布”右鍵單擊選擇“新建發(fā)布”,如圖5。
![](/d/20211018/c8dcc39f5369ad8438fb846a4bf77ca9.gif)
圖5
點(diǎn)擊下一步后選擇待發(fā)布的數(shù)據(jù)庫,點(diǎn)擊下一步即進(jìn)入選擇發(fā)布類型的對話框,如圖6所示。
![](/d/20211018/e7e73de1c40e0b012a1f59a60302717e.gif)
圖6
其中快照發(fā)布適合于表中無主鍵的數(shù)據(jù)表,每次復(fù)制時(shí)將數(shù)據(jù)全部復(fù)制過去;事務(wù)發(fā)布要求發(fā)布的數(shù)據(jù)表必須含有主鍵,否則無法復(fù)制。顯然當(dāng)數(shù)據(jù)量較大時(shí),使用后者更好一些。如果數(shù)據(jù)庫可以修改,建議將沒有主鍵的表增加一個(gè)自增主鍵。這里由于源數(shù)據(jù)表中沒有主鍵,也不能修改數(shù)據(jù)表結(jié)構(gòu),只能選擇“快照發(fā)布”。點(diǎn)擊下一步后出現(xiàn)選擇要發(fā)布的內(nèi)容的對話框,如果某個(gè)表不符合要求(如選擇的事務(wù)發(fā)布但沒有主鍵)則表名前出現(xiàn)禁止符號并且無法選擇,如圖7所示。
![](/d/20211018/821cf712a4d90ec7f3051cadfce1c3bf.gif)
圖7
再次點(diǎn)擊下一步后出現(xiàn)自定義篩選數(shù)據(jù)的對話框,如果不需要篩選數(shù)據(jù),點(diǎn)擊下一步進(jìn)入設(shè)置快照代理時(shí)間。快照代理即負(fù)責(zé)生成數(shù)據(jù)庫的修改,可以設(shè)置為按天、周、月重復(fù)執(zhí)行。這里每天推送一次,所以也只需要生成一次快照,如圖8所示。如果打算設(shè)置完訂閱后立即推送一次,可以選擇勾選第一個(gè)選項(xiàng)。
![](/d/20211018/e14c13aaf2a9d06f46d1d8fa36dbfc33.gif)
圖8
然后一路下一步即可完成發(fā)布的設(shè)置。
【三、配置訂閱】
完成上述兩步后就可以配置訂閱了,訂閱分為兩種,分別是推式訂閱和拉式訂閱,前者由分發(fā)服務(wù)器連接訂閱服務(wù)器,向訂閱服務(wù)器推送數(shù)據(jù);后者由訂閱服務(wù)器連接分發(fā)服務(wù)器,向分發(fā)服務(wù)器拉取數(shù)據(jù)。所以在完成上一步后,“本地發(fā)布”中即出現(xiàn)了新創(chuàng)建的發(fā)布,右鍵單擊選擇“新建訂閱”即可出現(xiàn)“新建訂閱向?qū)А睂υ捒颍c(diǎn)擊下一步后已經(jīng)選擇了當(dāng)前的訂閱,繼續(xù)點(diǎn)擊下一步,出現(xiàn)訂閱類型設(shè)置,如圖9。
![](/d/20211018/6a6be0bdb5540c501078e8acc3d88cf8.gif)
圖9
這里選擇“推式訂閱”,然后點(diǎn)擊下一步出現(xiàn)選擇訂閱服務(wù)器和訂閱數(shù)據(jù)庫的對話框,如圖10所示。
![](/d/20211018/43f8b45377f308e6f3abf51b66fff725.gif)
圖10
首先點(diǎn)擊“添加 SQL Server 訂閱服務(wù)器”添加訂閱服務(wù)器,出現(xiàn)“連接到服務(wù)器”對話框,需要注意的是,訂閱服務(wù)器也需要使用服務(wù)器名稱登錄。如果目標(biāo)服務(wù)器與本地位于同一個(gè)局域網(wǎng)內(nèi),使用目標(biāo)服務(wù)器名可以直接登錄;否則則需要設(shè)置hosts文件,添加目標(biāo)服務(wù)器IP與名稱的對應(yīng)關(guān)系才可以。登錄方式同樣使用SQL Server 身份認(rèn)證。注意,修改完hosts重啟之后才會生效。
添加完訂閱服務(wù)器后,如果訂閱服務(wù)器中有同名的數(shù)據(jù)庫,則會自動顯示在“訂閱數(shù)據(jù)庫”中。除此之外,訂閱數(shù)據(jù)庫需要登錄賬號有“db_owner”權(quán)限,否則不會顯示在“訂閱數(shù)據(jù)庫”中,當(dāng)然也可新建數(shù)據(jù)庫。點(diǎn)擊下一步后出現(xiàn)設(shè)置同步計(jì)劃的對話框,如圖11。
![](/d/20211018/3b902ca32869674aba4e8515cfdca06b.gif)
圖11
代理計(jì)劃可以設(shè)置為“連續(xù)運(yùn)行”、“僅按需運(yùn)行”或與創(chuàng)建發(fā)布時(shí)類似的自定義時(shí)間,其中“連續(xù)運(yùn)行”指的是一直檢查更新并推送到訂閱服務(wù)器中,“僅按需運(yùn)行”則需要手動執(zhí)行,“定義計(jì)劃>”與創(chuàng)建發(fā)布時(shí)相同,可以設(shè)置重復(fù)執(zhí)行的周期。如果每天只推送一次的話,可以設(shè)置在上一步快照代理執(zhí)行時(shí)間之后的一個(gè)事件,設(shè)置完同步計(jì)劃后下一步可以設(shè)置初始化時(shí)間,如圖12。
![](/d/20211018/2b7734b9c284c37f3c0ad6e1fbf36ec2.gif)
圖12
初始化時(shí)間可以設(shè)置為“立即”或“首次同步時(shí)”,如果上一步設(shè)置發(fā)布時(shí)選擇的立即生成快照,同時(shí)這里選擇“立即”初始化訂閱的話,那么向?qū)瓿珊髸⒓赐扑鸵淮螖?shù)據(jù);否則將按預(yù)設(shè)的計(jì)劃執(zhí)行。
按上述設(shè)置完成后遇到了一個(gè)問題,在執(zhí)行訂閱代理時(shí),出現(xiàn)“登錄失敗。該登錄名來自不受信任的域,不能與 Windows 身份驗(yàn)證一起使用”的錯誤。但是查看發(fā)現(xiàn)不論本機(jī)服務(wù)器還是訂閱服務(wù)器均使用SQL Server 身份認(rèn)證。后來進(jìn)入SQL Server 2000的企業(yè)管理器,在本機(jī)服務(wù)器的“復(fù)制”中右鍵單擊,選擇“配置發(fā)布、訂閱服務(wù)器和分發(fā)”,然后點(diǎn)擊訂閱服務(wù)器,在訂閱服務(wù)器的列表中點(diǎn)擊之前設(shè)置的訂閱服務(wù)器右側(cè)的“...”,發(fā)現(xiàn)登錄方式為“Windows 身份認(rèn)證”。重新將訂閱服務(wù)器的登錄配置為SQL Server 身份認(rèn)證即可解決該問題。
本文及文章中代碼均基于“署名-非商業(yè)性使用-相同方式共享 3.0”,文章歡迎轉(zhuǎn)載,但請您務(wù)必注明文章的作者和出處鏈接,如有疑問請私信我聯(lián)系!
您可能感興趣的文章:- 數(shù)據(jù)庫復(fù)制性能測試 推送模式性能測試
- .net 通過URL推送POST數(shù)據(jù)具體實(shí)現(xiàn)
- JavaScript數(shù)據(jù)推送Comet技術(shù)詳解
- Node.js實(shí)現(xiàn)數(shù)據(jù)推送