KB2878968 – FIX: Es kann zu einer Beschädigung des nicht gruppierten Index kommen, wenn Sie eine komplexe UPDATE-Anweisung zusammen mit einem NOLOCK-Hinweis für eine Tabelle in SQL Server

Gilt für
SQL Server 2008 Service Pack 3 SQL Server 2008 Enterprise SQL Server 2008 Developer SQL Server 2008 Standard SQL Server 2008 R2 Datacenter SQL Server 2008 R2 Developer SQL Server 2008 R2 Enterprise SQL Server 2008 R2 Standard SQL Server 2008 R2 Web SQL Server 2008 R2 Workgroup SQL Server 2012 Developer SQL Server 2012 Enterprise SQL Server 2012 Standard SQL Server 2012 Web SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use)

Symptome

Wenn Sie eine komplexe UPDATE-Anweisung zusammen mit einem NOLOCK-Hinweis für eine Tabelle in Microsoft SQL Server 2008, SQL Server 2012, SQL Server 2008 R2 oder SQL Server 2014 ausführen, kann es zu einer Beschädigung des nicht gruppierten Index kommen. Zusätzlich kann die folgende Fehlermeldung im SQL Server Fehlerprotokoll protokolliert werden:

Hinweis

<Datum><Uhrzeit> SPID # Fehler: 8646, Schweregrad: 21, Zustand: 1.
<Datum><Uhrzeit> spid # Indexeintrag in Index-ID 3 der Tabelle 2102402659 in Datenbank "<DatabaseName>" wurde nicht gefunden. Der angegebene Index ist beschädigt oder es liegt ein Problem mit dem aktuellen Updateplan vor. Führen Sie DBCC CHECKDB oder DBCC CHECKTABLE aus. Wenn das Problem weiterhin besteht, wenden Sie sich an den Produktsupport.
<Datum><Uhrzeit> spid # Mit 'dbghelp.dll' Version '4.0.5'
<Datum><Uhrzeit> spid # **Dumpthread - spid = 0, EC = 0x0000000BD70624C0
<Datum><Uhrzeit> SPID # ***Stack-Speicherabbild, das an Y:\MSSQL\MSSQL10.MSSQLSERVER\MSSQL\LOG\SQLDump0003.txt gesendet wird
<Datum><Uhrzeit> SPID # * *******************************************************************************
<Datum><Uhrzeit> SPID # *
<Datum><Uhrzeit> SPID # * BEGIN STACK DUMP:
<Datum><Uhrzeit> spid # * <Datum><Uhrzeit> SPID#
<Datum><Uhrzeit> SPID # *
<Datum><Uhrzeit> spid # * CPerIndexMetaQS::ErrorAbort - Indexbeschädigung
<Datum><Uhrzeit> SPID # *

Hinweis: Sie können einen NOLOCK-Hinweis auf Quelltabellen in einer Anweisung anwenden. Sie können jedoch keinen NOLOCK-Hinweis auf Zieltabellen in einer Anweisung anwenden.

Ursache

Dieses Problem tritt auf, weil der NOLOCK-Hinweis dazu führt, dass die Abfrage Werte in der Tabelle falsch liest, wenn die Abfrage dieselben Werte mehrmals liest.

Lösung

Das Problem wurde erstmals im folgenden kumulativen Update von SQL Server behoben.

Kumulatives Update 1 für SQL Server 2014 /de-de/help/2931693

Kumulatives Update 38 für SQL Server 2012 /de-de/help/2908007

Kumulatives Update 7 für SQL Server 2012 SP1 /en-us/help/2894115

Kumulatives Update 38 für SQL Server 2008 SP3 /en-us/help/2880350

Kumulatives Update 38 für SQL Server 2008 R2 SP2 /en-us/help/2887606

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 kumulativen Update enthalten waren. Sehen Sie sich die neuesten kumulativen Updates für SQL Server an:

      

Status

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