KB4058565 – ÅTGÄRDAT: Kontrollfel vid körning av en lagrad procedur som refererar till ett stort objekt i SQL Server 2014, 2016 och 2017

Gäller för
SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Enterprise Core - duplicate (do not use) SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2017 Developer on Windows SQL Server 2017 Enterprise on Windows SQL Server 2017 Enterprise Core on Windows SQL Server 2017 Standard on Windows SQL Server 2016 Service Pack 1 SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use)

Symptom

Ett kontrollfel kan uppstå när Microsoft SQL Server upprepade gånger kör en lagrad procedur som utför följande:

  • Tar ett stort objekt, t.ex . varchar(max) eller varbinary(max), som ett argument, och
  • skapar en temporär tabell som är begränsad till utförandet av proceduren och
  • Använder argumentet stort objekt i den tillfälliga tabellen.

Du kan hitta kontrollfelet som liknar följande i felloggen för SQL Server:

Datum/tid SPID Fel: 17065, Allvarlighetsgrad: 16, Tillstånd: 1.

Datum/tid SPID SQL Server Assertion: File: FilePath\FileName, line = LineNumber Failed Assertion = 'fFalse' Försök att komma åt utgångna blobreferenser (1). Det här felet kan vara tidsrelaterat. Om felet kvarstår efter att instruktionen har körts på nytt använder du DBCC CHECKDB för att kontrollera om det finns strukturell integritet i databasen eller startar om servern för att säkerställa att datastrukturerna i minnet inte är skadade.

Datum/tid SPID Fel: 3624, Allvarlighetsgrad: 20, Tillstånd: 1.

Datum/tid SPID En systemkontroll har misslyckats. Kontrollera felloggen för SQL Server för mer information. Vanligtvis orsakas ett kontrollfel av ett programfel eller skadade data. Om du vill söka efter skadade databaser kan du köra DBCC CHECKDB. Om du gick med på att skicka dumpar till Microsoft under installationen skickas en minidump till Microsoft. En uppdatering kan vara tillgänglig från Microsoft i den senaste Service Pack-versionen eller i en snabbkorrigering från teknisk support.

Orsak

SQL Server har intern logik för att inaktivera cachelagring av frågor som refererar till stora objekt så att efterföljande körningar inte refererar till de LOBs (som skapades under tidigare körningar och därför är ogiltiga för efterföljande körningar). Den logiken hanterade inte fallet med uppskjuten namnmatchning (DNR) på tillfälliga tabeller som gjorde att dessa planer cachelagrades. Begränsade temporära tabeller är dyra att skapa och SQL Server cachelagrar dem för återanvändning i efterföljande körningar. Detta förhindrar omkompilering av sådana frågor på grund av schemaändringar.

Läs mer om uppskjuten namnmatchning.

Lösning

Det här problemet åtgärdas i följande kumulativa uppdateringar för SQL Server:

Kumulativ uppdatering 8 för SQL Server 2016 SP1

Kumulativ uppdatering 4 för SQL Server 2017

Kumulativ uppdatering 10 för SQL Server 2014 Service Pack 2

Om kumulativa uppdateringar för SQL Server

Varje ny kumulativ uppdatering för SQL Server innehåller alla snabbkorrigeringar och säkerhetskorrigeringar som fanns i föregående version. Kolla in den senaste kumulativa uppdateringen för SQL Server:

Senaste kumulativa uppdateringen för SQL Server 2016

Senaste kumulativa uppdateringen för SQL Server 2017

senaste kumulativa uppdateringar för SQL Server 2014

Status

Microsoft har bekräftat att detta är ett problem i de Microsoft-produkter som anges i avsnittet "Gäller".

Referenser

Läs mer om den terminologi som Microsoft använder för att beskriva programuppdateringar.