FIX: 您不能通过使用事务复制,分发代理程序的 SubscriptionStreams 参数设置为大于 1 SQL Server 2008 中的值时同步二进制大对象 (BLOB) 数据

文章翻译 文章翻译
文章编号: 975171 - 查看本文应用于的产品
Microsoft 分布 Microsoft SQL Server 2008 修复程序作为一个可下载的文件。因为该修补程序是累积性的因此每个新版本包含的所有修补程序和所有安全修复程序以前 SQL Server 2008 中包含的修补都程序版本。
展开全部 | 关闭全部

症状

请考虑以下情形:
  • 在 Microsoft SQL Server 2008,您设置包含二进制大型对象 (BLOB) 列的表上的事务复制。
  • 将分发代理程序的 SubscriptionStreams 参数设置为大于 1 的值。
  • 二进制大对象 (BLOB) 列中插入数据。数据大小大于 OleDbStreamThreshold 参数的值。

    注意OleDbStreamThreshold 参数的默认值为 16,384 字节。
当您同步在此方案中的数据时,您可能会遇到以下症状:

症状 1

分发代理程序会停止复制命令。分发代理程序状态设置为 2。此状态设置为 2 的指示上次执行的命令已成功复制。但是,仍有一些挂起命令复制到订阅服务器分发服务器上。这些命令包含二进制大型对象 (BLOB) 数据。二进制大对象 (BLOB) 数据大小大于 OleDbStreamThresold 参数的值。此外,在分发代理程序日志中记录以下错误消息:

Date Time 未复制的事务是可用的。
Date Time 复制代理的状态: 2
Date Time 添加到 msdb 的警报sysreplicationalerts: ErrorId = 0,
事务 Seqno = Transaction Sequence Number,命令 ID = 1
消息: 复制复制分发子系统: 代理已成功 Distribution Agent Name。未复制的事务是 available.OLE DB 订阅服务器 Subscriber Name: exec dbo.sp_MSupdatelastsyncinfo N Subscriber Name N Database NameTable Name,0,2,N'No 复制的事务都可用

症状 2

分发代理程序不能成功运行。分发代理程序状态为 6。在分发代理程序日志中记录以下错误消息:

Date Time 代理消息代码 20046。复制代理的状态: 6
Date Time ErrorId = 22,SourceTypeId = 2 错误码 ="20046"
ErrorText =
Date Time 添加到 msdb 的警报sysreplicationalerts: ErrorId = 22,
事务 Seqno = 00000021000000d1004800000000,命令 ID = 1
消息: 复制复制分发子系统: 代理 < 分发代理程序名称 > 失败。ErrorId = 22,SourceTypeId = 1
错误码 =
ErrorText = 如果 @ @ trancount > 0 回滚 tran
除了上面记录该错误,MSrepl_errors 表在分发数据库中就会记录以下错误:
分发代理程序未能创建临时文件是 Files\Microsoft SQL Server\100\COM 目录中。系统返回 errorcode 32。

解决方案

累积更新 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

将分发代理程序的 SubscriptionStreams 参数设置为 1 的值中。

方法 2

您可以将分发代理程序的 OleDbStreamThreshold 参数设置为一个大于具有要复制的二进制大对象 (BLOB) 列的最大数据大小的值。然后,分发代理程序将不绑定二进制大对象 (BLOB) 数据作为流。从 SQL Server 2008 开始,二进制大对象 (BLOB) 数据绑定作为流时的二进制大对象 (BLOB) 数据的数据大小小于 OleDbStreamThreshold 参数的值。此行为是默认情况下,则返回 true。

注意如果您使用此方法,分发代理程序将需要较长的时间,复制二进制大对象 (BLOB) 列。

状态

Microsoft 已经确认这是在"适用于"一节中列出的 Microsoft 产品中的问题。

参考

有关 OleDbStreamThreshold 参数的详细信息,请访问下面的 Microsoft 开发人员网络 (MSDN) 的网站:
http://msdn.microsoft.com/en-us/library/ms147328.aspx
对于 SQL Server 增量的服务模型的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
935897一个增量的服务模型是可从 SQL Server 团队提供报告的问题的修补程序

有关命名 SQL Server 更新架构的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
822499Microsoft SQL Server 软件更新程序包的新命名架构

有关软件更新术语的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
824684用于描述 Microsoft 软件更新的标准术语的说明

属性

文章编号: 975171 - 最后修改: 2010年3月18日 - 修订: 2.0
这篇文章中的信息适用于:
  • Microsoft SQL Server 2008 Standard
  • Microsoft SQL Server 2008 Developer
  • Microsoft SQL Server 2008 Enterprise
  • Microsoft SQL Server 2008 Workgroup
关键字:?
kbmt kbsurveynew kbfix kbqfe kbexpertiseadvanced KB975171 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 975171
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com