我在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 - 订阅者不存在订阅。
咦?
答案 0 :(得分:2)
啊,看看sp_setsubscriptionxactseqno
distribution
可以看到,此程序必须在订阅数据库中执行(而不是sp_helpsubscriptionerrors
数据库,其中必须执行{{1}})...但MSDN中没有记录这一点。
答案 1 :(得分:0)
在订阅者上执行sp_setsubscriptionxactseqno是否适用于您?
您还可以使用分发代理参数 -SkipErrors 8114 暂时跳过此错误类型。