Восстановление страниц

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

Задачей восстановления страниц является восстановление одной или нескольких поврежденных страниц без восстановления всей базы данных. Обычно страницы, являющиеся кандидатами на восстановление, в результате ошибок доступа помечаются как «подозрительные». Информация об указанных подозрительных страницах хранится в таблице suspect_pages базы данных msdb.

ПримечаниеПримечание

Не все ошибки страниц требуют восстановления. Проблема может относиться к кэшированным данным, например во вторичном индексе. Эта проблема разрешается повторным вычислением этих данных. Например, если администратор базы данных удаляет, а затем вновь создает вторичный индекс, поврежденные данные, будучи исправленными, не отражаются в таблице suspect_pages.

Единовременно могут быть восстановлены несколько страниц базы данных. Резервные копии файла журнала применяются ко всем файлам базы данных, содержащим восстанавливаемую страницу. Как и при восстановлении файла, набор данных наката продвигается одним проходом повторения журнала.

Восстановление страниц предназначено для исправления отдельных поврежденных страниц. Восстановление нескольких отдельных страниц может потребовать меньше времени, чем восстановление файла, и уменьшить объем данных, которые будут недоступны во время операции восстановления. Но в тех случаях, когда в файле требуется восстановление относительно большого числа страниц, может оказаться более эффективным восстановить весь файл. Большое количество таких страниц на устройстве может быть признаком приближающегося сбоя оборудования. В этом случае попробуйте вместо восстановления страниц восстановить файл целиком, по возможности в другое место, и отремонтировать устройство.

Сценарии восстановления страниц

Все выпуски SQL Server 2005 и более поздние версии поддерживают восстановление страниц в автономном режиме базы данных (восстановление страниц в автономном режиме). В выпуске SQL Server 2005 Enterprise Edition и более поздних версиях, если во время восстановления страниц база данных находится в оперативном режиме, то она продолжает работать в оперативном режиме. Процесс восстановления страниц, в то время как база данных находится в оперативном режиме, называется восстановлением страниц в оперативном режиме.

Далее приведены сценарии восстановления страниц:

  • Восстановление страниц в автономном режиме

    Выпуски SQL Server 2005 Standard Edition, SQL Server 2005 Express Edition и SQL Server 2005 Workgroup Edition, а также более поздние версии поддерживают восстановление только в автономном режиме. В выпуске SQL Server 2005 Enterprise Edition и более поздних версиях автономное восстановление используется, если база данных уже находится в автономном режиме. На время проведения восстановления страниц в автономном режиме база данных переключается в соответствующий режим. После завершения последовательности восстановления база данных переключается обратно в оперативный режим.

    Чтобы успешно восстанавливать страницы, необходимо согласовывать их состояние с базой данных. Для перевода файловой группы в состояние, соответствующее текущему файлу журнала, необходимо применить непрерывную последовательность резервных копий журнала к последнему экземпляру, полученному в результате полного или разностного восстановления.

  • Восстановление страниц в оперативном режиме

    Если все условия соблюдены, то в выпуске SQL Server 2005 Enterprise Edition и более поздних версиях восстановление страниц проходит автоматически в оперативном режиме. В большинстве случаев поврежденная страница может быть восстановлена, когда база данных, в которой находится файловая группа, содержащая восстанавливаемую страницу, работает в оперативном режиме. Восстановление страниц в оперативном режиме обычно используется при ошибках оборудования.

    Иногда для восстановления поврежденной страницы необходимо автономное восстановление. Например, повреждение некоторых важных страниц может привести к проблемам с запуском базы данных. В этих случаях необходимо использовать автономное восстановление.

    ПримечаниеПримечание

    Оперативное восстановление пытается обновить метаданные, и это обновление может завершиться ошибкой, если затрагивается критическая страница. Если попытка оперативного восстановления завершается ошибкой, необходимо повторить восстановление в автономном режиме.

Восстановление страниц в SQL Server 2005 и более поздних версиях предоставляет больше возможностей для диагностики ошибок (включая контрольные суммы страниц) и трассировки. Выявленные контрольным суммированием или прерванной записью поврежденные страницы могут быть восстановлены при помощи указания страниц в инструкции RESTORE. Восстановление страниц предназначено для исправления отдельных поврежденных страниц. Каждая указанная в инструкции RESTORE страница заменяется страницей из определенного резервного набора данных. Восстанавливаемые страницы должны быть восстановлены до состояния, совместимого с базой данных. Восстанавливаются только явно определенные страницы.

Ограничения восстановления страниц

Только страницы базы данных могут быть восстановлены. Восстановление страниц не может быть использовано для восстановления нижеприведенных компонентов:

  • Журнал транзакций

  • Страницы размещения: страницы глобальной карты распределения (GAM), страницы общей глобальной карты (SGAM) и страницы свободного места на странице (PFS). Дополнительные сведения см. в разделе Управление размещением экстента и свободным местом.

  • Страница 0 всех файлов данных (загрузочная страница файла)

  • Страница 1:9 (загрузочная страница базы данных)

  • Полнотекстовый каталог

Если нельзя восстановить отдельную страницу, необходимо использовать существующую полную резервную копию базы данных или полную резервную копию файла или файловой группы.

ПримечаниеПримечание

Если восстанавливаемая страница является особой, например страницей метаданных, то оперативное восстановление страницы невозможно. В таких ситуациях попробуйте выполнить восстановление страниц в автономном режиме.

Требования к восстановлению страниц

