MSSQL Error 824: Logical consistency-based I/O error — Чексумма и Torn Page
Ошибка 824 возникает, когда ядро SQL Server считывает страницу памяти с диска, но встроенный алгоритм верификации целостности обнаруживает несовпадение контрольной суммы (Bad Checksum) или неполную запись страницы (Torn Page).
- Сообщение:
SQL Server detected a logical consistency-based I/O error: incorrect checksum (expected: 0x..., actual: 0x...)(Severity 24). - Отказ выполнения регламентных процедур закрытия месяца или пересчета итогов в 1С:Предприятие.
- Сбой шагов резервного копирования
BACKUP DATABASE ... WITH CHECKSUM. - Наличие записей в таблице
msdb.dbo.suspect_pagesсо статусом ошибки 1 или 2.
1. Проверка опции PAGE_VERIFY для базы данных
SELECT name, page_verify_option_desc
FROM sys.databases
WHERE name = 'YourDatabaseName';
-- Если не включено, обязательно включите CHECKSUM:
ALTER DATABASE [YourDatabaseName] SET PAGE_VERIFY CHECKSUM WITH NO_WAIT;2. Локализация поврежденных объектов по номеру страницы
Извлеките номер сбойного файла и страницы (FileId, PageId) из текста ошибки 824 и выполните запрос:
DBCC TRACEON (3604);
DBCC PAGE ('YourDatabaseName', 1, 123456, 3);
-- Определение таблицы и индекса по ObjectID
SELECT
OBJECT_NAME(object_id) AS ObjectName,
name AS IndexName,
type_desc
FROM sys.indexes
WHERE object_id = OBJECT_ID('SchemaName.TableName');3. Исправление некластерного индекса (Non-Clustered Index)
Если поврежденная страница принадлежит некластерному индексу, данные не потеряны — достаточно перестроить индекс:
ALTER INDEX [Index_Name] ON [SchemaName].[TableName] REBUILD;4. Восстановление страницы из бэкапа (Page-Level Restore)
RESTORE DATABASE [YourDatabaseName]
PAGE = '1:123456'
FROM DISK = 'D:\Backups\Full.bak'
WITH NORECOVERY;
RESTORE LOG [YourDatabaseName] FROM DISK = 'D:\Backups\Log_Tail.trn' WITH RECOVERY;5. Аварийный ремонт через DBCC CHECKDB (Крайняя мера)
ALTER DATABASE [YourDatabaseName] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
DBCC CHECKDB ([YourDatabaseName], REPAIR_ALLOW_DATA_LOSS);
ALTER DATABASE [YourDatabaseName] SET MULTI_USER; Частые вопросы (FAQ)
Почему возникает ошибка логической несогласованности при исправном диске?
Ошибка 824 возникает, когда данные повреждаются 'на лету': сбойная оперативная память (RAM non-ECC), ошибки контроллера диска в момент сброса кэша (dirty write) или баги в драйвере фильтра антивируса/бэкапера.
Что произойдет при выполнении REPAIR_ALLOW_DATA_LOSS?
SQL Server физически удалит поврежденную 8-килобайтную страницу со всеми хранящимися на ней записями, освободит аллокацию и скорректирует системные B-Tree указатели, что приведет к потере строк данных.
Как предотвратить ошибки 824 в production?
Используйте серверную ECC-память, включите опцию PAGE_VERIFY CHECKSUM на всех базах, настройте регулярное выполнение DBCC CHECKDB и включите WITH CHECKSUM в планах резервного копирования.
Как очистить таблицу suspect_pages после успешного восстановления?
Выполните: EXEC msdb.dbo.sp_delete_backuphistory @oldest_date = '...' или напрямую удалите обработанные строки: DELETE FROM msdb.dbo.suspect_pages WHERE database_id = DB_ID('YourDB').