A Microsoft distribui as correções do Microsoft SQL Server 2012 como um ficheiro transferível. Como as correções são cumulativas, cada nova versão contém todos os hotfixes e todas as correções de segurança que foram incluídas com o anterior lançamento de correção SQL Server 2012.
Sintomas
Considere o seguinte cenário:
-
Cria um ou mais projetos de qualidade de dados no Cliente de Qualidade de Dados no Microsoft SQL Server 2012.
-
Instala a Atualização Cumulativa 1 para o SQL Server 2012 (SQL Server 2012 CU1) e depois executou o ficheiro DQSInstaller.exe para atualizar os catálogos de Serviços de Qualidade de Dados (DQS) e para adicionar novos objetos.
-
Tenta eliminar um dos projetos de qualidade de dados criados utilizando o Data Quality Client.
Neste cenário, o Cliente de Qualidade de Dados deixa de responder e o motor de base de dados sql Server introduz um loop infinito. Adicionalmente, o processo sqlservr.exe experimenta uma elevada utilização da CPU. Notas
-
Para recuperar deste problema, reinicie o Cliente de Qualidade de Dados e O DQS.
-
Este problema só ocorre se o projeto de qualidade de dados tiver sido criado antes de instalar o SQL Server 2012 CU1.
Causa
Este problema ocorre devido a um loop infinito num procedimento armazenado pelo sistema que é causado pela atualização incorreta de um contador de loops.NotaEste problema ocorre devido a uma regressão no SQL Server 2012 CU1.
Resolução
Informação de atualização cumulativa
Informações do pacote de serviços para SQL Server 2012
Para resolver este problema, obtenha o mais recente pacote de serviços para o SQL Server 2012. Para mais informações, clique no seguinte número de artigo para ver o artigo na Base de Conhecimento da Microsoft:
2755533 Como obter o mais recente pacote de serviços para SQL Server 2012
SQL Server 2012
A correção para este problema foi lançada pela primeira vez na Cumulativa Update 2 para o SQL Server 2012. Para obter mais informações sobre como obter este pacote de atualização cumulativa para o SQL Server, clique no seguinte número de artigo para ver o artigo na Base de Conhecimento da Microsoft:
2703275 Pacote de atualização cumulativo 2 para SQL Server 2012Nota Como as construções são cumulativas, cada nova versão de correção contém todos os hotfixes e todas as correções de segurança que foram incluídas com a versão anterior da correção do SQL Server. Recomendamos que considere aplicar o mais recente lançamento de correção que contém este hotfix. Para mais informações, clique no número de artigo que se segue para ver o artigo na Base de Dados de Conhecimento Microsoft:
2692828 O SQL Server 2012 constrói que foram lançados após o lançamento do SQL Server 2012
Solução
Para contornar esta questão, utilize um dos seguintes métodos.Método 1Para adicionar um procedimento falso que permite que o ciclo infinito do procedimento armazenado continue e saia corretamente, siga estes passos:
-
Faça a seguinte consulta para identificar o nome do esquema para o projeto afetado que tentou eliminar:
SELECT 'KnowledgeManagement'+CAST(ID AS NVARCHAR) AS SchemaName, Name FROM DQS_MAIN.dbo.A_KNOWLEDGEBASE WHERE TYPE=2
-
Utilize o valor SchemaName que é devolvido e, em seguida, execute declarações que se assemelham ao seguinte no SQL Server Management Studio para fornecer o nome de esquema correspondente e o ID do Projeto de Qualidade de Dados. Será criado um novo procedimento falso para o esquema e o projeto de qualidade de dados correspondente. Portanto, o loop infinito prossegue corretamente.
USE DQS_PROJECTSGOCREATE PROCEDURE DQProject<ID>.NewIndexParseTrigramsFromLexiconAS BEGINPRINT 'THIS IS A DUMMY PROCEDURE TO MAKE DELETE WORK for Microsoft KB Article 2705571';END
Note <ID> representa o ID interno do Projeto de Qualidade de Dados que está a ser eliminado.
-
Verifique se o projeto de qualidade de dados é eliminado do Cliente de Qualidade de Dados, como esperado.
Método 2Se tiver de desligar rapidamente o procedimento de looping para conservar os recursos da CPU, faça as seguintes declarações para identificar a sessão correta. No entanto, matar o procedimento de looping não elimina o projeto de qualidade de dados de forma limpa. As seguintes declarações Transact-SQL ajudam a identificar e matar a sessão correta. Se estiver em execução mais de uma sessão do Data Quality Client, poderá ter de executar as declarações várias vezes:
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;
Nota Se utilizar o método 2 para eliminar a ligação DQS, poderá receber a seguinte mensagem de erro no Cliente de Qualidade de Dados:
Serviços de qualidade de dados do sql servidor--------------------------------------------------------------------------------<>messageId : ApplicationUnhandledExceptionSleslesleslesleslesexlesexlesexle. Para mais detalhes, consulte o registo do cliente dos Serviços de Qualidade de Dados.--------------------------------------------------------------------------------System.Data.SqlClient.SqlException (0x80131904): Ocorreu um erro grave no comando atual. Os resultados, se houver, devem ser descartados.
Estado
A Microsoft confirmou que este problema ocorre nos produtos da Microsoft listados na secção "Aplica-se a".
Referências
Para obter mais informações sobre como atualizar o DQS, aceda ao seguinte website da Microsoft TechNet: