MSSQL Error 823: I/O Error detected during read — Аппаратные сбои и восстановление
Ошибка 823 свидетельствует о том, что SQL Server отправил запрос на чтение страницы ОС Windows, но операционная система вернула аппаратную ошибку ввода-вывода (сбой чтения диска, таймаут шины или повреждение контроллера).
- Сообщение:
I/O error (bad page ID) detected during read at offset %S_BUFF on file '%ls'(Severity 24). - В Windows Event Log (System) фиксируются ошибки драйверов дисков
Disk Error 7,Ntfs 55,storahci 129илиvolsnap. - База данных может перейти в аварийный статус
SUSPECTили прерывать выполнение бэкапов. - Пользователи 1С получают сообщение о фатальном сбое физического чтения данных таблицы.
1. Анализ журнала Windows и SQL Server ERRORLOG
-- Просмотр последних записей об ошибках чтения в ERRORLOG
EXEC sys.sp_readerrorlog 0, 1, '823';Проверьте Windows Event Log: журнал System на наличие ошибок контроллера disk, hba, storport, nvme.
2. Проверка целостности базы данных (DBCC CHECKDB)
DBCC CHECKDB ([YourDatabaseName]) WITH NO_INFOMSGS, ALL_ERRORMSGS;3. Идентификация поврежденных страниц в msdb
SELECT
database_id,
file_id,
page_id,
error_type,
page_type,
last_update_date
FROM msdb.dbo.suspect_pages
WHERE error_type IN (1, 2, 3);4. Восстановление поврежденной страницы из резервной копии (Page Restore)
Если база работает в модели восстановления FULL, выполните онлайн-восстановление конкретной сбойной страницы без простоя всей базы:
-- 1. Восстановление страницы из полного бэкапа
RESTORE DATABASE [YourDatabaseName]
PAGE = '1:54321'
FROM DISK = 'D:\Backups\Full.bak'
WITH NORECOVERY;
-- 2. Накатка логов транзакций
RESTORE LOG [YourDatabaseName]
FROM DISK = 'D:\Backups\Log_1.trn'
WITH NORECOVERY;
-- 3. Завершение восстановления
RESTORE DATABASE [YourDatabaseName] WITH RECOVERY;5. Аппаратная замена накопителя / перенос файлов
Если ошибка повторяется на одном смещении (offset), немедленно выведите диск из строя, мигрируйте файлы MDF/NDF на исправный LUN/SSD и проверьте кабели SAS/SATA/FC.
Частые вопросы (FAQ)
В чем фундаментальная разница между ошибками 823 и 824?
Ошибка 823 — это сбой на уровне операционной системы и драйвера (ОС не смогла прочитать байты с накопителя). Ошибка 824 — это логический сбой: ОС прочитала данные успешно, но SQL Server обнаружил несовпадение контрольной суммы Torn Page / Checksum.
Почему ошибка 823 имеет Severity 24?
Severity 24 указывает на критический сбой аппаратного уровня. Соединение мгновенно закрывается, а транзакция откатывается.
Поможет ли repair_allow_data_loss при ошибке 823?
Команда DBCC CHECKDB с параметром REPAIR_ALLOW_DATA_LOSS может удалить поврежденную страницу вместе с данными, но она не устранит первопричину — деградацию физического диска или контроллера RAID.
Как перенести сбойный файл базы на другой диск при ошибке 823?
Переведите базу в OFFLINE: ALTER DATABASE [DB] SET OFFLINE. Скопируйте файл на новый исправный диск, измените путь: ALTER DATABASE [DB] MODIFY FILE (NAME = logical_name, FILENAME = 'new_path') и переведите базу в ONLINE.