Симптоми
Имайте предвид сценария, описан по-долу:
- Имате две разделени таблици в Microsoft SQL Server 2014 и дяловете на първата таблица са нанесени в различни файлове и файлови групи с помощта на същата схема на дялове и функция.
- Превключвате един от тези дялове на втората таблица и след това орязвате втората таблица.
- Пропускате файлове и файлови групи, които са нанесени в препоръчания дял.
- Изпълнявате команда SELECT за втората таблица.
В този случай получавате следното съобщение за грешка:
Забележка
Msg 606, Level 21, State 1
Несъответствие на метаданните. ИД< на файлова група ИД нафайлова> група, указано за име на таблица>< на таблица, не съществува. Изпълнете DBCC, CHECKDB или CHECKCATALOG.
Когато стартирате DBCC CHECKDB/CHECKTABLE, получавате следното съобщение за грешка:
Забележка
Не може да се обработи индексът <IndexName> на таблицата <TableName> , тъй като файловата група (ИД <на файлова група FileGroupNumber>) е невалидна.
Решение
Проблемът е коригиран за първи път в следните кумулативни актуализации на SQL Server:
Препоръка: Инсталирайте най-новата кумулативна актуализация за SQL Server
Всяка нова кумулативна актуализация за SQL Server съдържа всички актуални поправки и корекции на защитата, които са били включени в предишната кумулативна актуализация. Препоръчваме ви да изтеглите и инсталирате най-новите сборни актуализации за SQL Server:
Забележка Тази корекция предотвратява само бъдещи повторения на този проблем. Ако вече имате този проблем, експортирайте данните си в нова база данни без съществуващи повреди на метаданните. За да направите това, изпълнете следните стъпки:
За да определите дали даден дял има невалидна файлова група, изпълнете следната заявка, за да видите дали връща резултат:
SELECT * FROM sys.allocation_units AS au WHERE au.data_space_id NOT IN (SELECT data_space_id FROM sys.filegroups)Направете таблицата с повредата на метаданните отново видима.
Ако заявката от стъпка 1 върне резултат, дялът с повредени метаданни ви пречи да прегледате (изберете * от) който и да било ред в таблицата. За да заобиколите този проблем, премахнете този лош дял.
Забележка: Лошият дял трябва да е празен. В противен случай файловете и файловата група, в която са се намирали, не биха могли да бъдат пропуснати или изтрити.
За целта преместете този дял в друга таблица, която използва същата схема на разделяне. Тази таблица може да бъде просто фиктивна таблица. Използвайте container_id от заявката в стъпка 1 и я съпоставете с partition_id от sys.partitions. (Не забравяйте да запомните partition_number.) Използвайте partition_number, за да извършите ALTER TABLE SWITCH PARTITION от таблицата, която не е била видима в фиктивната таблица. Фиктивната таблица трябва да има един и същ набор от колони и да използва една и съща схема на дялове. Вашата заявка за намиране на несъответстващия дял може да изглежда така:
SELECT au.container_id, au.data_space_id, p.partition_number FROM sys.partitions AS p JOIN sys.allocation_units AS au ON p.partition_id = au.container_id LEFT JOIN sys.filegroups AS fgs ON fgs.data_space_id = au.data_space_id WHERE object_id = OBJECT_ID('MyTableName') AND fgs.data_space_id IS NULL;Копирайте данните от невидимата преди таблица в новата база данни.
Състояние
Microsoft потвърждава, че това е проблем в продуктите на Microsoft, които са изброени в раздела „Важи за“.