Восстановление страниц (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 поддерживает восстановление страниц.
Восстановление страниц
Подключитесь к соответствующему экземпляру Системы управления базами данных SQL Server; в Обозревателе объектов щелкните имя сервера, чтобы развернуть дерево сервера.
Разверните Базы данных. В зависимости от базы данных, выберите пользовательскую базу данных или разверните Системные базы данных, и выберите системную базу данных.
Щелкните правой кнопкой мыши базу данных, выберите пункт Задачи, затем пункт Восстановитьи пункт Страница. Откроется диалоговое окно Восстановление страницы .
Восстановить
В этом разделе выполняется та же функция, что и в пункте Восстановить в из раздела Восстановление базы данных (страница «Общие»).База данных
Задает базу данных для восстановления. Можно ввести новую базу данных или выбрать уже существующую из раскрывающегося списка. Список включает все базы данных на сервере, за исключением системных баз данных master и tempdb.Предупреждение
Для восстановления резервной копии, защищенной паролем, необходимо использовать инструкцию RESTORE .
Резервная копия заключительного фрагмента журнала
Введите или выберите имя файла в поле Устройство резервного копирования , где будет сохранена резервная копия заключительного фрагмента журнала для базы данных.Резервные наборы данных
В этом разделе рассматриваются резервные наборы данных, участвующие в восстановлении.Заголовок Значения Имя Имя резервного набора данных. Компонент Компонент резервного копирования: база данных, файл или <пустой> (для журналов транзакций). Тип Тип выполненного резервного копирования: Полное, Разностноеили Журнал транзакций. Сервер Имя экземпляра ядра СУБД, выполнившего операцию резервного копирования. База данных Имя базы данных, участвовавшей в операции резервного копирования. Занимаемая должность Расположение резервного набора данных в томе. Первый LSN Номер последовательности журнала первой транзакции в резервной копии. Пустой для резервных копий файлов. Последний LSN Последовательный номер журнала (LSN) последней транзакции в резервном наборе. Пустой для резервных копий файлов. Контрольная точка LSN Номер последовательности журнала (LSN) последней контрольной точки на момент создания резервной копии. Полный номер LSN Номер логической последовательности (LSN) самого последнего полного резервного копирования базы данных. Дата начала Дата и время начала операции резервного копирования, указанные в региональных настройках клиента. Дата завершения Дата и время завершения операции резервного копирования, указанные в формате, соответствующем региональным настройкам клиента. Размер Размер резервного набора данных в байтах. Имя пользователя Имя пользователя, выполнившего операцию резервного копирования. Истечение срока действия Дата и время истечения срока действия резервного набора данных. Выберите Проверка для проверки целостности файлов резервных копий, необходимых для операции восстановления страниц.
Чтобы найти поврежденные страницы, выберите нужную базу данных поле База данных и нажмите кнопку Проверить страницы базы данных. Выполнение этой операции занимает длительное время.
Предупреждение
Чтобы восстановить конкретные неповрежденные страницы, нажмите кнопку Добавить и введите Идентификатор файла и Идентификатор страница для восстанавливаемых страниц.
Для определения восстанавливаемых страниц используется сетка страниц. Изначально эта сетка заполняется с использованием системной таблицы suspect_pages . Для добавления или удаления страниц из сетки используйте команды Добавить или Удалить. Дополнительные сведения см. в разделе "Управление таблицей suspect_pages ( SQL Server)".
В сетке Резервные наборы данных перечислены резервные наборы в плане восстановления по умолчанию. При необходимости нажмите кнопку Проверить , чтобы убедиться, не выполняя восстановление, что резервные копии могут быть прочитаны, а резервные наборы данных являются полными. Дополнительные сведения см. в разделе RESTORE VERIFYONLY (Transact-SQL).
Страницы
Чтобы восстановить страницы, перечисленные в сетке страниц, нажмите кнопку ОК.
Использование 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).
Восстановление страниц
Получите идентификаторы поврежденных страниц, подлежащих восстановлению. Контрольная сумма или ошибка прерванной записи возвращает идентификатор страницы, предоставляя необходимую информацию для указания страниц. Чтобы определить идентификатор поврежденной страницы, используйте любой из нижеследующих источников.
Источник идентификатора страницы Тема msdb..suspect_pages Управление таблицей suspect_pages (SQL Server) Журнал ошибок Просмотр журнала ошибок SQL Server (SQL Server Management Studio) История событий Наблюдение и обработка событий DBCC DBCC (Transact-SQL) Поставщик WMI Поставщик WMI для концепций событий сервера Начните восстановление страниц с полной резервной копии базы данных либо резервной копии файла или файловой группы, содержащей страницу. В инструкции RESTORE DATABASE используйте предложение PAGE для перечисления идентификаторов всех страниц, подлежащих восстановлению.
Примените самые последние дифференциалы.
Примените последующие резервные копии журнала.
Создайте новую резервную копию журнала базы данных, включающую в себя итоговый номер LSN восстановленных страниц, то есть момент, когда последняя из восстановленных страниц переведена в режим «вне сети». Итоговый номер LSN, который устанавливается как часть первого восстановления в последовательности, является целевым номером LSN для повтора. Накат файла в режиме онлайн, содержащего страницу, может остановиться на целевом LSN повторного выполнения. Чтобы выяснить текущий номер LSN цели повтора файла, обратитесь к столбцу redo_target_lsn в sys.master_files. Дополнительные сведения см. в разделе sys.master_files (Transact-SQL).
Восстановите новую резервную копию журнала. Как только эта новая резервная копия журнала будет применена, восстановление страниц завершается, и страницы готовы к использованию.
Примечание.
Эта последовательность аналогична последовательности восстановления файла. Фактически восстановление страниц и восстановление файлов могут выполняться как части одной и той же последовательности.
Пример (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