【问题标题】:Fix broken transactional replication in SQL Server 2005修复 SQL Server 2005 中损坏的事务复制
【发布时间】:2012-03-13 14:43:33
【问题描述】:

我在 SQL Server 2005 中设置了事务复制,并且禁用了设置复制时创建的 DDL 触发器。在玩了一会儿(了解会发生什么)之后,事务被破坏了,因为我已经将发布者上的一列更改为VARCHAR,即订阅者上的INT。我找到了两个程序,这将有助于跳过这个有问题的事务

EXEC sp_helpsubscriptionerrors
    @publisher='DB1',@publisher_db='repl_test',@publication='repl_test_table',
    @subscriber='DB2',@subscriber_db='repl_test'

这给了我一个可以看到错误的结果集(将VARCHAR 转换为INT 失败)

id time                    [...] error_code error_text                                             xact_seqno
24 2012-02-23 08:33:35.313 [...] 8114       Fehler beim Konvertieren des varchar-Datentyps in int. 0x00139791000CC79C000600000000
24 2012-02-23 08:33:35.310 [...] 8114       Fehler beim Konvertieren des varchar-Datentyps in int. 0x00139791000CC79C000600000000
[...]

我使用来自结果 (0x00139791000CC79C000600000000) 的xact_seqno 在下一步执行以下过程

EXEC sp_setsubscriptionxactseqno
    @publisher='DB1',@publisher_db='repl_test',@publication='repl_test_table',
    @xact_seqno=0x00139791000CC79C000600000000

会说:

错误 20017 - 订阅者不存在订阅。

嗯?

【问题讨论】:

    标签: sql-server sql-server-2005 replication transactional-replication


    【解决方案1】:

    啊,看看internal codesp_setsubscriptionxactseqno 可以看到,这个过程必须在订阅数据库中执行(而不是在distribution 数据库中,其中@987654324 @ 必须被执行)...但这在 MSDN 中没有记录。

    【讨论】:

      【解决方案2】:

      对订阅者执行 sp_setsubscriptionxactseqno 对您有用吗?

      您还可以使用分发代理参数 -SkipErrors 8114 暂时跳过此错误类型。

      Skipping Errors in Transactional Replication

      【讨论】:

        猜你喜欢
        • 2010-12-16
        • 2012-05-19
        • 2011-01-29
        • 2010-10-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-08
        • 1970-01-01
        相关资源
        最近更新 更多