在 SQL Server 中的合并复制同步期间合并代理程序可能会失败

重要说明:本文是由 Microsoft 机器翻译软件进行的翻译并可能由 Microsoft 社区通过社区翻译机构(CTF)技术进行后期编辑,或可能是由人工进行的翻译。Microsoft 同时向您提供机器翻译、人工翻译及社区后期编辑的文章,以便对我们知识库中的所有文章以多种语言提供访问。翻译的文章可能存在词汇、句法和/或语法方面的错误。Microsoft 对由于内容的误译或客户对内容的使用所导致的任何不准确、错误或损失不承担责任。

点击这里察看该文章的英文版: 2733630
症状
在 Microsoft SQL Server 2008年中的合并复制同步和更高版本的 SQL Server 中,合并代理程序可能会失败。此外,您收到以下错误消息:
尚未检测到基于保持期的元数据清除已删除订阅服务器上的更改的元数据不发送到发布服务器之后,合并代理失败。必须重新初始化订阅 (不上载)。(来源: MSSQL_REPL,错误号: MSSQL_REPL-2147199401)

获得帮助: http://help/MSSQL_REPL-2147199401

有多个原因可能会出现此问题。其中包括在某些情况下预期的许多原因。若要确定是否有意外遇到此错误,请检查"原因"一节中描述的元数据详细信息。
原因
在订阅服务器上的以下系统表中,可以找到此问题的原因:
  • dbo.sysMergeSubscriptions
  • dbo。MsMerge_Genhistory

请确保合并代理程序不能处于正在同步状态。然后,运行下面的查询中,检查的结果:
从 SubscriberDB.dbo.sysMergeSubscriptions 中选择 sentgen,pubid = subid 和 sentgen 不为空


查询结果

Sentgen列中将标记发送到发布服务器的订阅服务器的更改的最早的组。如果返回多个值,检查以确保您正在查看的元数据为正确的发布的 dbo.sysMergeSubscriptions 表中的其他列。接下来,使用下面的查询返回下面的查询中的值:
选择顶部 20 * SubscriberDB.dbo.MSmerge_genhistory 从地方代 > = sentgen_value 通过生成顺序
查询的输出应如下所示:

生成的查询结果

当满足下列所有条件时,您可能意外地遇到错误:
  • 第一行中的生成列中的值是略大于前一个查询中的sentgen值。
  • Genstatus列中的值为4
  • Changecount列中的值为0

注意:第一行的coldate列的值也是通常大大早于其他行中该列的值。
解决方案
要解决此问题,请重新初始化订阅服务器上生成错误。

在某些情况下,您可能能够解决这一问题而无需完全重新初始化。请联系 Microsoft 客户支持服务有关可能的解决方法的信息。

若要避免将来出现此问题,请应用以下修补程序,具体取决于您的 SQL Server 版本之一。

累积更新信息

SQL Server 2008

没有无 SQL Server 2008年中的此问题的修补程序。

SQL Server 2008 R2 Service Pack 2

累积更新 3 中首次发布此问题的修补程序。有关如何为 SQL Server 2008 R2 Service Pack 2 中获取此累积更新包的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
2754552 对于 SQL Server 2008 R2 Service Pack 2 的累积更新包 3
注意: 生成是累积性的因为每个新修补程序版本包含的所有修补程序,包含上一个 SQL Server 2008 R2 Service Pack 2 的所有安全修补程序的修补都程序版本。我们建议您考虑将应用包含此修复程序的最新的修补程序版本。有关详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
2730301 在SQL Server 2008 R2 Service Pack 2 发布后,SQL Server 2008 R2 生成发布

SQL Server 2012

累积更新 4 中首次发布此问题的修补程序。有关如何为 SQL Server 2012获取此累积更新包的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
2758687 对于 SQL Server 2012年的累积更新包 4
注意: 因为版本具有累积性,所以每个新修补程序版本包含的所有修补程序和所有安全修复程序都包含上一个 SQL Server 2012 的修补程序版本。我们建议您考虑将应用包含此修复程序的最新的修补程序版本。有关详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
2692828 在SQL Server 2012发布后发布了 SQL Server 2012 生成

SQL Server 2008 R2 Service Pack 1

累积更新 8 中首次发布此问题的修补程序。有关如何获取此累积更新包的 SQL Server 2008 R2 Service Pack 1 的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
2723743 SQL Server 2008 R2 sp1 的累积更新包 8
注意: 生成是累积性的因为每个新修补程序版本包含的所有修补程序和附带上一个 SQL Server 2008 R2 Service Pack 1 的所有安全修补程序的修补都程序版本。我们建议您考虑将应用包含此修复程序的最新的修补程序版本。有关详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
2567616 在 SQL Server 2008 R2 SP1 发布后SQL Server 2008 R2 生成发布

警告:本文已自动翻译

属性

文章 ID:2733630 - 上次审阅时间:10/22/2015 20:02:00 - 修订版本: 6.0

Microsoft SQL Server 2008 Developer, Microsoft SQL Server 2008 Enterprise, Microsoft SQL Server 2008 Express, Microsoft SQL Server 2008 R2 Datacenter, Microsoft SQL Server 2008 R2 Developer, Microsoft SQL Server 2008 R2 Enterprise, Microsoft SQL Server 2008 R2 Express, Microsoft SQL Server 2008 R2 Parallel Data Warehouse, Microsoft SQL Server 2008 R2 Standard, Microsoft SQL Server 2008 R2 Web, Microsoft SQL Server 2008 R2 Workgroup, Microsoft SQL Server 2008 Standard, Microsoft SQL Server 2008 Web, Microsoft SQL Server 2008 Workgroup, Microsoft SQL Server 2012 Developer, Microsoft SQL Server 2012 Enterprise, Microsoft SQL Server 2012 Enterprise Core, Microsoft SQL Server 2012 Express, Microsoft SQL Server 2012 Standard, Microsoft SQL Server 2012 Web, Microsoft SQL Server 2014 Developer, Microsoft SQL Server 2014 Enterprise, Microsoft SQL Server 2014 Enterprise Core, Microsoft SQL Server 2014 Express, Microsoft SQL Server 2014 Standard, Microsoft SQL Server 2014 Web

  • kbtshoot kbexpertiseinter kbprb kbsurveynew kbmt KB2733630 KbMtzh
反馈