Автоматическое восстановление страниц (группы доступности/зеркальное отображение баз данных)

Автоматическое восстановление страниц поддерживается за счет зеркального отображения баз данных и с помощью Группы доступности AlwaysOn. После повреждения страниц вследствие ошибок определенных типов, после чего страницы становятся нечитаемыми, база данных, участвующая в зеркальном отображении (главная или зеркало), либо реплика доступности (основная или вторичная) выполняет попытку автоматического восстановления страницы. Участник или реплика, для которой считывание страницы невозможно, запрашивает новую копию у другого участника или реплики. Если этот запрос завершается успешно, нечитаемая страница заменяется читаемой копией, что обычно устраняет ошибку.

В целом зеркальное отображение базы данных и Группы доступности AlwaysOn обрабатывают ошибки ввода-вывода сходным образом. В этом разделе описываются немногие из отличий.

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

Автоматическое восстановление страниц отличается от восстановления DBCC. При автоматическом восстановлении страниц все данные сохраняются. При исправлении ошибок с помощью параметра REPAIR_ALLOW_DATA_LOSS может потребоваться удаление некоторых страниц и, следовательно, данных.

  • Типы ошибок, вызывающие попытку автоматического восстановления страницы

  • Типы страниц, которые не подлежат автоматическому восстановлению

  • Обработка ошибок ввода-вывода в базе данных-получателе или в базе данных-источнике

  • Обработка ошибок ввода-вывода в зеркальной базе данных или базе данных-получателе

  • Рекомендации разработчикам

  • Как просматривать попытки автоматического восстановления страницы

Типы ошибок, вызывающих попытку автоматического восстановления страницы

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

Код ошибки

Описание

Экземпляры, вызывающие попытку автоматического восстановления страницы

823

Действие предпринимается только в том случае, если операционная система выполнила циклическую проверку избыточности (CRC), которая завершилась неудачно для этих данных.

ERROR_CRC. Код этой ошибки в операционной системе — 23.

824

Логические ошибки.

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

829

Страница отмечена, как ожидающая восстановления.

Все.

Просмотреть все недавние ошибки 823 (CRC) и 824 можно в таблице suspect_pages базы данных msdb.

[В начало]

Типы страниц, которые не подлежат автоматическому восстановлению

Автоматическое восстановление страниц не может исправить следующие типы страниц управления.

  • Страница заголовка файла (идентификатор страницы 0).

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

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

[В начало]

Обработка ошибок ввода-вывода в базе данных-получателе или в базе данных-источнике

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

  1. При возникновении ошибки чтения на странице данных в базе данных-получателе или в базе данных-источнике, база данных-получатель или база данных-источник вставляет в таблицу suspect_pages строку с соответствующим статусом ошибки. При использовании зеркального отображения базы данных, основная база данных запрашивает копию страницы у зеркального сервера. При использовании Группы доступности AlwaysOn, основная база данных передает запрос всем вторичным базам данных и получает страницу от первой откликнувшейся базы данных. В запросе указывается идентификатор страницы и номер LSN, находящийся в данный момент в конце текущего журнала. Страница помечается как ожидающая восстановления. Это делает ее недоступной на время попытки автоматического восстановления. Любое обращение к этой странице во время попытки восстановления завершится с ошибкой 829 (ожидает восстановления).

  2. После получения запроса страницы зеркальный/вторичный сервер ожидает, пока его журнал не будет восстановлен до номера LSN, указанного в запросе. Затем зеркальный/вторичный сервер пытается получить доступ к странице в своей копии базы данных. Если к странице возможен доступ, зеркальный/вторичный сервер посылает копию страницы на основной/первичный сервер. В противном случае зеркальный/вторичный сервер возвращает основному/первичному серверу ошибку, а попытка автоматического восстановления страницы завершается неудачно.

  3. Основной сервер/первичный сервер обрабатывает ответ, содержащий новую копию страницы.

  4. После того как попытка автоматического восстановления завершается успешно, восстановленная страница отмечается в таблице suspect_pages как восстановленная (event_type = 5).

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

[В начало]

Обработка ошибок ввода-вывода в зеркальной базе данных или базе данных-получателе

Ошибки ввода-вывода, возникающие на страницах данных зеркальной базы данных или базы данных-получателе, обычно обрабатываются одинаково, как при зеркальном отображении базы данных, так и при использовании Группы доступности AlwaysOn.

  1. В случае с зеркальным отображением баз данных, если зеркальный сервер обнаруживает одну или несколько ошибок ввода-вывода при восстановлении записи журнала, сеанс зеркального отображения переходит в состояние SUSPENDED. В случае Группы доступности AlwaysOn, если вторичная реплика обнаруживает одну или несколько ошибок ввода-вывода при восстановлении записи журнала, база данных-получатель переходит в состояние SUSPENDED. В этот момент зеркальный/вторичный сервер вставляет в таблицу suspect_pages строку с соответствующим статусом ошибки. Затем зеркальный/вторичный сервер запрашивает копию страницы у основного/первичного сервера.

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

  3. Если зеркальный/вторичный сервер получает копии всех запрошенных страниц, он попытается возобновить сеанс зеркального отображения. Если попытка автоматического восстановления завершается успешно, восстановленная страница отмечается в таблице suspect_pages как восстановленная (event_type = 4).

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

[В начало]

Рекомендации разработчикам

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

[В начало]

Как просматривать попытки автоматического восстановления страницы

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

  • Группы доступности AlwaysOn

    sys.dm_hadr_auto_page_repair (Transact-SQL)

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

  • Зеркальное отображение базы данных

    sys.dm_db_mirroring_auto_page_repair (Transact-SQL)

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

[В начало]

См. также

Основные понятия

Управление таблицей suspect_pages (SQL Server)

Обзор групп доступности AlwaysOn (SQL Server)

Зеркальное отображение базы данных (SQL Server)