使用 Microsoft 登录
登录或创建帐户。
你好,
使用其他帐户。
你有多个帐户
选择要登录的帐户。

Microsoft 在一个可下载文件中分发 Microsoft SQL Server 2008 R2 Service Pack 1 (SP1)或 Microsoft SQL Server 2012 修复程序。 由于修补程序是累积的,因此每个新版本都包含以前的 SQL Server 2008 R2 Service Pack 1 (SP1)或 Microsoft SQL Server 2012 更新版本附带的所有修补程序和所有安全更新。

症状

请考虑以下情况:

  • 在 Microsoft SQL Server 2008 R2 或 Microsoft SQL Server 2012 中创建的至少两个事务复制发布基于一个数据库。

  • 每个出版物至少有一篇文章。 这些文章不重叠,并且每篇文章仅属于一个发布。

  • 将出版物的 " @sync_method " 属性设置为 " 并发"。

  • 将出版物的 " @immediate_sync " 属性设置为 True。

  • 将日志读取器代理的 MaxCmdsInTran 参数设置为非零值。

  • 其中一个发布在一个事务中接收多个插入。

  • 提交事务后,日志读取器代理将根据 MaxCmdsInTran 参数开始处理和拆分事务。

  • 在日志读取器代理完成任务之前,另一个发布上的快照代理将启动。

在这种情况下,日志读取器代理将失败,并且你会收到以下错误消息:

进程无法在 "server\instance" 上执行 "sp_MSadd_replcmds"。 (源: MSSQLServer,错误号码:1007)无法在对象 "dbo" 中插入重复键行。MSrepl_commands "具有唯一索引" ucMSrepl_commands "。 (源: MSSQLServer,错误号码:1007)

解决方案

累积更新信息

SQL Server 2012

此问题的修补程序首次在 SQL Server 2012 的累积更新1中发布。有关此累积更新包的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

2679368 SQL Server 2012 的累积更新包1注意 由于这些版本是累积的,因此每个新的修复版本都包含以前的 SQL Server 2012 修复版本附带的所有修补程序和所有安全修补程序。 Microsoft 建议你考虑应用包含此修补程序的最新修复版本。 有关更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

2692828 在 SQL Server 2012 发布后发布的 SQL Server 2012 版本 必须将 SQL Server 2012 修补程序应用到 SQL Server 2012 的安装。

SQL Server 2008 R2 SP1 的累积更新程序包4

此问题的修补程序首次在累积更新4中发布。有关如何获取此累积更新包的 SQL Server 2008 R2 SP1 的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

2633146 SQL Server 2008 R2 SP1 的累积更新程序包4注意 由于这些版本是累积的,因此每个新的修复版本都包含以前的 SQL Server 2008 R2 SP1 修复版本附带的所有修补程序和所有安全修补程序。 我们建议你考虑应用包含此修补程序的最新修复版本。 有关更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

2567616 发布 SQL Server 2008 R2 SP1 后发布的 SQL Server 2008 R2 版本

解决方法

若要解决此问题,请使用以下某种方法:

  • 不要将出版物的 " @sync_method " 属性设置为 "并发",不要将出版物的 @immediate_sync 属性设置为 "true"。

  • 将 MaxCmdsInTran 参数的值设置为零。

状态

Microsoft 已确认这是在“适用范围”部分中列出的 Microsoft 产品存在的问题。

需要更多帮助?

需要更多选项?

了解订阅权益、浏览培训课程、了解如何保护设备等。

社区可帮助你提出和回答问题、提供反馈,并听取经验丰富专家的意见。

此信息是否有帮助?

你对语言质量的满意程度如何?
哪些因素影响了你的体验?
按“提交”即表示你的反馈将用于改进 Microsoft 产品和服务。 你的 IT 管理员将能够收集此数据。 隐私声明。

谢谢您的反馈!

×