译者注:本篇内容较多也是合并复制最重要的一个环节之一,因此配置Publisher将分成两个章节来翻译) 当
SQL SERVER Distributor配置完成后就可以全力去配置
SQL SERVER Publisher
Publisher是提供数据供设备同步复制的数据库,我们必须实现它。首先还是打开你的
SQL SERVER,在资源管理器这个窗口,展开
Replication这个文件夹,右击
Local Publications文件夹,然后选择
New Publication.
第一个界面还是向导界面,啥都不说了,直接点
Next.
在
Distributor这个界面,是选择一个服务器当作
Distributor,第一个按钮是选择本地刚刚发布的
Distributor,第二个按钮是选择其他服务器的,我们选择第二个,并单击
Add.
弹出来的页面会指导你去连接一个
SQL SERVER 服务器,我们选择上一篇刚刚配置的
SYNCIDSTRIBUTOR然后点击
Connect.
然后就会在刚刚选择的第二个按钮的框框下看到刚刚加进来的
SYNCDISTRIBUTOR了,我们选择它并点击
Next.
在
Administrative Password这个界面,这个密码是用于远程的
Distributor与本地的你所建立的
Publisher之间的验证,我们在密码跟确认密码处输入
P@ssword,然后点击
Next.
在
Publication Database这个界面,我们选择
ParkSurvey数据库用于发布,然后点击
Next.
在
Publication Type这个界面,因为我们是用于跟
SQL Mobile之间的同步,所以我们选择
Merge Publication然后点击
Next.
在
Subscriber Types这个界面,我们要指定一种数据库我们需要同发布数据库同步的,这里我们选择
SQL Server 2005 Compact Edition然后点击
Next.
在
Articles 这个界面显示的是发布的数据库要跟
SQL SERVER Compact同步的,这里你将会看到列出来的供发布的表、存储过程、还有用户自定义的函数,但是只有表才可以与
SQL SERVER Compact进行同步。如果你不想把整张表都发布出去供人家复制的话,你还可以筛选一些字段,这样可以减小快照跟
SQL SERVER Compact的大小,当然一些敏感的数据也都得以保护了。
当你单独选择一张表的时候你会发现右边出现了一个复选框
Highlighted table is download only.如果你选择这个复选框的话那就意味着这张同步到设备的数据库的数据将不会得到跟踪,这样能大大减小服务器跟设备数据库的空间。但这也就是表示订阅者不会改变这张表的数据,这样的前提当然是订阅者不会是增加或删除或更新这张表的记录。这里我们选择
Cities和
Parks这两张表,将它们都标识上
Highlighted table is download only,但
Survey不用这样子.然后我们选择一张表点击
Article Properties.
在这里你可以设置表的一些全局属性,下面就是这张表的所有属性。
(
译者注:这里是合并复制中比较重要的一部分,仔细看,你会有收获的) 仔细地看这张属性表你会发现你有五个主要的部分。第一个部分是Copy Objects and Settings to Subscriber,这里主要是设备从服务器复制表时是否复制主键、外键及关联、索引、触发器等等。这里最好都是用默认值,因为系统已经为你设置好了一切。 在第二个
Destination Object的属性列表中,点击
Syncchronization direction这个属性,有三个值供我们选择一个是
Bidirectional,一个是
Download- only to Subscriber,prohibit Subscriber changes,第三个值是
Download-only to Subscriber,allow Subscriber changes。第一个值是指服务器端会跟踪同步上来的这张表并允许设备端修改、更新、添加同步上来的这张表,第二个值是指服务器端不会跟踪同步上来的这张表,并不允许设备端对这张表做任何改变,第三个值是指服务器端不会跟踪同步上来的这张表但允许设备端对它进行更改。 我们先跳过
Identification这块来直接看
Identity Range Management,这个属性块只有当你的表中包含一个自增长的列时才会存在。这里我不要去修改它,而是我想让你理解它是做什么的。很多时候数据库的表中都会包含一个自增长的列来当做一个唯一的主键,但那里有一个问题就是当服务器将这张表同步给很多设备时,当它们都在表里新增一个列的时候,它们会在表里添加相同的主键但内容却是不一样的。当它们把这些修改提交回服务器时,这时就会发生主键冲突,于是就只有一个设备的修改能提交到服务器,其他设备的修改都不能提交到服务器来。SQL SERVER解决这个问题的方法是给每个订阅者1000个自增长列的的范围,打个比方一个设备的自增长的ID范围是1~1000,另外一个就可能是1001~2000.这样的话,我们的主键就不会再起冲突了。这样的话你就不用去担心主键会冲突了,当然了,你也可以修改1000的数值让它变得更大或者更小来满足你的需求。 接下来来看看
Merging Changes这个属性块,第一个属性你可以看到的是
Tracking level,默认的系统会最优化地帮你选择
Row-level tracking这个值,这表明然后有两个订阅者在相同的一行的任何一个字段同时 做了改变,
Merge Agent这个冲突管理器就会自动启动,两个订阅者中只有一个订阅者可以将修改更新至服务器数据库,另外的一个订阅者的修改则自动被加入了冲突表。如果选择
Column-level tracking这个值的话,它异味者如果两个订阅者修改的是同一行的不同列,那它们的修改都会被提交到供Publisher,这样的作用就是减少数据冲突。从性能上讲,
Row-level tracking的性能要好过
Column-level当你的表中不包含image、ntext、binary、or nvarchar(max)等类型的字段。 当我们点击
Resolver这个选项栏,或许你很惊讶,因为你并没有看到很多的内容,这个地方是选择一个管理冲突的工具,我没有选择自定义的冲突管理工具,因为我觉得默认的冲突管理器已经能够很好地解决我们的问题,选择
Cancel然后点击
Next.
Article lssues这个页面提示你一个标识着唯一列的项将被加入到
Publisher中的表。点击
Next.
(译者注:下一篇将讲述如何让特定的人同步特定的表)
![](https://i-blog.csdnimg.cn/blog_migrate/20375e25bdf6e0d36020605aa858a081.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/068b5536c8874c9b4cac60c7790da94b.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/98e79d7ffa643229fe67f4eb9c1add07.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/3f42ea930b6384419f38cf2cfba082b0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/17fa7c6170596f4c2acf6e7da77d90be.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/ac181c78e8ebe6a5ed0d84c7118d8cb6.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/0bbe9d2c503435d32a1fbed4e49bc177.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/d0355daa5752abde9c53925569795639.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/3ccda58cce4ecf25ec1d0ee8aef48579.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/5bcd5718ba62a880064981c4b8969ab0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/53181178ab6f3a99c595a0ab70c687d6.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/147339883452fc34362f6e0b680e6450.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f8eaf920f769296784fae2e437946a5.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7b87a2073ad6858ae93df0a48bef573b.gif)