KB2878968 – KORJAUS: Klusteroimaton indeksi voi vioittua, kun monimutkainen UPDATE-komento suoritetaan yhdessä NOLOCK-vihjeen kanssa taulukossa SQL Server

Käytetään kohteeseen
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)

Ongelman ilmenemistapa

Kun suoritat monimutkaisen UPDATE-komennon yhdessä NOLOCK-vihjeen kanssa taulukossa Microsoft SQL Server 2008:ssa, SQL Server 2012:ssa, SQL Server 2008 R2:ssa tai SQL Server 2014:ssä, ei-klusteroitu indeksi voi vioittua. Lisäksi seuraava virhesanoma saatetaan kirjata SQL Server -virhelokiin:

Huomautus

<Päivämäärä><ja kellonaika> spid # Virhe: 8646, vakavuus: 21, tila: 1.
<Date><Time spid> # DatabaseName-tietokannan<> taulukon 2102402659 indeksitunnuksesta 3 ei löydy indeksimerkintää. Merkitty indeksi on vioittunut tai nykyisessä päivityssuunnitelmassa on ongelma. Suorita DBCC CHECKDB tai DBCC CHECKTABLE. Jos ongelma jatkuu, ota yhteyttä tuotetukeen.
<Date><Time spid> # Using 'dbghelp.dll' version '4.0.5'
<Date><Time spid> # **Dump thread - spid = 0, EC = 0x0000000BD70624C0
<Date><Time spid> # ***Stack Dump lähetetään Y:\MSSQL\MSSQL10.MSSQLSERVER\MSSQL\LOG\SQLDump0003.txt
<Date><Time spid> # * *******************************************************************************
<Date><Time Spid> # *
<Date><Time spid> # * ALOITA PINOVEDOS:
<Date><Time spid> # * <Date><Time Spid> #
<Date><Time Spid> # *
<Date><Time spid> # * CPerIndexMetaQS::ErrorAbort – Indeksin vioittuminen
<Date><Time Spid> # *

Huomautus: Voit käyttää NOLOCK-vihjettä lausekkeen lähdetaulukoissa. Et kuitenkaan voi käyttää NOLOCK-vihjettä lauseen kohdetaulukoihin.

Syy

Tämä ongelma ilmenee, koska NOLOCK-vihje aiheuttaa sen, että kysely lukee taulukon arvot väärin, kun kysely lukee samat arvot useita kertoja.

Ratkaisu

Ongelma korjattiin ensimmäisen kerran seuraavassa SQL Server kumulatiivisessa päivityksessä.

SQL Server 2014:n kumulatiivinen päivitys 1 /en-us/help/2931693

SQL Server 2012:n kumulatiivinen päivitys 11 /en-us/help/2908007

SQL Server 2012 SP1:n kumulatiivinen päivitys 7 /en-us/help/2894115

Kumulatiivinen päivitys 13, SQL Server 2008 SP3 /en-us/help/2880350

Kumulatiivinen päivitys 9, SQL Server 2008 R2 SP2 /en-us/help/2887606

Tietoja SQL Serverin kumulatiivisista päivityksistä

Jokainen uusi SQL Server -kumulatiivinen päivitys sisältää kaikki edelliseen kumulatiiviseen päivitykseen sisältyvät hotfix-korjaukset ja tietoturvakorjaukset. Tutustu SQL Serverin uusimpiin kumulatiivisiin päivityksiin:

      

Tila

Microsoft on vahvistanut tämän olevan ongelma niissä Microsoftin tuotteissa, jotka ovat listattuna Koskee seuraavia tuotteita -osiossa.