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