FIX: 的分发代理程序可以跳过某些行在配置使用一个事务复制时,"-SkipErrors"SQL Server 2005 中的参数

注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。

点击这里察看该文章的英文版: 938671
症状
当您配置使用一个事务复制时在 -SkipErrors Microsoft SQL Server 2005,分发代理程序中的参数可能会跳过某些行。此行为会导致发布服务器和订阅服务器之间的数据不一致问题。

此外,如果出现此问题,分发代理程序可能会显示以下消息:
007-05-18 22:49:38.195 过程未能完成在多流式处理模式中的最后一批,它已被重置为单连接模式,正在重试操作。

007-05-18 22:49:38.273 应用在订阅服务器上的交易记录时跳过了 1 个错误。 007-05-18 22:49:38.367 101 事务具有 100 命令被传递。

007-05-18 22:49:38.477 100 事务具有 100 命令被传递。应用在订阅服务器上的交易记录时,007-05-18 22:49:38.570 跳过了 1 个错误。

007-05-18 22:49:38.664 100 事务具有 100 命令被传递。
解决方案
累积更新 2 中首先释放此问题的修复程序。有关如何获取 SQL Server 2005 Service Pack 2 的此累积更新包的详细信息单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
936305对于 SQL Server 2005 Service Pack 2 的累积更新包 2
注意因为这些版本是累积性的因此每个新的修补程序版本包含的所有修补程序和所有安全修补程序附带以前 SQL Server 2005 修补都程序版本。Microsoft 建议您考虑应用最新的修补程序版本包含此修补程序。有关详细的信息请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
937137SQL Server 2005 生成发布 SQL Server 2005 Service Pack 2 之后发布的
为特定 SQL Server 服务包创建 Microsoft SQL Server 2005 修补程序。必须将 SQL Server 2005 Service Pack 2 修补程序应用到 SQL Server 2005 Service Pack 2 的安装。默认状态下,SQL Server service pack 中提供的任何修补程序包含在下一个 SQL Server 服务包中。
状态
Microsoft 已经确认这是在"适用于"一节中列出的 Microsoft 产品中的问题。
更多信息
默认状态下,当分发代理程序遇到一个错误,应停止分发代理程序。如果您使用 –SkipErrors 参数的特定错误,分发代理程序将跳过这些错误并继续处理连续的交易记录。

重现此问题的步骤

  1. 设置复制环境。 To do this, run the following scripts in SQL Query Analyzer.
    use mastergoexec sp_adddistributor  @distributor = @@SERVERNAMEgoexec sp_adddistributiondb  @database = 'distribution'goexec sp_adddistpublisher  @publisher = @@SERVERNAME, @distribution_db = 'distribution'goexec sp_replicationdboption pubdb, publish, falsegoexec sp_replicationdboption subdb, publish, falsegoif db_id('pubdb') is not null    drop database pubdbgocreate database pubdbgoif db_id('subdb') is not null    drop database subdb gocreate database subdbgoexec sp_replicationdboption pubdb, publish, truegouse pubdbgocreate table t(c1 int primary key, c2 int, c3 sysname null, c4 nchar(200) default 'a')gocreate unique index c2_idx on t(c2)gosp_addpublication @publication = 'p1', @status = 'active'gosp_addarticle @publication = 'p1', @article = 'a1', @source_table = 't', @schema_option = 0x00000000000300f3gosp_addsubscription @publication = 'p1', @article = 'all', @subscriber = @@servername, @destination_db = 'subdb'go
  2. Save the following command as a batch file, and then run the file to insert data.
    c: pushd "c:\program files\microsoft sql server\90\com\" del dist.outcall snapshot.exe -publisher %COMPUTERNAME% -publisherdb pubdb -distributor %COMPUTERNAME% -distributorsecuritymode 1 -publication p1call logread.exe -publisher %COMPUTERNAME% -publisherdb pubdb -distributor %COMPUTERNAME% -distributorsecuritymode 1 call distrib.exe -publisher %COMPUTERNAME% -publisherdb pubdb -distributor %COMPUTERNAME% -distributorsecuritymode 1 -publication p1 -subscriber %COMPUTERNAME% -subscriberdb subdb start cmd.exe /s /k "logread.exe -publisher %COMPUTERNAME% -publisherdb pubdb -distributor %COMPUTERNAME% -distributorsecuritymode 1 -continuous"start cmd.exe /s /k "distrib.exe -publisher %COMPUTERNAME% -publisherdb pubdb -distributor %COMPUTERNAME% -distributorsecuritymode 1 -publication p1 -subscriber %COMPUTERNAME% -subscriberdb subdb -subscriptionstreams 8 -SkipErrors 2601:2627 -Output dist.out -OutputVerboseLevel 2 -continuous"popdosql -E -S[SQL_server] -Q"insert subdb..t (c1, c2) values (1000, 1000)"osql -E -S[SQL_server] -Q"insert subdb..t (c1, c2) values (2500, 1015)"osql -E -S[SQL_server] -Q"begin tran declare @v int select @v = 1 while (@v < 1020) begin insert pubdb..t (c1, c2) values (@v, @v) select @v = @v + 1 end commit tran"osql -E -S[SQL_server] -Q"declare @v int select @v = 3100 while (@v < 3500) begin insert pubdb..t (c1, c2) values (@v, @v) select @v = @v + 1 waitfor delay '0:0:0.10' end"
    注意 的占位符 SQL_server 值,该值代表的 SQL Server 实例的名称。
  3. 请注意数据不被复制到订阅服务器数据库。

警告:本文已自动翻译

属性

文章 ID:938671 - 上次审阅时间:08/01/2007 17:52:33 - 修订版本: 1.4

Microsoft SQL Server 2005 Developer Edition, Microsoft SQL 2005 Server Enterprise, Microsoft SQL Server 2005 Standard Edition, Microsoft SQL Server 2005 Standard X64 Edition, Microsoft SQL Server 2005 Enterprise X64 Edition, Microsoft SQL Server 2005 Standard Edition for Itanium Based Systems, Microsoft SQL Server 2005 Enterprise Edition for Itanium Based Systems

  • kbmt kbexpertiseinter kbqfe KB938671 KbMtzh
反馈