Applies ToSQL Server 2008 Enterprise SQL Server 2008 R2 Datacenter SQL Server 2008 R2 Developer SQL Server 2008 R2 Enterprise

Microsoft distribue les correctifs Microsoft SQL Server 2008 R2 Service Pack 1 (SP1) comme un fichier téléchargeable. Dans la mesure où les correctifs sont cumulatifs, chaque nouvelle version contient tous les correctifs et toutes les mises à jour de sécurité qui ont été incluses dans la mise à jour précédente de SQL Server 2008 R2 Service Pack 1 (SP1).

Symptômes

Lorsqu’une alerte de condition de performance SQL Server est déclenchée dans Microsoft SQL Server 2008 R2, vous pouvez recevoir le message d’erreur suivant :

MSG 512, niveau 16, état 1, procédure sp_sqlagent_get_perf_counters, la 40Subquery de ligne a renvoyé plus de 1 valeur. Cette opération n’est pas autorisée lorsque la sous-requête suit =, ! =, <, <= >, >= ou lorsque la sous-requête est utilisée en tant qu’expression.

Par ailleurs, le message d’erreur est consigné dans le journal des erreurs de l’agent SQL Server dans cette situation.Remarque Ce problème survient également dans Microsoft SQL Server 2008.

Cause

Ce problème survient parce que la sous-requête de la procédure stockée du système msdb.dbo.sp_sqlagent_get_perf_counters calcule la valeur d’un compteur de manière incorrecte. La sous-requête n’a pas de relation de jointure interne pour la colonne [object_name] dans la condition de la sous-requête. C’est pourquoi les lignes multiples sont retournées de façon incorrecte et le problème mentionné dans la section « symptômes » se produit.Remarque La procédure stockée système msdb.dbo.sp_sqlagent_get_perf_counters s’exécute lorsqu’une alerte de condition de performance SQL Server est déclenchée.

Résolution

Informations sur les mises à jour cumulatives

Package de mise à jour cumulative 3 pour SQL Server 2008 R2 SP1

Le correctif de ce problème a été émis pour la première fois dans le package de mise à jour cumulative 3. Pour plus d’informations sur la façon d’obtenir ce package de mise à jour cumulative pour SQL Server 2008 R2 SP1, cliquez sur le numéro ci-dessous pour consulter l’article de la base de connaissances Microsoft :

2591748 Package de mise à jour cumulative 3 pour SQL Server 2008 R2 SP1Remarque Dans la mesure où les builds sont cumulatives, chaque nouvelle version de mise à jour contient tous les correctifs et toutes les mises à jour de sécurité qui ont été incluses dans la version précédente de la mise à jour SQL Server 2008 R2 SP1. Nous vous recommandons d’appliquer la version la plus récente de la mise à jour qui contient ce correctif. Pour plus d'informations, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :

2567616 Builds SQL Server 2008 R2 publiées après la sortie de SQL Server 2008 R2 SP1

Solution de contournement

Pour contourner ce problème, procédez à la mise à jour de la sous-requête de la procédure stockée système msdb.dbo.sp_sqlagent_get_perf_counters . Pour ce faire, ajoutez la condition suivante à la clause Where des quatre sous-requêtes qui sont utilisées dans le calcul de la colonne [value] :

(spi1.[object_name] = spi2.[object_name])

Après avoir ajouté la condition, les sous-requêtes se présentent comme suit :

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

Statut

Microsoft a confirmé l'existence de ce problème dans les produits Microsoft figurant dans la liste des produits concernés par cet article.

Besoin d’aide ?

Vous voulez plus d’options ?

Explorez les avantages de l’abonnement, parcourez les cours de formation, découvrez comment sécuriser votre appareil, etc.