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

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

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

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

Постраничное восстановление базы MSSQL (Page Restore) без остановки работы

Обновлено: 26.08.2026 · Официальная документация ↗

Постраничное восстановление (Page Restore) необходимо, когда повреждено небольшое количество конкретных страниц данных:

  • Ошибки чтения 824 с указанием конкретного Page ID в логах;
  • Записи о битых страницах в системной таблице msdb.dbo.suspect_pages;
  • Недопустимость остановки работы всей базы данных компании (Zero Downtime requirement) ради исправления единичной страницы.

1. Определение идентификаторов поврежденных страниц

SELECT database_id, file_id, page_id, event_type, error_count
FROM msdb.dbo.suspect_pages
WHERE event_type IN (1, 2, 3); -- 1: 823/824 Checksum error, 2: Bad Checksum, 3: Torn Page

Предположим, повреждена страница: FileId = 1, PageId = 54288 в базе ERP_1C.

2. Снятие актуального хвостового лога (Tail-Log)

В редакциях Enterprise база данных остается доступной для всех пользователей (Online), кроме транзакций, обращающихся напрямую к поврежденной странице:

BACKUP LOG [ERP_1C]
TO DISK = N'E:\Backup\ERP_1C_Tail.trn'
WITH NORECOVERY; -- При Online-восстановлении в Enterprise можно использовать стандартный бэкап лога

3. Процедура постраничного восстановления (Page Restore)

-- 1. Восстановление поврежденной страницы из Full бэкапа
RESTORE DATABASE [ERP_1C]
PAGE = '1:54288'
FROM DISK = N'E:\Backup\ERP_1C_Full.bak'
WITH NORECOVERY;

-- 2. Накат последнего Diff (если страница модифицировалась позже)
RESTORE DATABASE [ERP_1C]
PAGE = '1:54288'
FROM DISK = N'E:\Backup\ERP_1C_Diff.bak'
WITH NORECOVERY;

-- 3. Накат цепочки логов транзакций
RESTORE LOG [ERP_1C]
FROM DISK = N'E:\Backup\Log\ERP_1C_Log_01.trn'
WITH NORECOVERY;

RESTORE LOG [ERP_1C]
FROM DISK = N'E:\Backup\ERP_1C_Tail.trn'
WITH RECOVERY;
GO

4. Проверка восстановленной страницы

DBCC CHECKPAGE ('ERP_1C', 1, 54288, 3);
💡 Практика специалистов: Постраничное восстановление возможно только в модели восстановления FULL. Если в момент повреждения цепочка журналов транзакций была прервана, восстановить страницу из бэкапа не удастся.

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

Поддерживается ли Online Page Restore в редакции SQL Server Standard?

В редакции Standard постраничное восстановление поддерживается, но только в режиме Offline (база должна быть переведена в состояние Restoring / Single-User). Режим честного Online восстановления доступен только в редакции Enterprise / Developer.

Можно ли восстановить страницу распределения GAM/SGAM через Page Restore?

Нет. Постраничное восстановление применимо только к страницам данных и индексов. Системные страницы распределения пространства (GAM, SGAM, PFS) и критические системные метаданные через PAGE restore восстановить нельзя.

Сколько страниц можно указать в одном запросе RESTORE PAGE?

В одной команде RESTORE DATABASE ... PAGE можно передать до 1000 страниц через запятую: PAGE = '1:54288, 1:54289, 2:104'.

Что делать, если suspect_pages содержит тысячи битых страниц?

Если повреждено более 1% страниц файла данных, постраничное восстановление нерационально и займет больше времени, чем полное восстановление файла данных (File Restore) или всей базы целиком.

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