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