一步步教你配置SQLSERVER合并復制(五)配置Publisher(上)

字號:

當 SQL SERVER Distributor配置完成后就可以全力去配置 SQL SERVER PublisherPublisher是提供數(shù)據(jù)供設(shè)備同步復制的數(shù)據(jù)庫,我們必須實現(xiàn)它。首先還是打開你的SQL SERVER,在資源管理器這個窗口,展開Replication這個文件夾,右擊Local Publications文件夾,然后選擇 New Publication.
    第一個界面還是向?qū)Ы缑?,啥都不說了,直接點Next.
    在Distributor這個界面,是選擇一個服務(wù)器當作Distributor,第一個按鈕是選擇本地剛剛發(fā)布的Distributor,第二個按鈕是選擇其他服務(wù)器的,我們選擇第二個,并單擊Add.
    彈出來的頁面會指導你去連接一個SQL SERVER 服務(wù)器,我們選擇上一篇剛剛配置的SYNCIDSTRIBUTOR然后點擊Connect.
    然后就會在剛剛選擇的第二個按鈕的框框下看到剛剛加進來的SYNCDISTRIBUTOR了,我們選擇它并點擊Next.
    在Administrative Password這個界面,這個密碼是用于遠程的Distributor與本地的你所建立的Publisher之間的驗證,我們在密碼跟確認密碼處輸入P@ssword,然后點擊Next.
    在Publication Database這個界面,我們選擇ParkSurvey數(shù)據(jù)庫用于發(fā)布,然后點擊Next.
    在Publication Type這個界面,因為我們是用于跟SQL Mobile之間的同步,所以我們選擇Merge Publication然后點擊Next.
    在Subscriber Types這個界面,我們要指定一種數(shù)據(jù)庫我們需要同發(fā)布數(shù)據(jù)庫同步的,這里我們選擇SQL Server 2005 Compact Edition然后點擊Next.
    在Articles 這個界面顯示的是發(fā)布的數(shù)據(jù)庫要跟SQL SERVER Compact同步的,這里你將會看到列出來的供發(fā)布的表、存儲過程、還有用戶自定義的函數(shù),但是只有表才可以與SQL SERVER Compact進行同步。如果你不想把整張表都發(fā)布出去供人家復制的話,你還可以篩選一些字段,這樣可以減小快照跟SQL SERVER Compact的大小,當然一些敏感的數(shù)據(jù)也都得以保護了。
    當你單獨選擇一張表的時候你會發(fā)現(xiàn)右邊出現(xiàn)了一個復選框Highlighted table is download only.如果你選擇這個復選框的話那就意味著這張同步到設(shè)備的數(shù)據(jù)庫的數(shù)據(jù)將不會得到跟蹤,這樣能大大減小服務(wù)器跟設(shè)備數(shù)據(jù)庫的空間。但這也就是表示訂閱者不會改變這張表的數(shù)據(jù),這樣的前提當然是訂閱者不會是增加或刪除或更新這張表的記錄。這里我們選擇Cities和Parks這兩張表,將它們都標識上 Highlighted table is download only,但Survey不用這樣子.然后我們選擇一張表點擊 Article Properties.
    在這里你可以設(shè)置表的一些全局屬性,下面就是這張表的所有屬性。
    仔細地看這張屬性表你會發(fā)現(xiàn)你有五個主要的部分。第一個部分是Copy Objects and Settings to Subscriber,這里主要是設(shè)備從服務(wù)器復制表時是否復制主鍵、外鍵及關(guān)聯(lián)、索引、觸發(fā)器等等。這里都是用默認值,因為系統(tǒng)已經(jīng)為你設(shè)置好了一切。
    在第二個 Destination Object的屬性列表中,點擊 Syncchronization direction這個屬性,有三個值供我們選擇一個是 Bidirectional,一個是Download- only to Subscriber,prohibit Subscriber changes,第三個值是Download-only to Subscriber,allow Subscriber changes??荚嚧筇崾?第一個值是指服務(wù)器端會跟蹤同步上來的這張表并允許設(shè)備端修改、更新、添加同步上來的這張表,第二個值是指服務(wù)器端不會跟蹤同步上來的這張表,并不允許設(shè)備端對這張表做任何改變,第三個值是指服務(wù)器端不會跟蹤同步上來的這張表但允許設(shè)備端對它進行更改。
    我們先跳過Identification這塊來直接看 Identity Range Management,這個屬性塊只有當你的表中包含一個自增長的列時才會存在。這里我不要去修改它,而是我想讓你理解它是做什么的。很多時候數(shù)據(jù)庫的表中都會包含一個自增長的列來當做一個的主鍵,但那里有一個問題就是當服務(wù)器將這張表同步給很多設(shè)備時,當它們都在表里新增一個列的時候,它們會在表里添加相同的主鍵但內(nèi)容卻是不一樣的。當它們把這些修改提交回服務(wù)器時,這時就會發(fā)生主鍵沖突,于是就只有一個設(shè)備的修改能提交到服務(wù)器,其他設(shè)備的修改都不能提交到服務(wù)器來。SQL SERVER解決這個問題的方法是給每個訂閱者1000個自增長列的的范圍,打個比方一個設(shè)備的自增長的ID范圍是1~1000,另外一個就可能是1001~2000.這樣的話,我們的主鍵就不會再起沖突了。這樣的話你就不用去擔心主鍵會沖突了,當然了,你也可以修改1000的數(shù)值讓它變得更大或者更小來滿足你的需求。
    接下來來看看Merging Changes這個屬性塊,第一個屬性你可以看到的是Tracking level,默認的系統(tǒng)會化地幫你選擇Row-level tracking這個值,這表明然后有兩個訂閱者在相同的一行的任何一個字段同時
    做了改變,Merge Agent這個沖突管理器就會自動啟動,兩個訂閱者中只有一個訂閱者可以將修改更新至服務(wù)器數(shù)據(jù)庫,另外的一個訂閱者的修改則自動被加入了沖突表。如果選擇Column-level tracking這個值的話,它異味者如果兩個訂閱者修改的是同一行的不同列,那它們的修改都會被提交到供Publisher,這樣的作用就是減少數(shù)據(jù)沖突。從性能上講,Row-level tracking的性能要好過Column-level當你的表中不包含image、ntext、binary、or nvarchar(max)等類型的字段。
    當我們點擊Resolver這個選項欄,或許你很驚訝,因為你并沒有看到很多的內(nèi)容,這個地方是選擇一個管理沖突的工具,我沒有選擇自定義的沖突管理工具,因為我覺得默認的沖突管理器已經(jīng)能夠很好地解決我們的問題,選擇Cancel然后點擊Next.
    Article lssues這個頁面提示你一個標識著列的項將被加入到Publisher中的表。點擊Next