修复SQL Server 2005中损坏的事务复制

时间:2012-02-23 07:37:31

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

我在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
[...]

我使用结果中的xact_seqno(0x00139791000CC79C000600000000)在下一步执行以下步骤

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

会说:

  

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

咦?

2 个答案:

答案 0 :(得分:2)

啊,看看sp_setsubscriptionxactseqno distribution可以看到,此程序必须在订阅数据库中执行(而不是sp_helpsubscriptionerrors数据库,其中必须执行{{1}})...但MSDN中没有记录这一点。

答案 1 :(得分:0)

在订阅者上执行sp_setsubscriptionxactseqno是否适用于您?

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

Skipping Errors in Transactional Replication