Для восстановления страниц необходимо выполнение следующих требований.

  • Базы данных должны использовать полную модель восстановления или модель восстановления с неполным протоколированием. Существуют некоторые проблемы, связанные с использованием модели с неполным протоколированием. Дополнительные сведения см. в следующем разделе.

  • Страницы в файловых группах со статусом «только для чтения» не могут быть восстановлены. Попытка сделать файловую группу доступной только для чтения завершится ошибкой, если одновременно в этой файловой группе выполняется восстановление страниц.

  • Последовательность восстановления должна начинаться с полной резервной копии, резервной копии файла или резервной копии файловой группы.

  • Восстановление страниц требует непрерывной цепочки резервных копий журнала вплоть до текущего файла журнала, и все они должны быть применены; при этом страница приводится в соответствии с текущим файлом журнала.

  • Как и в последовательности восстановления файла, на каждом шаге восстановления можно добавить дополнительные страницы в набор данных наката.

  • Восстановление базы данных и восстановление страниц нельзя выполнять одновременно.

Модель восстановления с неполным протоколированием и восстановление страниц

Для базы данных, использующей модель восстановления с неполным протоколированием, восстановление страниц требует выполнения следующих дополнительных условий.

  • Создание резервных копий в момент, когда файловая группа или данные страницы находятся в автономном режиме, затруднительно для данных с неполным протоколированием, поскольку данные в автономном режиме не записываются в журнал. Пребывание любой страницы в автономном режиме может помешать резервному копированию журнала. В этом случае следует использовать команду DBCC REPAIR, так как при этом потери данных будут меньше, чем при восстановлении из самой последней резервной копии.

  • Когда при резервном копировании журнала базы данных с неполным протоколированием выявляется поврежденная страница, оно завершается ошибкой, если не указано предложение WITH CONTINUE_AFTER_ERROR.

  • Восстановление страниц обычно не работает в модели восстановления с неполным протоколированием.

    Лучший способ выполнить восстановление страницы — это установить для базы данных модель полного восстановления и выполнить попытку резервного копирования журнала. Если восстановление журнала работает, то можно продолжить и выполнить восстановление страницы. В случае ошибка резервного копирования журнала придется либо потерять все изменения с момента предыдущего резервного копирования журнала, либо попытаться выполнить проверку базы данных (DBCC) с параметром REPAIR_ALLOW_DATA_LOSS.

Базовый синтаксис восстановления страниц

Чтобы указать страницу в инструкции RESTORE DATABASE, понадобится идентификатор файла, содержащего страницу, и идентификатор страницы. Необходимый синтаксис выглядит следующим образом:

RESTORE DATABASE имя_базы_данных

PAGE ='file:page [ ,...n ]' [ ,...n ]

   FROM <устройство_резервного_копирования> [ ,...n ]

WITH NORECOVERY

Дополнительные сведения о параметрах PAGE см. в разделе Аргументы инструкции RESTORE (Transact-SQL). Дополнительные сведения об инструкции RESTORE DATABASE см. в разделе RESTORE (Transact-SQL).

Процедура восстановления страниц

Ниже приведены основные шаги восстановления страниц.

  1. Получите идентификаторы поврежденных страниц, подлежащих восстановлению. Контрольное суммирование или прерванная запись возвращают идентификатор страницы, обеспечивая сведения, необходимые для указания страниц. Чтобы определить идентификатор поврежденной страницы, используйте любой из нижеследующих источников.

  2. Начните восстановление страниц с полной резервной копии базы данных либо резервной копии файла или файловой группы, содержащей страницу. В инструкции RESTORE DATABASE используйте предложение PAGE для перечисления идентификаторов всех страниц, подлежащих восстановлению.

    PAGE ='file:page [ ,...n ]'

  3. Примените последние разностные резервные копии.

  4. Примените последующие резервные копии журнала.

  5. Создайте новую резервную копию журнала базы данных, включающую в себя итоговый номер LSN восстановленных страниц, то есть момент, когда последняя из восстановленных страниц переведена в автономный режим. Итоговый номер LSN, устанавливаемый в качестве части первого восстановления в последовательности, является номером LSN цели повтора. Оперативный накат файла, содержащего страницу, сможет остановиться у номера LSN цели повтора. Чтобы выяснить текущий номер LSN цели повтора файла, обратитесь к столбцу redo_target_lsn в sys.master_files. Дополнительные сведения см. в разделе sys.master_files (Transact-SQL).

  6. Восстановите новую резервную копию журнала. Как только эта новая резервная копия журнала будет применена, восстановление страниц завершается, и страницы готовы к использованию.

ПримечаниеПримечание

Эта последовательность аналогична последовательности восстановления файла. Фактически восстановление страниц и восстановление файлов могут выполняться как части одной и той же последовательности.

Пример

В этом примере восстанавливаются четыре поврежденные страницы файла B в режиме NORECOVERY. Далее, после применения двух резервных копий журналов с параметром NORECOVERY, следует восстановление резервной копии заключительного фрагмента журнала с параметром RECOVERY.

Важное примечаниеВажно!

Если поврежденные страницы содержат важные метаданные базы данных, то, возможно, потребуется последовательность восстановления страниц в автономном режиме. Для выполнения автономного восстановления необходимо создать резервную копию журнала транзакций в режиме WITH NORECOVERY.

В следующем примере выполняется оперативное восстановление. В следующем примере идентификатором файла B является 1, а идентификаторами поврежденных страниц — 57, 202, 916 и 1016.

RESTORE DATABASE <database> PAGE='1:57, 1:202, 1:916, 1:1016'
   FROM <file_backup_of_file_B> 
   WITH NORECOVERY;
RESTORE LOG <database> FROM <log_backup> 
   WITH NORECOVERY;
RESTORE LOG <database> FROM <log_backup> 
   WITH NORECOVERY; 
BACKUP LOG <database> TO <new_log_backup> 
RESTORE LOG <database> FROM <new_log_backup> WITH RECOVERY;
GO