среда, 19 февраля 2014 г.

DBCC CHECKDB. Решение одной из ошибок проверки целостности базы данных.


Данным заголовком будет начата серия постов по решению проблем, которые появляются после проверки целостности базы данных процедурой DBCC CHECKDB.

Утром пришло письмо, что на одном из сервере MS SQL не прошла проверка целостности базы данных.

Заглянув на сервер, увидел подробную информацию ошибки:

DBCC results for 't_DSY_PB_wrk_dosye'.

Msg 8928, Level 16, State 1, Line 1

Object ID 228195863, index ID 1, partition ID 72057594061193216, alloc unit ID 72057594097565696 (type In-row data): Page (1:505650) could not be processed.  See other errors for details.

Msg 8976, Level 16, State 1, Line 1

Table error: Object ID 228195863, index ID 1, partition ID 72057594061193216, alloc unit ID 72057594097565696 (type In-row data). Page (1:505650) was not seen in the scan although its parent (1:3527852) and previous (1:3527595) refer to it. Check any previous errors.

Msg 8944, Level 16, State 17, Line 1

Table error: Object ID 228195863, index ID 1, partition ID 72057594061193216, alloc unit ID 72057594097565696 (type In-row data), page (1:505650), row 1. Test (columnOffsets->offTbl [varColumnNumber] <= (nextRec - pRec)) failed. Values are 880 and 455.

Msg 8944, Level 16, State 17, Line 1

Table error: Object ID 228195863, index ID 1, partition ID 72057594061193216, alloc unit ID 72057594097565696 (type In-row data), page (1:505650), row 1. Test (columnOffsets->offTbl [varColumnNumber] <= (nextRec - pRec)) failed. Values are 880 and 455.

Msg 8978, Level 16, State 1, Line 1

Table error: Object ID 228195863, index ID 1, partition ID 72057594061193216, alloc unit ID 72057594097565696 (type In-row data). Page (1:3527596) is missing a reference from previous page (1:505650). Possible chain linkage problem.

There are 11997711 rows in 1308185 pages for object "t_DSY_PB_wrk_dosye".

CHECKDB found 0 allocation errors and 5 consistency errors in table 't_DSY_PB_wrk_dosye' (object ID 228195863).

Уровень серьезности ошибки 16(Level 16) показывает, что данную ошибку может исправить пользователь базы данных, или, проще говоря ошибка, не сильно серьезная, но нужно исправить.
Эта ошибка описывает несоответствие размещения данных в страницах индекса  согласно указателям - ошибка логического уровня. Сказывает это тем, что при обращение к данным страницам возможны некорректные ошибки или ошибки выполнения запроса.

Шаги решения:
1) Если объектов много , то для начала выяснить что за объект - локализации проблемы:
Можно взять из текста ошибки

DBCC results for 't_DSY_PB_wrk_dosye'
Либо запросом:
select  object_name(228195863)

2) Выявили таблицу, теперь необходимо выявить объект таблицы –индекс, с которым проблема:
index ID 1 – это кластерный индекс

если номер индекса >1 , то тогда запросом:
select * from sys.indexes where object_id=228195863 and index_id=1
Мой результат : PK_t_DSY_PB_wrk_dosye

3)Выявили индекс, теперь его «лечим».
В данном случае просто это возможно простым перестроением индекса:

alter index PK_t_DSY_PB_wrk_dosye on t_DSY_PB_wrk_dosye rebuild;
Либо возможен как вариант пересоздать индекс.
Проверить исправление возможно запусти команду:

dbcc checktable ("dbo.t_DSY_RB_wrk_dosye")

Которая должна показать отсутвие ошибок.
Меньше ошибок, Удачи!

 

4 комментария :