KB4058565 – KORREKTUR: Assertionsfehler beim Ausführen einer gespeicherten Prozedur, die auf ein großes Objekt in SQL Server 2014, 2016 und 2017 verweist

Gilt 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)

Symptome

Ein Assertionsfehler kann auftreten, wenn Microsoft SQL Server wiederholt eine gespeicherte Prozedur ausführt, die Folgendes ausführt:

  • Verwendet ein großes Objekt, z. B. varchar(max) oder varbinary(max), als Argument, und
  • Erstellt eine temporäre Tabelle, die auf die Ausführung der Prozedur beschränkt ist, und
  • Verwendet das Argument large object in der temporären Tabelle.

Möglicherweise finden Sie den Assertionsfehler, der dem folgenden ähnelt, im SQL Server Fehlerprotokoll:

Datum/Uhrzeit SPID Fehler: 17065, Schweregrad: 16, Status: 1.

Date/Time SPID SQL Server Assertion: File: FilePath\FileName, line = LineNumber Failed Assertion = 'fFalse' Versuch, auf abgelaufenes Blobhandle zuzugreifen (1). Dieser Fehler kann zeitlich bedingt sein. Wenn der Fehler nach dem erneuten Ausführen der Anweisung weiterhin auftritt, verwenden Sie DBCC CHECKDB, um die Datenbank auf strukturelle Integrität zu überprüfen, oder starten Sie den Server neu, um sicherzustellen, dass die In-Memory-Datenstrukturen nicht beschädigt sind.

Datum/Uhrzeit SPID Fehler: 3624, Schweregrad: 20, Status: 1.

Datum/Uhrzeit SPID Eine Überprüfung der Systemassertion ist fehlgeschlagen. Weitere Informationen finden Sie im SQL Server Fehlerprotokoll. In der Regel wird ein Assertionsfehler durch einen Softwarefehler oder eine Datenbeschädigung verursacht. Erwägen Sie die Ausführung von DBCC CHECKDB, um nach einer Beschädigung der Datenbank zu suchen. Wenn Sie während des Setups zugestimmt haben, Dumps an Microsoft zu senden, wird ein Minidump an Microsoft gesendet. Möglicherweise ist ein Update von Microsoft im neuesten Service Pack oder in einem Hotfix vom technischen Support verfügbar.

Ursache

SQL Server verfügt über interne Logik zum Deaktivieren des Zwischenspeicherns von Abfragen, die auf große Objekte verweisen, sodass nachfolgende Ausführungen nicht auf diese LOBs verweisen (die während früherer Ausführungen erstellt wurden und daher für nachfolgende Ausführungen ungültig sind). Diese Logik hat den Fall der verzögerten Namensauflösung (Deferred Name Resolution , DNR) für temporäre Tabellen nicht behandelt, die dazu geführt hat, dass diese Pläne zwischengespeichert wurden. Bereichsbezogene temporäre Tabellen sind teuer zu erstellen, und SQL Server sie zur Wiederverwendung in nachfolgenden Ausführungen zwischenspeichern. Dadurch wird die Neukompilierung solcher Abfragen aufgrund von Schemaänderungen verhindert.

Weitere Informationen finden Sie unter Verzögerte Namensauflösung.

Lösung

Dieses Problem wurde in den folgenden kumulativen Updates für SQL Server behoben:

Kumulatives Update 8 für SQL Server 2016 SP1

Kumulatives Update 4 für SQL Server 2017

Kumulatives Update 10 für SQL Server 2014 Service Pack 2

Informationen zu kumulativen Updates für SQL Server

Jedes neue kumulative Update für SQL Server enthält alle Hotfixes und Sicherheitsfixes, die im vorherigen Build enthalten waren. Sehen Sie sich das neueste kumulative Update für SQL Server an:

Neuestes kumulatives Update für SQL Server 2016

Neuestes kumulative Update für SQL Server 2017

Neueste kumulative Updates für SQL Server 2014

Status

Microsoft hat bestätigt, dass dies ein Problem bei den Microsoft-Produkten ist, die im Abschnitt „Gilt für“ aufgeführt sind.

Referenzmaterial

Erfahren Sie mehr über die Terminologie , die Microsoft zum Beschreiben von Softwareupdates verwendet.