KB2878968 – JAVÍTÁS: Nem fürtözött indexsérülés fordulhat elő, ha összetett UPDATE utasítást futtat egy NOLOCK-tippel együtt egy táblán SQL Server

Hatókö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)

Tünetek

Ha összetett UPDATE utasítást és egy NOLOCK-tippet futtat egy táblán a Microsoft SQL Server 2008-ban, az SQL Server 2012-ben, az SQL Server 2008 R2-ben vagy az SQL Server 2014-ben, nem fürtözött index sérülhet. Emellett a következő hibaüzenet jelenhet meg az SQL Server hibanaplójában:

Megjegyzés

<Dátum><és idő> spid # Hiba: 8646, Súlyosság: 21, Állapot: 1.
<Date><Time> spid # Nem található a tárgymutató-bejegyzés a 2102402659-es tábla 3-as indexazonosítójában, a "<DatabaseName>" adatbázisban. A jelzett index sérült, vagy probléma merült fel az aktuális frissítési tervvel kapcsolatban. Futtassa a DBCC CHECKDB vagy a DBCC CHECKTABLE parancsot. Ha a probléma továbbra is fennáll, forduljon a terméktámogatási szolgálathoz.
<Dátum><és idő> spid # A 'dbghelp.dll' 4.0.5-ös verziójának használata
<Dátum><és idő> spid # **Memóriakép-hozzászóláslánc - spid = 0, EC = 0x0000000BD70624C0
<Dátum><és idő> spid # ***A memóriakép elküldése a következőnek: Y:\MSSQL\MSSQL10.MSSQLSERVER\MSSQL\LOG\SQLDump0003.txt
<Dátum><és idő> spid # * *******************************************************************************
<Dátum><és idő> spid # *
<Date><Time> spid # * STACK DUMP START
<Dátum><és idő> spid # * <Dátum><és idő> spid#
<Dátum><és idő> spid # *
<Date><Time> spid # * CPerIndexMetaQS::ErrorAbort - Index corruption
<Dátum><és idő> spid # *

Megjegyzés: Az utasításokban NOLOCK-tippeket alkalmazhat a forrástáblákra. Az utasításokban azonban nem használhat NOLOCK-tippet a céltáblákra.

Ok

A problémát az okozza, hogy a NOLOCK-tipp miatt a lekérdezés helytelenül olvassa be a tábla értékeit, amikor a lekérdezés ugyanazokat az értékeket többször is beolvasta.

Megoldás

A hibát először az SQL Server következő összegző frissítésében javítottuk.

1. összegző frissítés a SQL Server 2014-hez /en-us/help/2931693

11. összegző frissítés a SQL Server 2012-höz /en-us/help/2908007

7. összegző frissítés a SQL Server 2012 SP1 rendszerhez /en-us/help/2894115

13-as összegző frissítés a SQL Server 2008 SP3 verzióhoz /en-us/help/2880350

9-es összegző frissítés a SQL Server 2008 R2 SP2 rendszerhez /en-us/help/2887606

Az SQL Server összegző frissítéseinek ismertetése

Az SQL Server minden új összegző frissítése tartalmazza az összes gyorsjavítást és minden biztonsági javítást, amely az előző kumulatív frissítésben szerepelt. Tekintse meg az SQL Server legújabb összegző frissítéseit:

      

Állapot

A Microsoft megerősítette, hogy ez egy olyan probléma a Microsoft-termékekben, amely az „Érintett szolgáltatás“ című szakaszban van felsorolva.