你目前正处于脱机状态,正在等待 Internet 重新连接

修补: 当您运行分发代理程序与在 Microsoft SQL Server 2005 年发布服务器同步该订阅服务器或 SQL Server 2008::"的传入表格格式数据流 (TDS) 远程过程调用 (RPC) 协议流不正确的错误消息"

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

点击这里察看该文章的英文版: 973103
Microsoft 将 Microsoft SQL Server 2005 修补程序分发作为一个可下载的文件。因为该修补程序是累积性的因此每个新版本包含的所有修补程序和所有安全修补程序附带以前 SQL Server 2005 修补都程序版本。
症状
在 Microsoft SQL Server 2005 中使用事务复制。您在运行分发代理程序与发布服务器同步该订阅服务器时可能失败,分发代理程序和分发代理程序历史记录中或在输出日志中,您会收到以下错误消息:

42000 在传入表格格式数据流 (TDS) 远程过程调用 (RPC) 协议流不正确。此 RPC 请求中提供的参数太多。最大值为 2100年。8003

重复发生这些错误时, 可能会影响性能。当这样的失败发生时,分发代理程序将执行操作重新处理相同尝试的重试命令。因此,分发代理程序使用更多的时间与发布服务器同步该订阅服务器,因为每个有问题的批处理,在尝试两次。
原因
分发代理程序在处理分发数据库中挂起的命令时,它使用 CommitBatchSize 参数并 CommitBatchThreshold 参数以帮助您确定如何许多命令的批处理一起作为一个执行时它将这些命令发送到订阅服务器。

CommitBatchSize 参数是要颁发给预订者在发出 COMMIT 语句之前的交易记录的数量。默认值为 100。CommitBatchThreshold 参数是在发出 COMMIT 语句之前发送到订阅服务器的复制命令的数目。默认值为 1000年。

因为一个事务可以包含一个命令,也可以包含许多命令,CommitBatchSize 参数设置为 100,并将 CommitBatchThreshold 参数设置为 1000年可能允许在单个批处理的命令中传递的几个千位命令。

当项目被添加到一个的出版物 @ ins_cmd@ upd_cmd,和 @ del_cmd 的复制命令类型参数为指定 sp_addarticle 存储过程以确定如何提供到订阅服务器的命令。除了在 CommitBatchSizeCommitBatchThreshold 参数分发代理程序必须还应考虑存在 SQL 本机客户端 OLE DB 提供程序上多少参数可以在单个命令的批处理发送到订阅服务器的绑定中的最大需求。

没有 2100年参数,可以在单个批处理的命令中使用的最大值。分发代理程序因此自动将较大的批次分为每批足够语句,以便不超过 2100年参数的最大值。然后,命令批处理中的任何其余的命令将被自动移到下一次执行批处理。

当分发代理程序错误地计算所需提供的命令的批处理参数的数目时,就会出现此问题。如果分发代理程序的很多的复制命令的批处理的包装为使用动态存储的过程 sp_executesql,就会发生这种情况。

如果复制的命令包含批处理命令中的多个 2098年参数,并且通过 sp_executesql 存储过程来提供为动态地生成 TRANSACT-SQL 语句批处理换行的批处理命令分发代理程序不包括在计算 sp_executesql 存储过程需要两个其他绑定的参数本身的功能。因此,参数总数可能超过 2100年参数。

分发代理程序可能使用动态地生成 TRANSACT-SQL 语句自动换行与 sp_executesql 存储过程在下列情况下此传递的选项:
  • 本文包含二进制大型对象 (BLOB) 列,如文本或图像列。
  • 在所有项目之间使用多个复制命令类型。例如,如果一个项目使用 SQL 传递的复制命令类型中,但另一篇文章使用 sp_MSins_procedure 存储过程作为复制命令类型。
解决方案

SQL Server 2005 年

在累积更新 5 SQL Server 2005 Service Pack 3 的第一次释放此问题的修复程序。有关此累积更新包的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
972511累积更新包 5 为 SQL Server 2005 Service Pack 3
注意因为这些版本是累积性的因此每个新的修补程序版本包含的所有修补程序和所有安全修补程序附带以前 SQL Server 2005 修补都程序版本。Microsoft 建议您考虑应用最新的修补程序版本包含此修补程序。有关详细的信息请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
960598SQL Server 2005 生成发布后发布 SQL Server 2005 Service Pack 3
Microsoft SQL Server 2005 修补程序会创建特定 SQL Server 服务包。必须将 SQL Server 2005 Service Pack 3 修补程序应用到 SQL Server 2005 Service Pack 3 的安装。默认状态下,SQL Server service pack 中提供的任何修补程序包含在下一个 SQL Server 服务包中。

SQL Server 2008 年

SQL Server 2008 年

重要如果您正在运行 SQL Server 2008 的发行版本,则必须使用此修复程序。

累积更新 7 中第一次释放此问题的修复程序。有关如何获取 SQL Server 2008 年此累积更新包的详细信息单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
973601累积更新包 7 SQL Server 2008 年
注意因为这些版本是累积性的因此每个新的修补程序版本包含的所有修补程序和所有安全修复程序以前 SQL Server 2008 中包含的修补都程序版本。我们建议您考虑应用最新的修补程序版本包含此修补程序。有关详细的信息请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
956909SQL Server 2008 生成 SQL Server 2008 发布之后发布的

SQL Server 2008 服务包 1 (SP1)

重要如果您正在运行 SQL Server 2008 Service Pack 1 (SP1),则必须使用此修复程序。

累积更新 4 SQL Server 2008 Service Pack 1 中第一次释放此问题的修复程序。有关此累积更新包的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
973602累积更新包 4 为 SQL Server 2008 Service Pack 1
注意因为这些版本是累积性的因此每个新的修补程序版本包含的所有修补程序和所有安全修复程序以前 SQL Server 2008 中包含的修补都程序版本。Microsoft 建议您考虑应用最新的修补程序版本包含此修补程序。有关详细的信息请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
970365SQL Server 2008 生成之后 SQL Server 2008 Service Pack 1 发布发布
Microsoft SQL Server 2008 修复程序会创建特定 SQL Server 服务包。必须将 SQL Server 2008 Service Pack 1 修补程序应用到 SQL Server 2008 Service Pack 1 的安装。默认状态下,SQL Server service pack 中提供的任何修补程序包含在下一个 SQL Server 服务包中。
替代方法
要变通解决此问题,请使用下列方法之一:

方法 1

为了帮助减少至多可容忍级别此错误的匹配项,减少分发代理程序 CommitBatchSizeCommitBatchThreshold 参数的值。目标是以限制每个提交批处理的命令,以避免超出每个命令的批处理 2,100 参数的最大数量。

例如对于 CommitBatchSize 参数的默认值为 100。可以将它更改为 10。CommitBatchThreshold 参数的默认值为 1000年。您可以将其更改为 100。

减小这些值会影响性能,因为最初最佳大小未传递的批次。但是,此方法有助于避免原因部分中描述的错误条件。

您可以使用下列方法之一更改 CommitBatchSizeCommitBatchThreshold 参数:
  • SQL Server 代理在分发代理程序作业步骤的命令中添加 CommitBatchSizeCommitBatchThreshold 参数
  • 当从分发服务器属性对话框或复制监视器创建新的代理程序配置文件时,请更改 CommitBatchSizeCommitBatchThreshold 参数。
有关如何更改这些参数,请访问下面的 Microsoft 开发人员网络 (MSDN) 的网站的详细信息:


如果要完全避免此错误在以后重试的批处理中,您必须为最坏的情况下进行规划。若要执行此操作找到在出版物中具有最多次数的列的最宽项目。例如对于如果您有 100 列在事务发布中发布的一个表对该表的单个复制的命令可包含 100 的参数。您必须减少 CommitBatchThreshold 参数的设置,以使分发代理程序必须向任何单个批处理中的参数的最大数目最多是 2098年。如果所有列都受到都影响由该命令,CommitBatchThreshold 参数的设置必须是 20 个或更小,以便最大为每个批处理的 20 命令对该表的 2000年参数。

方法 2

当您将出版物设置时,请使用相同的复制命令类型的出版物中的所有项目。避免混合使用命令传递机制,以减少对分发代理程序可以选择通过使用 sp_executesql 存储过程为命令的批处理的包装提供批处理需要相同的发布中的项目。
状态
Microsoft 已经确认这是在"适用于"一节中列出的 Microsoft 产品中的问题。
更多信息
复制分发代理程序有关的详细信息,请访问下面的 Microsoft 开发人员网络 (MSDN) 的网站:

有关复制代理程序配置文件的详细信息,请访问下面的 Microsoft 开发人员网络 (MSDN) 的网站:
参考
对于 SQL Server 增量的服务模型的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
935897一个增量的服务模型是可从 SQL Server 团队提供报告的问题的修补程序
有关如何获取 SQL Server 2005 Service Pack 3 的详细信息单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
913089如何获取最新的 service pack,SQL Server 2005 年
有关 SQL Server 2005 SP3 中新功能,以及有关 SQL Server 2005 SP3 中改进的详细信息,请访问下面的 Microsoft 网站: 有关命名 SQL Server 更新架构的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
822499Microsoft SQL Server 软件更新程序包的新命名架构
有关软件更新术语的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
824684用于描述 Microsoft 软件更新的标准术语的说明

警告:本文已自动翻译

属性

文章 ID:973103 - 上次审阅时间:08/17/2009 11:33:41 - 修订版本: 1.2

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

  • kbmt kbsurveynew kbhotfixrollup kbfix kbpubtypekc kbqfe kbexpertiseadvanced kbhotfixserver KB973103 KbMtzh
反馈
" src="https://c.microsoft.com/ms.js">