Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

MSSQL 8976 1С:Предприятие и СУБД

MSSQL Ошибка 8976: Table error Page was not seen in the scan

Обновлено: 25.08.2026 · Официальная документация ↗
  • Отчет DBCC CHECKDB: Msg 8976, Level 16, State 1: Table error: Object ID ..., index ID ..., page ID (1:11223). Page was not seen in the scan although its parent and previous refer to it.
  • Вместе с 8976 регистрируется парная ошибка Msg 8978.
  • Разрыв двухсторонней цепочки страниц (Previous Page / Next Page) на листовом уровне B-дерева.
  • Запросы, выполняющие сортировку и сканирование по диапазону ключей, зависают или возвращают неполный результат.

1. Определение затронутого индекса

SELECT 
    OBJECT_NAME(i.object_id) AS TableName,
    i.name AS IndexName,
    i.index_id,
    i.type_desc
FROM sys.indexes i
WHERE i.object_id = <Object_ID> AND i.index_id = <Index_ID>;

2. Решение для некластерных индексов (Index ID > 1)

Если ошибка локализована в некластерном индексе, полное перестроение полностью восстанавливает B-дерево:

ALTER INDEX [IndexName] ON dbo.[TableName] REBUILD WITH (ONLINE = OFF);

3. Решение для кластерных индексов (Index ID = 1) и куч

Если поврежден кластерный индекс, попробуйте выполнить Page Restore из резервной копии:

RESTORE DATABASE [DatabaseName] 
PAGE = '1:11223' 
FROM DISK = 'C:\Backup\FullBackup.bak' 
WITH NORECOVERY;

RESTORE LOG [DatabaseName] FROM DISK = 'C:\Backup\Log.trn' WITH RECOVERY;

4. Аварийный ремонт связей дерева через CHECKDB

ALTER DATABASE [DatabaseName] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
DBCC CHECKDB ('DatabaseName', REPAIR_ALLOW_DATA_LOSS);
ALTER DATABASE [DatabaseName] SET MULTI_USER;
💡 Практика специалистов: Если ошибка 8976 произошла в таблице движений 1С, после перестроения кластерного индекса обязательно запустите пересчет итогов регистров, так как часть страниц могла быть пропущена при предыдущих расчетах.

Частые вопросы (FAQ)

Что означает ошибка 8976?

В индексах B-Tree все страницы на листовом уровне связаны двунаправленным списком (указатели m_prevPage и m_nextPage). Ошибка 8976 означает, что родительская страница ссылается на страницу X, но при линейном сканировании уровня страница X не была найдена или выпала из IAM-карты.

Почему ошибка 8976 часто идет в паре с 8978?

Ошибка 8978 сообщает о потере обратной ссылки (missing linkage to previous page). Обе ошибки описывают один и тот же разрыв цепочки страниц с двух разных сторон обхода дерева.

Можно ли исправить ошибку 8976 простым перезапуском службы SQL?

Нет. Повреждение указателей страниц находится в постоянных структурах файлов данных на диске и требует явного перестроения индексов или наката бэкапа.

Каковы основные причины возникновения ошибки 8976?

Сбои в работе драйверов multipathing (MPIO), микропрограммы SAN-хранилища, некорректное расщепление страниц (Page Split) при параллельной записи под высокой нагрузкой.

Полезные материалы
Рекомендуем