Příznaky
Když spustíte komplexní příkaz Update spolu s NOLOCK pokynem pro tabulku v Microsoft SQL serveru 2008, SQL serveru 2012, SQL serveru 2008 R2 nebo SQL Server 2014, může dojít k poškození neclusterovaných indexů. Kromě toho se v protokolu chyb systému SQL Server pravděpodobně zaznamená následující chybová zpráva:
<><čas )> číslo spid # Chyba: 8646, závažnost: 21, stav: 1. <data><čas> SPID # nelze najít položku rejstříku v ID indexu 3 v tabulce 2102402659, v databázi <DatabaseName>. Označený index je poškozený nebo došlo k problému s aktuálním plánem aktualizace. Spusťte příkaz DBCC CHECKDB nebo DBCC CHECKTABLE. Pokud problém přetrvává, obraťte se na zákaznickou podporu. <data><čas ,> číslo SPID # using ' dbghelp. dll ' verze ' 4.0.5 ' <data><času> SPID # * * dump Thread-SPID = 0, ES = 0x0000000BD70624C0<Datum><čas> MSSQLSERVER\MSSQL\LOG\SQLDump0003.txt><2 datum><čas> spid # * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *. * * * * * * * * * * * * * * CPerIndexMetaQS,> SPID Date # * <datum Date><čas> číslo SPID # * spustit výpis zásobníku: <datum><čas>čas <čas><datum>času <SPID # *::><<ErrorAbort – poškození indexu ><čas> SPID # *><0 Time
PoznámkaNa zdrojové tabulky v příkazu můžete použít NOLOCK Na cílové tabulky v příkazu ale nemůžete použít NOLOCK
Příčina
K tomuto problému dochází, protože NOLOCK v dotazu způsobí, že dotaz nesprávně přečte hodnoty v tabulce, když dotaz přečte stejné hodnoty vícekrát.
Řešení
Tento problém byl poprvé opraven následující kumulativní aktualizací SQL serveru.
Kumulativní aktualizace 1 pro SQL Server 2014 /en-us/help/2931693
Kumulativní aktualizace 11 pro SQL Server 2012 /en-us/help/2908007
Kumulativní aktualizace 7 pro SQL Server 2012 SP1 /en-us/help/2894115
Kumulativní aktualizace 13 pro SQL Server 2008 SP3 /en-us/help/2880350
Kumulativní aktualizace 9 pro SQL Server 2008 R2 SP2 /en-us/help/2887606
Každá nová kumulativní aktualizace pro SQL Server obsahuje všechny opravy hotfix a všechny opravy zabezpečení, které byly součástí předchozí kumulativní aktualizace. Podívejte se na nejnovější kumulativní aktualizace SQL serveru:
Stav
Společnost Microsoft potvrzuje, že se jedná o problém v produktech této společnosti, které jsou uvedeny v části Informace v tomto článku jsou určeny pro produkt.