A Microsoft distribui as correções do Microsoft SQL Server 2008 R2 Service Pack 1 (SP1) como um ficheiro transferível. Como as correções são cumulativas, cada nova versão contém todos os hotfixes e todas as atualizações de segurança que foram incluídas com o anterior lançamento da atualização do SqL Server 2008 R2 Service Pack 1 (SP1).
Sintomas
Quando um alerta de condição de desempenho do SQL Server for levantado no Microsoft SQL Server 2008 R2, poderá receber a seguinte mensagem de erro:
Msg 512, Nível 16, Estado 1, Procedimento sp_sqlagent_get_perf_counters, Linha 40Subquery devolveu mais de 1 valor. Isto não é permitido quando o subquery segue =, !=, <, <= , >, >= ou quando o subquery é usado como expressão.
Além disso, a mensagem de erro é registada no registo de erro do Agente do Servidor SQL nesta situação.Nota Este problema também ocorre no Microsoft SQL Server 2008.
Causa
Esta questão ocorre porque a subconseção do procedimento armazenado msdb.dbo.sp_sqlagent_get_perf_counters do sistema calcula incorretamente o valor de um contador. O subquery carece de uma relação interior de união para a coluna [object_name] na condição do subquery. Portanto, várias linhas são devolvidas incorretamente, e o problema que é mencionado na secção "Sintomas" ocorre.Nota O procedimento msdb.dbo.sp_sqlagent_get_perf_counters armazenado do sistema funciona quando um alerta de condição de desempenho do SQL Server é aumentado.
Resolução
Informação de atualização cumulativa
Pacote de atualização cumulativo 3 para SQL Server 2008 R2 SP1
A correção para este problema foi lançada pela primeira vez no pacote de atualização cumulativo 3. Para obter mais informações sobre como obter este pacote de atualização cumulativa para SQL Server 2008 R2 SP1, clique no seguinte número de artigo para ver o artigo na Base de Conhecimento da Microsoft:
2591748 Pacote de atualização cumulativo 3 para SQL Server 2008 R2 SP1Nota Como as construções são cumulativas, cada nova versão da atualização contém todos os hotfixes e todas as atualizações de segurança que foram incluídas com o anterior lançamento da atualização R2 SP1 do SQL Server 2008. Recomendamos que considere aplicar o mais recente lançamento de atualizaçã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:
2567616 O SQL Server 2008 R2 constrói que foram lançados após o lançamento do SQL Server 2008 R2 SP1
Solução
Para contornar este problema, atualize o subquery do procedimento de msdb.dbo.sp_sqlagent_get_perf_counters do sistema armazenado. Para tal, adicione a seguinte condição à cláusula WHERE dos quatro subqueries que são utilizados no cálculo da coluna [valor]:
(spi1.[object_name] = spi2.[object_name])
Depois de adicionar a condição, os subqueries assemelham-se ao seguinte:
SELECT CASE spi2.cntr_value WHEN 0 THEN 1 ELSE spi2.cntr_value ENDFROM sys.dm_os_performance_counters spi2WHERE (spi1.[object_name] = spi2.[object_name])AND (spi1.counter_name + ' ' = SUBSTRING(spi2.counter_name, 1, PATINDEX('% Base%', spi2.counter_name)))AND (spi1.instance_name = spi2.instance_name)AND (spi2.cntr_type = @perfTypeLargeRawBase
Estado
A Microsoft confirmou que este problema ocorre nos produtos da Microsoft listados na secção "Aplica-se a".