sql server 合并复制(Merge Replication)
[ 2006-04-23 22:46:08 | 作者: progame ]
sql server的复制(replication)真是会让人头疼,尤其是数据结构改变后的同步
先说一下如何单向同步,在代理属性中第二步的run agent中通过加命令参数exchangetype来改变,1为uploading,表示只从订阅者上传到发布者,2为downloading,表示只从发布者更新到订阅者,3为bidirectional,表示双向同步,即默认的同步方式。
如果在数据库结构改变后继续同步,可以使用取消同步之前生成的sql脚本一次运行(但我怀疑这样是有问题的),前提是包括订阅脚本一起运行,否则的话就必须在订阅时选择初始化结构和数据,因为不然的话,会报说发布的数据库中没有唯一的rowguidcol,我就奇怪了,为什么不能在没有任何订阅者的情况下做一个快照,这样的话就会自动添加这个列了。
因为我们更新数据库结构时,会将rowguidcol这个列给删除的,这样就导致我下一次再建立同步时又得初始化所有的订阅者,然而我并不希望publisher的数据都更新到subscriber,使用行过滤的办法的话我又得对每个subscriber做不同的发布,这真是一个难题。
解决方法,在建立数据库时,添加属性rowguidcol的列,并且设置唯一性索引,在订阅时,选择订阅数据库已有架构和数据,这样就不会把订阅端的数据冲掉了,但前提是publisher和subscriber的对应同一主键的rowguidcol的值要一样,否则更新时会导致冲突。
评论Feed: /feed.asp?q=comment&id=23
先说一下如何单向同步,在代理属性中第二步的run agent中通过加命令参数exchangetype来改变,1为uploading,表示只从订阅者上传到发布者,2为downloading,表示只从发布者更新到订阅者,3为bidirectional,表示双向同步,即默认的同步方式。
如果在数据库结构改变后继续同步,可以使用取消同步之前生成的sql脚本一次运行(但我怀疑这样是有问题的),前提是包括订阅脚本一起运行,否则的话就必须在订阅时选择初始化结构和数据,因为不然的话,会报说发布的数据库中没有唯一的rowguidcol,我就奇怪了,为什么不能在没有任何订阅者的情况下做一个快照,这样的话就会自动添加这个列了。
因为我们更新数据库结构时,会将rowguidcol这个列给删除的,这样就导致我下一次再建立同步时又得初始化所有的订阅者,然而我并不希望publisher的数据都更新到subscriber,使用行过滤的办法的话我又得对每个subscriber做不同的发布,这真是一个难题。
解决方法,在建立数据库时,添加属性rowguidcol的列,并且设置唯一性索引,在订阅时,选择订阅数据库已有架构和数据,这样就不会把订阅端的数据冲掉了,但前提是publisher和subscriber的对应同一主键的rowguidcol的值要一样,否则更新时会导致冲突。
评论Feed: /feed.asp?q=comment&id=23
您可能感兴趣的文章:
进程未能将快照传送给订阅服务器 (progame at 2006-07-16)
数据同步订阅的注意事项 (progame at 2006-05-29)
Sql Server数据同步之推拉式 (progame at 2007-03-13)
[转]关于sql server数据同步msmerge表的说明 (progame at 2008-11-16)
凑也要把数据凑出来 -- 数据库损坏恢复 (progame at 2008-01-16)
在刀尖上跳舞,一次sql server 数据库恢复的过程 (progame at 2006-06-30)
安装sql server时,提示程序被挂起 (沁励 at 2007-01-08)
Sql Server 自动查询优化有时候也是靠不住的 (progame at 2006-10-19)


我看了文档后发现可以跳过初始化来同步,我在服务器上建立好发布后备份了一下,把备份拷到客户机上还原后发现 所有表里都没有rowguid字段了,导致还是得重新初始化。
我后来又自己手动在所有表里添加了ROWGUID列,类型一直 默认值是newid() 结果跳过初始化同步 出现了很多问题,数据混乱了。 我设置的是只下载服务器上的更改 结果现在我客户机上的库现在比服务器上还大。。。
高人若看到了这个回复 有办法解决我的难题 请发邮件给我 谢谢!
kyozz601@163.com