zoukankan      html  css  js  c++  java
  • sql server 复制之找不到该行的非暴力处理方法

    用过事务复制订阅的都有过这样的经历,订阅端总有些手欠的会不经意的改动一下下,

    然后你的就会收到:

    "应用复制的命令时在订阅服务器上找不到该行。 (源: MSSQLServer,错误号: 20598)"

    这样的报错,最简单暴力的方法跳错,

    在分发服务器上

    exec sp_helpsubscriptionerrors ‘发布服务器别名’
    , ‘发布数据库’
    , ‘发布复制名’
    , ‘订阅服务器别名’
    , ‘订阅数据库’;

    找到xact_seqno,比如=0x0000085200000113000C00000000

    然后在订阅服务器的订阅数据库上执行下面sql:
    exec sp_setsubscriptionxactseqno ‘发布服务器别名’
    , ‘发布数据库’
    , ‘发布复制名’
    , 0x0000085200000113000C00000000

    OK,错误就跳过去了,但是跳过的是一个MSrepl_transactions,如果这个transaction里更新了多个行,但是因为一行丢失,

    导致其他行的更新都跳过了,这样会试订阅端的数据和主数据不一致(都让人修改了,还担心不一致?好吧,按理想状态来说),

    所以可以采用更细的方法,来处理这个错误,修改订阅端丢失的数据。

    如第一个找xact_seqno的SQL,拿到xact_seqno,command_id.

    然后在分发上,sp_browsereplcmds @xact_seqno_start =0x0000085200000113000C00000000,@xact_seqno_end=0x0000085200000113000C00000000,@publisher_database_id=1 ,@command_id=4

    找到 {CALL [sp_MSupd_dbotest] (,,'dd',4,0x04)}

    然后在订阅服务器,补充主键=4的数据

    然后复制就恢复了。

    虽然比较麻烦,但相对缓和一些。

  • 相关阅读:
    韩信的糊涂
    用友U8两个怪问题
    写给对前途迷茫的朋友:五句话定会改变你的人生
    换博客了
    各种杀毒工具的优缺点
    又是一年中秋到 别有一般更思乡
    谁说黑夜是孤单的
    李想:创业不一定是创办企业
    SQ小组KTV点歌系统简介
    注意!在subList生成子列表之后,一定不要随便更改原列表
  • 原文地址:https://www.cnblogs.com/lweia/p/3727761.html
Copyright © 2011-2022 走看看