zoukankan      html  css  js  c++  java
  • 跳过事务复制中的错误

    跳过事务复制中的错误

    对于事务性复制,有两种方法可以跳过在分发过程中遇到的错误:

    • 分发代理的 -SkipErrors 参数,可用来跳过某种类型的错误。有错误的事务将不提交,但后续的事务将提交。
    • sp_setsubscriptionxactseqno 存储过程,可用来跳过一个或多个导致错误的事务。非 SQL Server 的订阅服务器没有此选项。
    重要提示:
    在典型的复制处理中,应该不会遇到任何需要跳过的错误。跳过错误时要谨慎,要了解发生错误的条件、错误的起因以及需要跳过错误或特定事务而不解决的理由。如果在订阅服务器上跳过发布服务器上提交的事务,则这两个节点就不会完全同步,这会导致其他错误。

    默认情况下,发布代理遇到错误时就会停止。如果使用 -SkipErrors 参数,并指定了预期的或不想让其干扰复制的错误,则代理就会记录错误信息,然后继续运行。例如,如果要指定分发代理,使其记录重复键违规但继续处理后续事务,就需要指定代理跳过错误 2601(不能在具有唯一索引 '%.*ls' 的对象 '%.*ls' 中插入重复键的行。)和 2627(违反了 %ls 约束 '%.*ls'。不能在对象 '%.*ls' 中插入重复键):

    -SkipErrors 2601;2627

    -SkipErrors 参数的最常见用法是使用标题为“遇到数据一致性错误时继续”的分发代理配置文件。这样,分发代理就会跳过错误 2601、2627 和 20598(应用复制的命令时在订阅服务器上找不到该行)。有关详细信息,请参阅复制代理配置文件。除了此预定义的配置文件之外,还可以在创建或修改的代理配置文件中,或在命令行中,指定该参数。有关详细信息,请参阅:

    重要提示:
    默认情况下,触发器将在 XACT_ABORT 设置为 ON 的情况下执行。当分发代理正在对订阅服务器应用更改时,如果触发器中的某个语句导致错误,则整批更改都将失败,而不只是单个语句。在事务性复制中,可以使用分发代理的 -SkipErrors 参数来跳过导致错误的语句。如果在 XACT_ABORT 为 ON 的情况下使用 -SkipErrors,那么,如果某个语句导致错误,则会跳过整批更改。如果使用了 -SkipErrors 参数,除非需要在触发器中将 XACT_ABORT 设置为 ON,否则,建议将其设置为 OFF。若要将该选项设置为 OFF,请在触发器定义中指定 SET XACT_ABORT OFF。有关 XACT_ABORT 的详细信息,请参阅 SET XACT_ABORT (Transact-SQL)

    当在订阅服务器上应用 sp_setsubscriptionxactseqno 时,可以用它来跳过导致错误的事务。如果出现故障并且希望跳过一个或多个事务:

    1. 可以在分发代理停止后,在分发服务器上执行 sp_helpsubscriptionerrors。此存储过程将返回 xact_seqno 列,该列包含各失败事务的日志序列号 (LSN)。
    2. 请执行 sp_setsubscriptionxactseqno,为 @xact_seqno 参数指定一个值。如果要跳过所有失败的事务,请指定 sp_helpsubscriptionerrors 返回的最大日志序列号。

    有关详细信息,请参阅 sp_setsubscriptionxactseqno (Transact-SQL)sp_helpsubscriptionerrors (Transact-SQL)

  • 相关阅读:
    MDX函数
    OLAP + MDX
    AIOps指导
    ES Terms 聚合数据不确定性
    redis初步入门
    java写hadoop全局排序
    [工程技巧]
    python与字符集编码
    转载python2进制打包相关
    转载 大端VS小端
  • 原文地址:https://www.cnblogs.com/liangqihui/p/1031104.html
Copyright © 2011-2022 走看看