Symptomer
La oss si at du oppretter en lagret prosedyre som bruker en markør på en tabellvariabel i Microsoft SQL Server 2012 eller SQL Server 2014. I tillegg oppdaterer den lagrede prosedyren tabellen ved å bruke en WHERE-CURRENT OF-setning sammen med markøren.
Den lagrede prosedyren kan for eksempel se omtrent slik ut:
CREATE PROCEDURE dbo.usp_TestSP AS
BEGIN
DECLARE @TableVar TABLE (SomeInt INT NULL)
INSERT @TableVar VALUES (NULL)
DECLARE @curInt INT, @newInt INT
SET @newInt = 1
DECLARE ccc CURSOR LOCAL FOR
SELECT SomeInt FROM @TableVar WHERE SomeInt IS NULL
OPEN ccc
FETCH NEXT FROM ccc INTO @curInt
UPDATE @TableVar SET SomeInt = @newInt
WHERE CURRENT OF ccc
CLOSE ccc
SELECT * FROM @TableVar
END
Når du utfører den lagrede prosedyren ved hjelp av sp_refreshsqlmodule systemets lagrede prosedyre, kan det oppstå et tilgangsbrudd, og du kan få feilmeldinger som ligner på følgende:
Obs!
Msg 596, nivå 21, tilstand 1Kan ikke fortsette kjøringen fordi økten er i drepende tilstand. Msg 0, nivå 20, tilstand 0En alvorlig feil oppstod på gjeldende kommando. Eventuelle resultater bør forkastes.
I denne situasjonen blir feil som ligner på følgende også skrevet til SQL Server-feilloggene:
Obs!
dato time.730 spid51 SqlDumpExceptionHandler: Prosess 51 genererte kritisk unntak c0000005 EXCEPTION_ACCESS_VIOLATION. SQL Server avslutter denne prosessen.
dato time.730 SPID51 * *******************************************************************************
Dato Time.730 SPID51 *
dato time.730 SPID51 * START STABELDUMP:
dato time.730 SPID51 * dato og klokkeslett SPID 51
Dato Time.730 SPID51 *
Dato Time.730 SPID51 *
dato time.730 spid51 * Unntaksadresse = 00007FFC270236D5 Module(sqllang+0000000005036D5)
dato time.730 spid51 * unntakskode = c0000005 EXCEPTION_ACCESS_VIOLATION
dato time.730 spid51 * Tilgangsbrudd oppstod ved å lese adresse 0000006F00620074
dato time.730 spid51 * Inndatabuffer 136 byte –
dato time.730 spid51 * EXECUTE sp_refreshsqlmodule N'[dbo]. [usp_TestSP]'
Dato Time.730 SPID51 *
Dato Time.730 SPID51 *
Oppløsning
Informasjon om kumulativ oppdatering
Dette problemet er løst i følgende oppdateringer:
- Kumulativ oppdatering 13 for SQL Server 2014
- Kumulativ oppdatering 6 for SQL Server 2014 Service Pack 1 (SP1)
- Kumulativ oppdatering 2 for SQL Server 2012 Service Pack 3 (SP3)
- Kumulativ oppdatering 11 for SQL Server 2012 Service Pack 2 (SP2)
Anbefaling: Installer den nyeste kumulative oppdateringen for SQL Server
Hver nye kumulative oppdatering for SQL Server inneholder alle hurtigreparasjoner og alle sikkerhetsrettinger som fulgte med den forrige kumulative oppdateringen. Ta en titt på de nyeste kumulative oppdateringene for SQL Server:
- Den nyeste kumulative oppdateringen for SQL Server 2014
- Den nyeste kumulative oppdateringen for SQL Server 2014 SP1
- Den nyeste kumulative oppdateringen for SQL Server 2012 SP2
- Den nyeste kumulative oppdateringen for SQL Server 2012 SP3
Status
Microsoft har bekreftet at dette er et problem i Microsoft-produktene som er oppført i delen «Gjelder for».
Kilder
Finn ut mer om terminologien som Microsoft bruker til å beskrive programvareoppdateringer.