Microsoft 将 Microsoft SQL Server 2012 修复分发为一个可下载文件。 由于修补程序是累积的,因此每个新版本都包含以前的 SQL Server 2012 修复版本附带的所有修补程序和所有安全修补程序。
症状
请考虑以下情况:
-
在 Microsoft SQL Server 2012 中的数据质量客户端创建一个或多个数据质量项目。
-
为 SQL Server 2012 安装累积更新1(SQL Server 2012 CU1),然后运行 DQSInstaller 文件以升级 Data Quality Services (DQS)目录并添加新对象。
-
您尝试使用数据质量客户端删除其中一个已创建的数据质量项目。
在此方案中,数据质量客户端停止响应,SQL Server 数据库引擎进入无限循环。 此外,sqlservr 进程还体验高 CPU 使用率。 注意
-
若要从此问题中恢复,请重新启动数据质量客户端和 DQS。
-
仅当在安装 SQL Server 2012 CU1 之前创建了数据质量项目时,才会出现此问题。
原因
之所以会出现此问题,是因为更新循环计数器所导致的系统存储过程中出现无限循环。注意出现此问题的原因是 SQL Server 2012 CU1 中的回归。
解决方案
累积更新信息
SQL Server 2012 的 Service pack 信息
若要解决此问题,请获取最新的 SQL Server 2012 服务包。有关详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
2755533 如何获取最新的 SQL Server 2012 服务包
SQL Server 2012
此问题的修补程序首次在 SQL Server 2012 的累积更新2中发布。有关如何获取此累积更新包的 SQL Server 的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
2703275 SQL Server 2012 累积更新包2注意 由于这些版本是累积的,因此每个新的修复版本都包含了以前的 SQL Server 修复版本附带的所有修补程序和所有安全修补程序。 我们建议你考虑应用包含此修补程序的最新修复版本。 有关更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
2692828 在 SQL Server 2012 发布后发布的 SQL Server 2012 版本
解决方法
要解决此问题,请使用下列方法之一。方法 1若要添加一个哑元过程以使存储过程无限循环继续,然后正确退出,请按照下列步骤操作:
-
运行以下查询以确定你尝试删除的受影响项目的架构名称:
SELECT 'KnowledgeManagement'+CAST(ID AS NVARCHAR) AS SchemaName, Name FROM DQS_MAIN.dbo.A_KNOWLEDGEBASE WHERE TYPE=2
-
使用返回的 SchemaName 值,然后在 SQL Server Management Studio 中运行与以下内容类似的语句,以提供匹配的架构名称和数据质量项目 ID。 将为架构和相应的数据质量项目创建新的伪过程。 因此,无限循环会正常继续。
USE DQS_PROJECTSGOCREATE PROCEDURE DQProject<ID>.NewIndexParseTrigramsFromLexiconAS BEGINPRINT 'THIS IS A DUMMY PROCEDURE TO MAKE DELETE WORK for Microsoft KB Article 2705571';END
注意 <ID> 表示正在删除的数据质量项目的内部 ID。
-
验证是否按预期从数据质量客户端中删除数据质量项目。
方法2如果必须快速终止循环过程以节省 CPU 资源,请运行以下语句来确定正确的会话。 但是,终止循环过程不会彻底删除数据质量项目。 以下 Transact-sql 语句可帮助识别和终止正确的会话。 如果正在运行多个来自数据质量客户端的会话,则可能需要多次运行语句:
DECLARE @session smallint, @text nvarchar(2000), @killcommand nvarchar(200)SELECT TOP 1 @session=s.session_id, @text=st.textFROM sys.dm_exec_sessions sFULL OUTER JOIN sys.dm_exec_requests r ON s.session_id=r.session_idCROSS APPLY sys.dm_exec_sql_text(r.sql_handle) AS stWHERE program_name like 'DQ Services Client: Client Id = %, KB Id = %, Proxy = KnowledgebaseManagementEntryPointClient'AND s.status='running';SELECT 'Killing this DQS session:', @session SessionID, @text QueryText;SET @killcommand=N'Kill '+ cast(@session as nvarchar)+';'EXEC sp_executesql @killcommand;
注意 如果使用方法2来终止 DQS 连接,则在数据质量客户端中可能会收到以下错误消息:
SQL Server Data Quality Services--------------------------------------------------------------------------------<MessageId>:发生了 ApplicationUnhandledExceptionAn 未处理的异常。 有关更多详细信息,请参阅 Data Quality Services 客户端日志--------------------------------------------------------------------------------。 SqlClient (0x80131904):当前命令出现严重错误。 应丢弃结果(如果有)。
状态
Microsoft 已确认这是在“适用范围”部分中列出的 Microsoft 产品存在的问题。
参考
有关如何升级 DQS 的详细信息,请转到以下 Microsoft TechNet 网站: