Восстановление страниц (SQL Server)

Применимо к:SQL Server

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

В этом разделе

Перед началом

Области использования функции восстановления страниц

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

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

Ограничения

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

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

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

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

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

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

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

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

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

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

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

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

Рекомендации

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

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

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

    Предупреждение

    Если поврежденные страницы содержат критические метаданные баз данных, то во время попытки восстановление страниц в оперативном режиме при выполнении необходимых обновлений метаданных может произойти ошибка. В этом случае можно выполнить восстановление страниц в автономном режиме, но сначала необходимо создать резервную копию заключительного фрагмента журнала (путем резервного копирования журнала транзакций с параметром RESTORE WITH NORECOVERY).

  • Для восстановления страниц используются усовершенствованные функции отчетов об ошибках на уровне страниц (включая контрольные суммы страниц) и функции отслеживания. Страницы, определенные как имеющие такие ошибки, как контрольное суммирование или прерванная запись, т. е. поврежденные страницы, можно восстановить с помощью операции восстановления страниц. Восстанавливаются только явно определенные страницы. Каждая указанная страница заменяется копией страницы из указанной резервной копии данных.

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

Безопасность

Разрешения

Если восстанавливаемая база данных не существуют, для выполнения инструкции RESTORE у пользователя должны быть разрешения CREATE DATABASE. Если база данных существует, разрешения на выполнение инструкции RESTORE по умолчанию предоставлены членам предопределенных ролей сервера sysadmin и dbcreator , а также владельцу базы данных (dbo) (для параметра FROM DATABASE_SNAPSHOT база данных всегда существует).

Разрешения на выполнение инструкции RESTORE даются ролям, в которых данные о членстве всегда доступны серверу. Так как членство в предопределенной роли базы данных может быть проверено только тогда, когда база данных доступна и не повреждена, что не всегда имеет место при выполнении инструкции RESTORE, члены предопределенной роли базы данных db_owner не имеют разрешений RESTORE.

Использование среды SQL Server Management Studio

Начиная с SQL Server 2016 (13.x), СРЕДА SQL Server Management Studio поддерживает восстановление страниц.

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

  1. Подключитесь к соответствующему экземпляру ядра СУБД SQL Server в обозревателе объектов, щелкните имя сервера, чтобы развернуть дерево сервера.

  2. Разверните узел Базы данных. В зависимости от типа восстанавливаемой базы данных выберите пользовательскую базу данных или раскройте узел Системные базы данныхи выберите системную базу данных.

  3. Щелкните правой кнопкой мыши базу данных, выберите пункт Задачи, затем пункт Восстановитьи пункт Страница. Откроется диалоговое окно Восстановление страницы .

    Восстановить
    В этом разделе выполняется та же функция, что и в пункте Восстановить в из раздела Восстановление базы данных (страница "Общие").

    База данных
    Задает базу данных для восстановления. Можно ввести новую базу данных или выбрать уже существующую из раскрывающегося списка. Список включает все базы данных на сервере, за исключением системных баз данных master и tempdb.

    Предупреждение

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

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

    Резервные наборы данных
    В этом разделе рассматриваются резервные наборы данных, участвующие в восстановлении.

    Заголовок Значения
    Наименование Имя резервного набора данных.
    Компонент Компонент резервного копирования: база данных, файл или <пустой> (для журналов транзакций).
    Тип Тип выполненного резервного копирования: Полное, Разностноеили Журнал транзакций.
    Сервер Имя экземпляра ядра СУБД, выполняющего операцию резервного копирования.
    База данных Имя базы данных, участвовавшей в операции резервного копирования.
    Занимаемая должность Расположение резервного набора данных в томе.
    Первый номер LSN Регистрационный номер в журнале первой транзакции в резервном наборе данных. Пустой для резервных копий файлов.
    Последний номер LSN Регистрационный номер в журнале последней транзакции в резервном наборе данных. Пустой для резервных копий файлов.
    Номер LSN для контрольной точки Регистрационный номер транзакции в журнале (номер LSN) для последней контрольной точки на время создания резервной копии.
    Полный номер LSN Номер LSN в журнале последнего полного резервного копирования базы данных.
    Дата начала Дата и время начала операции резервного копирования, указанные в региональных настройках клиента.
    Дата завершения Дата и время завершения операции резервного копирования, указанные в формате, соответствующем региональным настройкам клиента.
    Размер Размер резервного набора данных в байтах.
    Имя пользователя Имя пользователя, выполнившего операцию резервного копирования.
    Истечение срока действия Дата и время истечения срока действия резервного набора данных.

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

  4. Чтобы найти поврежденные страницы, выберите нужную базу данных поле База данных и нажмите кнопку Проверить страницы базы данных. Выполнение этой операции занимает длительное время.

    Предупреждение

    Чтобы восстановить конкретные неповрежденные страницы, нажмите кнопку Добавить и введите Идентификатор файла и Идентификатор страница для восстанавливаемых страниц.

  5. Для определения восстанавливаемых страниц используется сетка страниц. Изначально эта сетка заполняется с использованием системной таблицы suspect_pages . Для добавления или удаления страниц из сетки используйте команды Добавить или Удалить. Дополнительные сведения см. в разделе "Управление таблицей suspect_pages ( SQL Server)".

  6. В сетке Резервные наборы данных перечислены резервные наборы в плане восстановления по умолчанию. При необходимости нажмите кнопку Проверить , чтобы убедиться, не выполняя восстановление, что резервные копии могут быть прочитаны, а резервные наборы данных являются полными. Дополнительные сведения см. в разделе RESTORE VERIFYONLY (Transact-SQL).

    Страницы

  7. Чтобы восстановить страницы, перечисленные в сетке страниц, нажмите кнопку ОК.

Использование Transact-SQL

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

 RESTORE DATABASE <database_name>  
  
 PAGE = '<file: page> [ ,... n ] ' [ ,... n ]
  
 FROM <backup_device> [ ,... n ]
  
 WITH NORECOVERY

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

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

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

    Источник идентификатора страницы Раздел
    msdb.suspect_pages Управление таблицей suspect_pages (SQL Server)
    Журнал ошибок Просмотр журнала ошибок SQL Server (среда SQL Server Management Studio)
    История событий Наблюдение и обработка событий
    DBCC DBCC (Transact-SQL)
    Поставщик WMI Основные понятия о поставщике WMI для событий сервера
  2. Начните восстановление страниц с полной резервной копии базы данных либо резервной копии файла или файловой группы, содержащей страницу. В инструкции RESTORE DATABASE используйте предложение PAGE для перечисления идентификаторов всех страниц, подлежащих восстановлению.

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

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

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

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

    Заметка

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

Пример (Transact-SQL)

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

RESTORE DATABASE [<database>] PAGE='1:57, 1:202, 1:916, 1:1016'  
   FROM DISK = '<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

См. также

RESTORE (Transact-SQL)
Применение резервных копий журналов транзакций (SQL Server)
Управление таблицей suspect_pages (SQL Server)
Резервное копирование и восстановление баз данных SQL Server