Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

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

MSSQL Ошибка 8939: Table error Test failed. Values are X and Y

Обновлено: 25.08.2026  ·  Официальная база знаний
  • Журнал проверки DBCC CHECKDB содержит: Msg 8939, Level 16, State 1: Table error: Object ID ..., index ID ..., page ID (1:98765). Test (IS_OFF (BUF_DIRTY, bp->bstat)) failed. Values are 2097152 and 0.
  • Внутренние инварианты структуры страницы (slot count, free space offset, torn bits) нарушены.
  • Падение процессов резервного копирования (BACKUP DATABASE ... WITH CHECKSUM завершается с ошибкой).
  • Невозможно прочитать строки из регистра сведений или документов 1С.

1. Расшифровка теста, вызвавшего ошибку 8939

Текст в скобках теста указывает на поврежденную внутреннюю структуру:

  • m_freeData <= m_slotOffset: поврежден массив смещения слотов строк;
  • IS_OFF (BUF_DIRTY): несоответствие битов модификации в буферном пуле;
  • m_type == DATA_PAGE: неверный тип страницы в заголовке.

2. Проверка уровня повреждения (Clustered vs Non-Clustered)

SELECT 
    o.name AS TableName, 
    i.name AS IndexName, 
    i.index_id 
FROM sys.indexes i
JOIN sys.objects o ON i.object_id = o.object_id
WHERE o.object_id = <Object_ID_из_ошибки> AND i.index_id = <Index_ID_из_ошибки>;

3. Ремонт при повреждении некластерного индекса

-- Пересоздание индекса полностью устраняет ошибку без потери данных
ALTER INDEX [IndexName] ON dbo.[TableName] REBUILD WITH (ONLINE = OFF);

4. Восстановление страницы из бэкапа (Page Restore)

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

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

5. Проверка дисковой подсистемы с помощью SQLIOSim

Для исключения сбоев контроллера или RAM запустите стресс-тестирование утилитой sqliosim.exe.

Практический опыт инженера: Если ошибка 8939 регулярно появляется в разных таблицах и на разных страницах, немедленно выполните проверку памяти хоста (memtest86+ / Windows Memory Diagnostic) и обновите микрокоды BIOS материнской платы.

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

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

DBCC CHECKDB выполняет десятки внутренних проверок логической консистентности каждой страницы (валидация заголовка, указателей слотов, свободной памяти). Ошибка 8939 означает, что одна из математических проверок структуры заголовка не сошлась.

Почему BACKUP DATABASE падает при наличии ошибки 8939?

Если бэкап запускается с параметром CHECKSUM, SQL Server валидирует контрольные суммы страниц при чтении. При обнаружении битой страницы создание бэкапа прерывается для предотвращения записи невалидного архива.

Можно ли выполнить бэкап базы с ошибкой 8939?

Да, можно выполнить BACKUP DATABASE ... WITH NO_CHECKSUM, CONTINUE_AFTER_ERROR, однако в таком бэкапе останутся битые страницы.

Является ли ошибка 8939 признаком сбоя оперативной памяти (ECC RAM)?

Да, если повреждение обнаружено в операциях над памятью буферного пула (BUF_DIRTY), причиной может быть сбой планок RAM или дефект контроллера памяти процессора.