Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Область применения: SQL Server
Автоматическое восстановление страниц поддерживается зеркальным отображением базы данных и группами доступности AlwaysOn. После повреждения страниц вследствие ошибок определенных типов, после чего страницы становятся нечитаемыми, база данных, участвующая в зеркальном отображении (главная или зеркало), либо реплика доступности (основная или вторичная) выполняет попытку автоматического восстановления страницы. Участник или реплика, для которой считывание страницы невозможно, запрашивает новую копию у другого участника или реплики. Если этот запрос завершается успешно, нечитаемая страница заменяется читаемой копией, что обычно устраняет ошибку.
Как правило, зеркальное отображение баз данных и группы доступности AlwaysOn обрабатывают ошибки ввода-вывода аналогичным образом. В этом разделе описываются немногие из отличий.
Примечание.
Автоматическое восстановление страниц отличается от восстановления DBCC. При автоматическом восстановлении страниц все данные сохраняются. При исправлении ошибок с помощью параметра REPAIR_ALLOW_DATA_LOSS может потребоваться удаление некоторых страниц и, следовательно, данных.
Типы ошибок, вызывающие попытку автоматического восстановления страницы
Типы страниц, которые не подлежат автоматическому восстановлению
Обработка ошибок ввода-вывода в базе данных-получателе или в базе данных-источнике
Обработка ошибок ввода-вывода в зеркальной базе данных или базе данных-получателе
Практическое руководство. Просмотр попыток автоматического восстановления страницы
Типы ошибок, вызывающие попытку автоматического восстановления страницы
Система автоматического восстановления страниц зеркального отображения базы данных восстанавливает только страницы, которые находятся в файле данных, для которого операция завершилась с одной из ошибок, перечисленных в приведенной ниже таблице.
| Номер ошибки | Description | Экземпляры, вызывающие попытку автоматического восстановления страницы |
|---|---|---|
| 823 | Действие предпринимается только в том случае, если операционная система выполнила циклическую проверку избыточности (CRC), которая завершилась неудачно для этих данных. | ERROR_CRC. Код этой ошибки в операционной системе — 23. |
| 824 | Логические ошибки. | Логические ошибки данных, например прерванная запись или несовпадающая контрольная сумма страницы. |
| 829 | Страница отмечена, как ожидающая восстановления. | Все. |
Просмотреть все недавние ошибки 823 (CRC) и 824 можно в таблице suspect_pages базы данных msdb .
Типы страниц, которые не подлежат автоматическому восстановлению
Автоматическое восстановление страниц не может исправить следующие типы страниц управления.
Страница заголовка файла (идентификатор страницы 0).
Страница 9 (загрузочная страница базы данных).
Страницы распределения: страницы глобальной карты распределения (GAM), страницы общей глобальной карты (SGAM) и страницы свободного места на странице (PFS).
Обработка ошибок ввода-вывода в базе данных-получателе или в базе данных-источнике
В основной базе данных или в базе данных-источнике попытка автоматического восстановления страницы предпринимается только если база данных находится в состоянии SYNCHRONIZED, а основная база или база-получатель данных продолжает посылать записи журнала в зеркальную базу данных или в базу данных-получатель. При попытке автоматического восстановления страницы выполняется следующая основная последовательность действий:
При возникновении ошибки чтения на странице данных в базе данных-получателе или в базе данных-источнике база данных-получатель или база данных-источник вставляет в таблицу suspect_pages строку с соответствующим статусом ошибки. При использовании зеркального отображения базы данных, основная база данных запрашивает копию страницы у зеркального сервера. Для групп доступности AlwaysOn основной передает запрос всем вторичным файлам и получает страницу от первого ответа. В запросе указывается идентификатор страницы и номер LSN, находящийся в данный момент в конце текущего журнала. Страница помечается как ожидающая восстановления. Это делает ее недоступной на время попытки автоматического восстановления. Любое обращение к этой странице во время попытки восстановления завершится с ошибкой 829 (ожидает восстановления).
После получения запроса страницы зеркальный/вторичный сервер ожидает, пока его журнал не будет восстановлен до номера LSN, указанного в запросе. Затем зеркальный/вторичный сервер пытается получить доступ к странице в своей копии базы данных. Если к странице возможен доступ, зеркальный/вторичный сервер посылает копию страницы на основной/первичный сервер. В противном случае зеркальный/вторичный сервер возвращает основному/первичному серверу ошибку, а попытка автоматического восстановления страницы завершается неудачно.
Основной сервер/первичный сервер обрабатывает ответ, содержащий новую копию страницы.
После того как попытка автоматического восстановления завершается успешно, подозрительная страница отмечается в таблице suspect_pages как восстановленная (event_type = 5).
Если ошибка ввода-вывода вызвала возникновение каких-либо отложенных транзакций, то после восстановления страницы основной/первичный сервер попытается разрешить эти транзакции.
Обработка ошибок ввода-вывода в зеркальной базе данных или базе данных-получателе
Ошибки ввода-вывода на страницах данных, возникающих в зеркальном или вторичном базах данных, обрабатываются как правило, зеркальным отображением базы данных и группами доступности AlwaysOn.
В случае с зеркальным отображением баз данных, если зеркальный сервер обнаруживает одну или несколько ошибок ввода-вывода при восстановлении записи журнала, сеанс зеркального отображения переходит в состояние SUSPENDED. При наличии групп доступности AlwaysOn, если вторичная реплика сталкивается с одной или несколькими ошибками ввода-вывода страницы при повторном изменении записи журнала, база данных-получатель вводит состояние SUSPENDED. В этот момент зеркальный/вторичный сервер вставляет в таблицу suspect_pages строку с соответствующим состоянием ошибки. Затем зеркальный/вторичный сервер запрашивает копию страницы у основного/первичного сервера.
Основной/первичный сервер пытается получить доступ к странице в своей копии базе данных. Если к странице возможен доступ, основной/первичный сервер отправляет копию страницы на зеркальный/вторичный сервер.
Если зеркальный/вторичный сервер получает копии всех запрошенных страниц, он попытается возобновить сеанс зеркального отображения. Если попытка автоматического восстановления завершается успешно, подозрительная страница отмечается в таблице 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)
Обзор групп доступности Always On (SQL Server)
Зеркальное отображение базы данных (SQL Server)