none
SQLSERVER 2005 数据库双向同步问题 RRS feed

  • 问题

  • 数据库有160张表,我发布了两张表(数据字典表A和单位信息表B),表B对表A有外键引用,表B有一个自引用(上级单位)。两张表都是整张表同步,没有设置帅选条件。订阅后,如果将数据导入发布数据库的A和B中,数据能成功同步至订阅的数据库中,但是反过来就不行了,只有A表能同步,B表不能同步。但是我发现如果B表中不包含下级单位的话(上级单位字段为null),则能成功同步。不知道是出了什么问题。数据库的脚步是用Power Designer生成的。

    后来我自己写了脚本(A表和B表),采用同样的向上同步的方式(订阅服务器-》发布服务器),则能成功。找了几天了,还是找不到原因。请大家帮帮忙。谢谢!

    2012年9月20日 7:27

答案

  • 如果B表中不包含下级单位的话(上级单位字段为null),则能成功同步。不知道是出了什么问题。

    比较怀疑是你导入的数据产生的顺序有问题,导致违反约束,因为同步的时候,是逐条同步的

    比如,你导入两条数据,分别是顶级单位和它的子级,在做导入的时候,因为是整体导入,所以数据顺序没有关系,但这个导入的数据在同步的时候,是做为两条操作,如果是先同步子级的那条记录,则会因为找不到顶级,导致同步失败,而同步是先进先出的,所以不会因为第一条失败去尝试后一条,从而导致同步一直卡在那里面

    如果确定是这种情况,那么通过复制监控器可以看到错误

    • 已标记为答案 jezzlia 2012年9月24日 2:08
    2012年9月21日 3:47

全部回复

  • 反过来是指什么反过来? 先B后A?

    A有外键引用,是指A为主键表,B为外键表么?如果是的话,顺序是应该先A后B的

    2012年9月20日 8:33
  • 不好意思我没有说清楚哈。反过来指的是,把数据导入到订阅服务器的数据库中,然后由订阅库同步到发布库中。
    2012年9月20日 8:40
  • 确定一下你使用的复制类型,是否是支持订阅到发布的

    2012年9月20日 12:11
  • 发布类型我选择的是“具有可更新订阅的事务发布”。我怀疑是Power Designer16生成的脚本的问题,因为我手动写脚本的方式创建一样的A表和B表,然后发布,订阅。最后把数据导入到订阅库,就能成功的同步到发布库里。

    具体问题我还在找。

    2012年9月20日 12:34
  • 你可以看PD生成的脚本的啊

    给我写信: QQ我:点击这里给我发消息

    2012年9月20日 13:46
  • 你在四川跟我的办公地点很近春熙路呢,水利、水电行业信息自动化

    给我写信: QQ我:点击这里给我发消息

    2012年9月20日 14:11
  • 真是有缘啊,刚才在一个csdn的帖子里面看到了你在回答SQLSERVER2005同步问题时留下的QQ号。

    2012年9月21日 1:55
  • 直接更新数据可以双向同步么?

    如果怀疑是表的问题,可以生成脚本出来比较下

    2012年9月21日 3:36
  • 另外,复制监视器有没有看过,如果你的复制配置是正确的,那么无法同步的话,复制监控器中应该会显示错误信息的
    2012年9月21日 3:39
  • 如果B表中不包含下级单位的话(上级单位字段为null),则能成功同步。不知道是出了什么问题。

    比较怀疑是你导入的数据产生的顺序有问题,导致违反约束,因为同步的时候,是逐条同步的

    比如,你导入两条数据,分别是顶级单位和它的子级,在做导入的时候,因为是整体导入,所以数据顺序没有关系,但这个导入的数据在同步的时候,是做为两条操作,如果是先同步子级的那条记录,则会因为找不到顶级,导致同步失败,而同步是先进先出的,所以不会因为第一条失败去尝试后一条,从而导致同步一直卡在那里面

    如果确定是这种情况,那么通过复制监控器可以看到错误

    • 已标记为答案 jezzlia 2012年9月24日 2:08
    2012年9月21日 3:47
  • 呵呵,我公司是做石油行业的,用的数据库都是SQLSERVER

    给我写信: QQ我:点击这里给我发消息

    2012年9月21日 6:04
  • 问题解决了。我在描述问题的时候忽略了一个关键的问题。我们的数据库结构是一个中心数据库,多个分中心数据库。由于要升级到2012版,所以就要把2011的数据导入到对应的2012版的数据库中,然后再同步到中心数据库。由于我在把2011的数据导入到2012的时候加了事务,结果就不能同步到中心了,而且日志里面也没有错误出现,偶尔一次机会看到这样一条日志说是:某某表可能不同步。但是把事务取消,就没有问题了。不知道是为什么。
    2012年9月24日 2:07
  • 问题解决了。我在描述问题的时候忽略了一个关键的问题。我们的数据库结构是一个中心数据库,多个分中心数据库。由于要升级到2012版,所以就要把2011的数据导入到对应的2012版的数据库中,然后再同步到中心数据库。由于我在把2011的数据导入到2012的时候加了事务,结果就不能同步到中心了,而且日志里面也没有错误出现,偶尔一次机会看到这样一条日志说是:某某表可能不同步。但是把事务取消,就没有问题了。不知道是为什么。

    SQL2012也可以做“具有可更新订阅的事务发布”吗?
    • 已编辑 破影 2012年9月27日 1:12
    2012年9月27日 0:47
  • 可以的  

    给我写信: QQ我:点击这里给我发消息

    2012年9月27日 0:59
  • 可以的  

    给我写信: QQ我:点击这里给我发消息


    哪里有相关资料呢?微软的文档说新建发布的时候选择模式,可是在SQL2012新建发布的时候已经没有“具有可更新订阅的事务发布”了,而且还写了这么一段:
    注意注意

    后续版本的 Microsoft SQL Server 将删除该功能。请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。


    请多多指教。

    2012年9月27日 1:12
  • Replaced by peer to peer replication.
    2012年9月27日 2:19