none
可更新订阅经常冲突是什么原因? RRS feed

  • 问题

  • 就以3台服务器参考吧。

    1台发布服务器,数据库 A

    2台订阅服务器,数据库 A1,A2 (一台订阅服务器只有一个用户数据库)

    发布服务器数据库 A 创建2个筛选发布,分表对应订阅 A1 和 A2 , A1 和 A2 各保存一半的数据(即数据 A1 + A2 =A)。

    所有操作人员和用户都是操作订阅数据库 A1 和 A2 ,并且都是操作视图(1张表对应1个视图),

    发布数据库是没有人操作的,只允许查询。发布和订阅的冲突策略都是以订阅的为准,订阅进行排队更新。

    问题来了:

    个人环境高并发测试DML操作都不会冲突。

    但是生产环境中,每天各表总共都有平均10条数据冲突,更新和删除冲突都有。

    现在查到的一些信息:

    有的数据可能是以前版本号(msrepl_tran_version)不一样了,现在操作时才出现冲突。

    也有少部分数据是升级维护系统时,客户再某个移动端还能访问导致没正常同步。

    (以上两种情况算正常情况,也很少有,但是类似下面这张情况就较多。)

    有的是日志数据库中记录删除了2次,导致了冲突(用户在客户端操作有几个表的数据是记录历史的,刚好可以查看,客户也可以看到。冲突的记录中,在日志表记录删除了2次,为什么删除2次? 相关开发人员说是重复提交。但对于数据库的排队更新来说,删除一次,订阅和发布的数据都会删掉,再删除一次是删除不了了,已经没记录了。但是这时还是出现冲突,当然发布和订阅记录都删除了)

    问题如题:可更新订阅经常冲突是什么原因?


    • 已编辑 Hello.KK 2015年8月3日 3:27
    2015年8月3日 3:23

全部回复

  • Does replicated table have trigger?

    2015年8月3日 12:32
  • Does replicated table have trigger?

    表和视图都没有自定义触发器,表有系统的同步触发器。

    现在似乎是找到原因了,但是怎么发生的还是不理解。

    是这样的:

    客户端添加1行记录,然后删除记录,删除反应没那么快,再快速点击删除该记录。这样在客户端操作是两次删除了同一条记录。到数据库层时,订阅数据同步到发布就冲突了。

    profiler 也跟踪到两次delete语句。(delete很简单,没有其他复杂操作)

    一行记录只能删除一次,怎么还会出现冲突呢?

    2015年8月5日 2:54