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

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

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

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

MSSQL Ошибка 8909: PageId in the page header does not match

Обновлено: 25.08.2026 · Официальная документация ↗
  • Проверка целостности сообщает: Msg 8909, Level 16, State 1: Table error: Object ID ..., index ID ..., page ID (1:12345). The PageId in the page header does not match the physical block address.
  • Сбой чтения данных при обращении к таблице 1С: Ошибка СУБД: Ошибка ввода-вывода или повреждение страницы.
  • В журнале dmesg / Windows Event Log фиксируются ошибки дискового контроллера (Disk Event ID 7, 11, 55, bad blocks).
  • База данных переходит в статус SUSPECT или RECOVERY PENDING.

1. Полная диагностика базы через DBCC CHECKDB

-- Запуск полной проверки целостности с детализацией
DBCC CHECKDB ('DatabaseName') WITH NO_INFOMSGS, ALL_ERRORMSGS;

2. Изоляция поврежденного объекта

-- Определение имени таблицы и индекса по Object ID и Index ID
SELECT 
    OBJECT_NAME(object_id) AS TableName, 
    name AS IndexName, 
    type_desc 
FROM sys.indexes 
WHERE object_id = <Object_ID_из_ошибки> AND index_id = <Index_ID_из_ошибки>;

3. Вариант А: Восстановление поврежденной страницы из бэкапа (Page Restore)

Самый безопасный способ без потери данных (при наличии полной резервной копии и цепочки логов):

-- Восстановление конкретной страницы (File = 1, Page = 12345)
RESTORE DATABASE [DatabaseName] 
PAGE = '1:12345' 
FROM DISK = 'C:\Backup\FullBackup.bak' 
WITH NORECOVERY;

-- Накатывание лога транзакций
RESTORE LOG [DatabaseName] 
FROM DISK = 'C:\Backup\LogBackup.trn' 
WITH RECOVERY;

4. Вариант Б: Перестроение некластерного индекса

Если Index ID > 1 (некластерный индекс), исправление выполняется без риска потери данных:

ALTER INDEX [IndexName] ON dbo.[TableName] REBUILD;

5. Вариант В: Аварийный ремонт (Repair Allow Data Loss)

-- Использовать только если нет резервных копий!
ALTER DATABASE [DatabaseName] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
DBCC CHECKDB ('DatabaseName', REPAIR_ALLOW_DATA_LOSS);
ALTER DATABASE [DatabaseName] SET MULTI_USER;
💡 Практика специалистов: При ошибке 8909 немедленно проверьте системный журнал Windows System Event Log на наличие событий 'The IO operation at logical block address ... was retried' — это сигнал к срочной замене дискового накопителя.

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

Что вызывает ошибку 8909 в SQL Server?

Ошибка 8909 означает, что страница была прочитана с диска, но в ее внутреннем заголовке m_pageId записан другой номер страницы. Это однозначный признак аппаратного сбоя: запись сектора не по тому смещению контроллером SAN/RAID, сбой кэша контроллера диска или фантомная запись (misdirected write).

Помогает ли REPAIR_REBUILD при ошибке 8909?

Нет. Если повреждена страница данных (Index ID 0 или 1), REPAIR_REBUILD не может гарантировать исправление. Потребуется либо PAGE RESTORE из бэкапа, либо REPAIR_ALLOW_DATA_LOSS (с удалением битой страницы).

Как защитить базу от повторения ошибки 8909?

Убедитесь, что для базы включен параметр PAGE_VERIFY CHECKSUM: ALTER DATABASE [DB] SET PAGE_VERIFY CHECKSUM; и проверьте состояние SMART дисков и кэша RAID-контроллера (BBU).

Как работает PAGE RESTORE в режиме онлайн?

В редакции SQL Server Enterprise восстановление страниц (Page Restore) выполняется онлайн: база данных остается доступной для пользователей, блокируется только восстанавливаемая страница.

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