事务复制里如何跳过一个事务
--王成辉翻译整理,转贴请注明出自微软BI开拓者www.windbi.com
--原帖地址
曾几何时,你可能在寻找一种方法使得在SQL 2005/2008的事务复制里能跳过某个单独的事务。例如,当分发代理由于某个错误而失败的时候,数据库的完整性不会因为跳过那个事务而受到影响。为了使分发代理跳过某个事务,SQL提供了2个非常有用的存储过程。sp_helpsubscriptionerrors用于显示无效事务的一个列表。该存储过程的关键输出是xact_seqno列,它给第2个存储过程sp_setsubscriptionxactseqno提供了要跳过的事务LSN或者序列号。
sp_helpsubscriptionerrorshttp://msdn.microsoft.com/zh-cn/library/ms173427.aspx
sp_setsubscriptionxactseqno
http://msdn.microsoft.com/zh-cn/library/ms188764.aspx
例子(在分发数据库上执行):
sp_helpsubscriptionerrors
'SQLw2k8','dbtranpub','dbtranpub_pub','SQLw2k8Subscriber','dbtransub':id time error_type_id source_type_id source_name error_code error_text xact_seqno command_id session_id
----------- ----------------------- ------------- -------------- ------------- ------------ -------------------------------------------- ---------------------------------- ----------- -----------
16 2009-09-08 05:14:04.673 0 0 MSSQL_ENG 8152 String or binary data would be truncated.
0x0000002B00000196000300000000 1 0
16 2009-09-08 05:14:04.660 0 0 MSSQL_ENG 8152 String or binary data would be truncated. 0x0000002B00000196000300000000 1 0
16 2009-09-08 05:14:04.660 0 1 MSSQL_ENG if @@trancount > 0 rollback tran 0x0000002B00000196000300000000 1 0
跳过事务的命令(在订阅服务器上执行):
sp_setsubscriptionxactseqno
'SQLw2k8','dbtranpub','dbtranpub_pub',0x0000002B000001960003