Microsoft distribuie remedieri Microsoft SQL Server 2008 R2 Service Pack 1 (SP1) ca un fișier descărcabil. Deoarece remedierile sunt cumulative, fiecare lansare nouă conține toate remedierile rapide și toate actualizările de securitate care au fost incluse în versiunea anterioară de actualizare SQL Server 2008 R2 Service Pack 1 (SP1).
Simptome
Atunci când o avertizare de stare de performanță SQL Server este crescută în Microsoft SQL Server 2008 R2, este posibil să primiți următorul mesaj de eroare:
MSG 512, nivel 16, stat 1, procedură sp_sqlagent_get_perf_counters, 40Subquery linie a returnat mai mult de 1 valoare. Acest lucru nu este permis atunci când subinterogarea urmează =,! =, <, <=, >, >= sau când subinterogarea este utilizată ca expresie.
În plus, mesajul de eroare este înregistrat în Jurnalul de erori SQL Server Agent în această situație.Notă Această problemă apare și în Microsoft SQL Server 2008.
Cauză
Această problemă apare deoarece subinterogarea procedurii stocate în sistemul msdb.dbo.sp_sqlagent_get_perf_counters calculează valoarea unui contor incorect. Subinterogarea lipsește o relație de asociere internă pentru coloana [object_name] în starea subinterogării. Prin urmare, mai multe rânduri sunt returnate incorect și apare problema menționată în secțiunea "simptome".Notă Procedura stocată a sistemului msdb.dbo.sp_sqlagent_get_perf_counters rulează atunci când este ridicată o avertizare de stare de performanță SQL Server.
Rezolvare
Informații despre actualizarea cumulativă
Pachetul de actualizare cumulativă 3 pentru SQL Server 2008 R2 SP1
Remedierea pentru această problemă a fost lansată pentru prima dată în pachetul de actualizare cumulativă 3. Pentru mai multe informații despre cum se obține acest pachet de actualizare cumulativă pentru SQL Server 2008 R2 SP1, faceți clic pe următorul număr de articol pentru a vedea articolul în baza de cunoștințe Microsoft:
2591748 Pachetul de actualizare cumulativă 3 pentru SQL Server 2008 R2 SP1Notă Deoarece compilările sunt cumulative, fiecare nouă versiune de actualizare conține toate remedierile rapide și toate actualizările de securitate care au fost incluse în versiunea anterioară de actualizare SQL Server 2008 R2 SP1. Vă recomandăm să luați în considerare aplicarea celei mai recente versiuni de actualizare care conține această remediere rapidă. Pentru mai multe informații, faceți clic pe următorul număr de articol pentru a-l vedea în Baza de cunoștințe Microsoft:
2567616 SQL Server 2008 R2 construiește care au fost lansate după ce s-a lansat SQL Server 2008 R2 SP1
Soluție de evitare
Pentru a rezolva această problemă, actualizați subinterogarea procedurii stocate în sistemul de msdb.dbo.sp_sqlagent_get_perf_counters . Pentru a face acest lucru, adăugați următoarea condiție la clauza Where din cele patru subinterogări care sunt utilizate în calculul coloanei [valoare] :
(spi1.[object_name] = spi2.[object_name])
După ce adăugați condiția, subinterogările seamănă cu următoarele:
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
Stare
Microsoft a confirmat că aceasta este o problemă în produsele Microsoft enumerate în secțiunea „Se aplică la”.