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

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

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

  • Перед началом работы выполните следующие действия.

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

    Ограничения

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

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

  • Восстановление страниц с помощью:

    Среда SQL Server Management Studio

    Transact-SQL

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

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

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

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

Ограничения

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      ПредупреждениеВнимание!

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

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

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

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

Разрешения

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

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

Значок стрелки, используемый со ссылкой «В начало»[В начало]

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

Начиная с SQL Server 2012, среда Среда SQL Server Management Studio поддерживает восстановление страниц.

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

  1. После подключения к соответствующему экземпляру компонента Компонент SQL Server Database Engine в обозревателе объектов разверните дерево сервера, щелкнув имя сервера.

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

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

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

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

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

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

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

      Заголовок

      Values

      Название

      Имя резервного набора данных.

      Компонент

      Компонент, сохраненный в резервной копии: База данных, Файл или <пусто> (для журналов транзакций).

      Тип

      Тип выполненного резервного копирования: Полное, Разностное или Журнал транзакций.

      Сервер

      Имя экземпляра компонента Компонент Database Engine, выполнившего операцию резервного копирования.

      База данных

      Имя базы данных, участвовавшей в операции резервного копирования.

      Положение

      Расположение резервного набора данных в томе.

      Первый номер 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 (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 <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