应用对象
SQL Server 2008 R2 Standard SQL Server 2008 R2 Standard Edition for Small Business SQL Server 2008 R2 Developer SQL Server 2008 R2 Enterprise SQL Server 2008 R2 Web SQL Server 2008 R2 Workgroup

Microsoft将Microsoft SQL Server 2008 R2 修补程序分发为一个可下载文件。 由于修补程序是累积的,因此每个新版本都包含以前的 SQL Server 2008 R2 修补程序版本中包含的所有修补程序和所有安全修补程序。

症状

请考虑以下情况:

  • 你有一个Master Data Services (MDS) 模型和实体,该模型和实体在 Microsoft SQL Server 2008 R2 中具有基于域的属性。 基于域的属性设计为自引用同一属性。例如,你有一个具有 ManagerName 属性的 Employee 实体。 ManagerName 属性引用相同的 Employee 实体本身。注意 经理也是一种员工。

  • 在属性上定义了一个派生层次结构,用于显示基于域的属性的递归父/子关系。

  • 加载包含对 MDS 临时表的一个或多个循环引用的数据值。 此行为会导致循环引用,并且 属性中的第一个节点不是圆形的一部分。例如,以下数据模式显示循环引用。 但是,Member1 成员值不是圆的一部分:

    Member1 --manager attribute--> Member2 --manager attribute---> Member3 --manager attribute--> Member2 --manager attribute--> Member3

    insert into mdm.tblStgMemberAttribute(ModelName, EntityName, MemberType_ID, MemberCode, AttributeName, AttributeValue, Status_ID)Values ('EntityTest', 'ModelTest', 1, 'Member3', 'Manager', 'Member2', 0),('EntityTest', 'ModelTest', 1, 'Member2', 'Manager', 'Member3', 0),('EntityTest', 'ModelTest', 1, 'Member3', 'Manager', 'Member2', 0),('EntityTest', 'ModelTest', 1, 'Member2', 'Manager', 'Member1', 0)('EntityTest', 'ModelTest', 1, 'Member1', 'Manager', 'NULL', 0)
  • 使用 MDS 暂存过程,使用以下方法之一将数据值加载到实体中:

    • 运行 Exec [mdm]。[udpStagingSweep] 过程,方法是使用必要的参数来处理暂存数据。

    • 单击“ 集成管理 ”以访问 MDS 网站主页。 在 “导入导出 ”页上的“ 未批处理的暂存记录 ”部分标题下,单击 “齿轮图标 ”以处理特定模型和版本的记录。

在此方案中,当后台进程内部调用 [mdm] 时,过渡过程中的后台进程可能会遇到无限循环。[udpMemberRecursiveCircularCheck] 过程。

原因

出现此问题的原因是 udpStagingSweep 和 udpStagingMemberAttributeSave 过程为每个临时行调用一次 udpMemberRecursiveCircularCheck 过程。 此行为应检查基于域的属性值,如果暂存行导致循环引用和现有数据,则返回错误。 检查所有暂存行后,将收到以下结果:

  • 将应用没有错误的暂存行。

  • 带有错误的暂存行使用错误代码进行记录。

如果“症状”部分中描述的条件为 true,则为 [mdm]。[udpMemberRecursiveCircularCheck] 过程无限期循环,直到服务器资源耗尽或发生超时。

解决方法

累积更新信息

SQL Server 2008 R2 Service Pack 1

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

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

2567616 SQL Server 2008 R2 Service Pack 1 发布后发布的 SQL Server 2008 R2 版本

状态

Microsoft 已经确认这是一个列于“适用范围”部分的 Microsoft 产品问题。

解决方法

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

  • 若要防止此问题,请执行以下步骤:

    1. 在运行暂存进程之前,手动查看要插入到临时表中的成员数据值。

    2. 确保任何基于域的属性的所有成员值不包含“症状”部分中所述的循环引用

  • 当出现“症状”部分中描述的问题时,请按照以下步骤更正问题:

    1. 标识在无限循环中运行的会话。

    2. 终止会话以停止循环。

    3. 在再次处理循环引用之前,请从暂存表中删除循环引用值。

注意

  • 若要确定要终止的会话,请使用以下方法之一:

    • 在 Microsoft SQL Server Management Studio 中使用活动监视器。

    • 从 sys.sysprocesses 或sys.dm_exec_requests动态管理视图选择 (DMV) ,以确定在 MDS 数据库中工作的会话,其中 CPU 和时间正在迅速增加。 确保会话上运行的当前查询与“原因”部分中所述的过程名称匹配。

  • 若要标识会话当前正在运行的过程,请使用以下方法之一:

    • 右键单击活动监视器进程列表中的每个进程上的 “详细信息 ”菜单。

    • 使用以下参数之一:

      • DBCC INPUTBUFFER (spid) 命令以及会话 ID。

      • 使用 DMV 输出时,SELECT * FROM sys.dm_exec_sql_text (sqlhandle) 函数以及匹配的 SQL 句柄参数。

参考

有关如何在 SQL Server Management Studio 中打开活动监视器的详细信息,请访问以下 MSDN 网站:

如何在 SQL Server Management Studio 中打开活动监视器有关 KILL 语法的详细信息,请访问以下 MSDN 网站:

有关 KILL 语法的一般信息有关sys.dm_exec_requests DMV 的详细信息,请访问以下 MSDN 网站:

有关sys.dm_exec_requests DMV 的一般信息有关sys.dm_exec_sql_text DMV 的详细信息,请访问以下 MSDN 网站:

有关 sys.dm_exec_sql_text DMV 的一般信息有关 DBCC INPUTBUFFER 命令的详细信息,请访问以下 MSDN 网站:

有关 DBCC INPUTBUFFER 命令的一般信息有关SQL Server的增量服务模型的详细信息,请单击下面的序列号以查看Microsoft知识库中的文章:

935897 SQL Server团队提供了增量服务模型,用于为报告的问题提供修补程序有关SQL Server更新的命名架构的详细信息,请单击以下端口号以查看Microsoft知识库中的文章:

822499 Microsoft SQL Server软件更新包的新命名架构有关软件更新术语的详细信息,请单击以下版本号以查看Microsoft知识库中的文章:

824684 有关用于描述 Microsoft 软件更新标准术语的说明

需要更多帮助?

需要更多选项?

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