原始 KB 编号:
327817
Microsoft SQL Server在分发代理中包含新参数,该参数
-SkipErrors
允许分发代理跳过事务复制中的指示错误并继续分发过程。
以下摘录摘自 SQL Server 联机丛书中的
处理代理错误
主题:
在典型的复制处理下,不应遇到任何需要跳过的错误。 在事务复制期间跳过错误的功能适用于预期错误的独特情况,并且不希望它们影响复制 (例如,在日志传送) 期间故障转移到辅助发布服务器时。
Microsoft 建议谨慎使用此参数,并且仅在你对以下内容有充分了解时才使用此参数:
错误指示的内容。
错误发生的原因。
为什么最好跳过错误而不是解决错误。
如果不知道这些项的答案,不恰当地使用
-SkipErrors
参数可能会导致发布服务器和订阅服务器之间的数据不一致。 本文介绍错误使用 参数时可能发生的一
-SkipErrors
些问题。
在事务复制中,发布服务器上的数据更改将传播到事务单位中的订阅服务器。
在一个事务中,可能有多个命令。 默认情况下,如果一个命令失败,整个复制事务会在订阅服务器上回滚。 如果添加
-SkipErrors
参数以允许分发代理跳过某些错误,则导致此错误的单个命令不会应用于订阅服务器,但将应用相同事务中的其他所有命令。 在这种情况下,复制事务仅部分应用于订阅服务器,这会导致发布服务器和订阅服务器之间的数据不一致。
有一个事务等待复制到名为 T1 的订阅服务器表。 此事务包括 100 个 insert 语句。 当它应用于订阅服务器时,前 90 个插入过程正确;但是,第九十一个插入语句失败,发生主键冲突错误 2627。
如果不使用
-SkipErrors
参数 (默认行为) :
默认情况下,整个事务回滚,100 条新记录都不会插入订阅表。 在这种情况下,必须修复复制错误,以便事务可以重新应用于订阅服务器。
使用
-SkipErrors
参数时:
分发代理在分发代理历史记录中记录错误,跳过此错误,然后继续分发过程。 因此,除了导致错误的第九十一个新记录外,其他 99 条新记录将插入订阅表。 即使在订阅服务器上手动修复错误,分发代理也不会重新应用此事务。 因此,在这种情况下,订阅服务器缺少第九十一条新记录,并且会出现数据不一致问题。
还必须知道,在 SQL Server 2000 中,分发代理通常由多个发布共享, (默认情况下,每个发布数据库和订阅数据库对) 有一个分发代理,因此如果将 参数添加到
-SkipErrors
分发代理作业,则会影响此代理所服务的所有发布。 在 SQL 2005 和 SQL 2008 版本中,事务复制默认使用在新建发布向导中创建的发布的独立代理。 对于使用
sp_addpublication
存储过程创建的发布,默认行为是使用共享代理。
若要对特定发布使用
-SkipErrors
参数,请使用独立代理,该代理只为一个订阅提供服务。 若要使用独立代理,请按照版本的步骤操作:
SQL Server 2000
在“SQL Server Enterprise管理器”中,右键单击发布,单击 ,
Properties
然后在“
订阅选项”
选项卡上,单击
使用独立于此数据库的其他发布的分发代理
选项。
向此发布添加任何订阅后,无法打开此选项。
-SkipErrors
将 参数添加到特定订阅的分发代理。
SQL Server 2005 和 SQL Server 2008
在 SQL Server Management Studio 中,导航到
“复制
”,然后在“
本地发布
”部分中右键单击发布,单击“
属性”
,然后在“
订阅选项”
页上,将
“独立分发代理
”的值从
False
更改为
True
。
向此发布添加任何订阅后,无法打开此选项。
-SkipErrors
将 参数添加到特定订阅
的分发代理
。
有关详细信息,请参阅:
复制代理管理
跳过事务复制中的错误
sp_addpublication (Transact-SQL)