Симптоми
Когато изпълнявате сложна команда UPDATE заедно с подсказване NOLOCK за таблица в Microsoft SQL Server 2008, SQL Server 2012, SQL Server 2008 R2 или SQL Server 2014, може да възникне повреда на неклъстерен индекс. Освен това следното съобщение за грешка може да бъде регистрирано в регистрационния файл за грешки на SQL Server:
Забележка
<Дата><Час> # Грешка: 8646, Степен на сериозност: 21, Щат: 1.
<Date><Time> spid # Unable to find index entry in index ID 3, of table 2102402659, in database '<DatabaseName>'. Посоченият индекс е повреден или има проблем с текущия план за актуализация. Изпълнете DBCC CHECKDB или DBCC CHECKTABLE. Ако проблемът продължава, се свържете с поддръжката на продукта.
<Date><Time> spid # Using 'dbghelp.dll' version '4.0.5'
<Date><, Time> spid # **Dump thread - spid = 0, EC = 0x0000000BD70624C0
<Date><, Time> spid # ***Stack Dump being sent to Y:\MSSQL\MSSQL10.MSSQLSERVER\MSSQL\LOG\SQLDump0003.txt
<Date><, Time> spid # * *******************************************************************************
<Дата><и час> spid # *
<Date><Time> spid # * BEGIN STACK DUMP:
<Дата><и час> spid # * <Дата><и час> spid#
<Дата><и час> spid # *
<Date><Time> spid # * CPerIndexMetaQS::ErrorAbort - Повреда на индекса
<Дата><и час> spid # *
Забележка: Можете да приложите NOLOCK съвет към таблиците източници в команда. Не можете обаче да приложите подсказване на NOLOCK към целеви таблици в команда.
Причина
Този проблем възниква, защото подсказването за NOLOCK е причина заявката да чете неправилно стойностите в таблицата, когато заявката чете едни и същи стойности няколко пъти.
Решение
Проблемът е коригиран за първи път в следващата кумулативна актуализация на SQL Server.
Сборна актуализация 1 за SQL Server 2014 г. /bg-bg/help/2931693
Сборна актуализация 11 за SQL Server 2012 г. /en-us/help/2908007
Сборна актуализация 7 за SQL Server 2012 SP1 /en-us/help/2894115
Сборна актуализация 13 за SQL Server 2008 SP3 /en-us/help/2880350
Сборна актуализация 9 за SQL Server 2008 R2 SP2 /en-us/help/2887606
За кумулативните актуализации за SQL Server
Всяка нова кумулативна актуализация за SQL Server съдържа всички актуални поправки и корекции на защитата, които са били включени в предишната кумулативна актуализация. Прегледайте последните кумулативни актуализации за SQL Server:
- Последна сборна актуализация за SQL Server 2014
- Последна сборна актуализация за SQL Server 2012
- Последна сборна актуализация за SQL Server 2012 SP1
- Последна кумулативна актуализация за SQL Server 2008 R2 SP2
- Последна кумулативна актуализация за SQL Server 2008 SP3
Състояние
Microsoft потвърждава, че това е проблем в продуктите на Microsoft, които са изброени в раздела „Важи за“.