MSSQL Ошибка 8928: Page is out of bounds or corrupted
- Ошибка проверки базы:
Msg 8928, Level 16, State 1: Table error: Object ID ..., index ID ..., page ID (1:54321). Page is out of bounds or corrupted. - Вместе с 8928 выводятся ошибки
Msg 8976,Msg 8978(нарушение связей между страницами B-Tree). - Выгрузка информационной базы 1С в файл
.dtпадает с ошибкой формата потока или ошибкой чтения таблицы. - Запросы SELECT к диапазону записей завершаются аварийно.
1. Локализация поврежденных данных
-- Проверка целостности конкретной таблицы
DBCC CHECKTABLE ('dbo._AccumRgT123') WITH ALL_ERRORMSGS;2. Проверка заголовка страницы через DBCC PAGE
-- Включение вывода DBCC в консоль
DBCC TRACEON (3604);
-- Просмотр дампа заголовка страницы (File=1, Page=54321, Mode=3)
DBCC PAGE ('DatabaseName', 1, 54321, 3);
DBCC TRACEOFF (3604);3. Спасение уцелевших данных таблицы в 1С / T-SQL
Если поврежден кластерный индекс (Index ID 1), скопируйте доступные строки в новую таблицу, обойдя поврежденный блок:
-- Создание копии структуры таблицы
SELECT * INTO dbo.Saved_Data_Table FROM dbo.Original_Table WHERE 1 = 0;
-- Построчное копирование через курсор или порционный перебор первичных ключей
-- (пропуская упавший диапазон ID)4. Восстановление страницы из резервной копии
RESTORE DATABASE [DatabaseName]
PAGE = '1:54321'
FROM DISK = 'C:\Backup\FullBackup.bak'
WITH NORECOVERY;
RESTORE LOG [DatabaseName] FROM DISK = 'C:\Backup\Log1.trn' WITH NORECOVERY;
RESTORE LOG [DatabaseName] FROM DISK = 'C:\Backup\Log2.trn' WITH RECOVERY;5. Проведение DBCC CHECKDB REPAIR
ALTER DATABASE [DatabaseName] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
DBCC CHECKDB ('DatabaseName', REPAIR_ALLOW_DATA_LOSS);
ALTER DATABASE [DatabaseName] SET MULTI_USER; Частые вопросы (FAQ)
Что означает 'Page is out of bounds' в ошибке 8928?
Это означает, что номер страницы в цепочке IAM (Index Allocation Map) указывает на адрес за пределами физического размера файла базы данных (mdf/ndf) или заголовок страницы полностью затерт мусорными байтами.
Приведет ли REPAIR_ALLOW_DATA_LOSS к удалению данных при ошибке 8928?
Да. SQL Server освободит поврежденную страницу 8928 и перестроит указатели B-дерева. Все строки данных, находившиеся на этой 8-килобайтной странице, будут безвозвратно удалены.
Как восстановить данные в 1С после выполнения REPAIR_ALLOW_DATA_LOSS?
После ремонта базы запустите 'Тестирование и исправление' (ТиИ) в конфигураторе 1С с флагами 'Реструктуризация таблиц' и 'Создание объектов при наличии ссылок на несуществующие', чтобы устранить битые ссылки.
Может ли антивирус вызвать ошибку 8928?
Да, если антивирусное ПО сканирует файлы .mdf/.ldf без исключений, блокировка файловых дескрипторов или повреждение кэша записи драйвером антивируса может разрушить структуру страниц.