Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Автоматическое восстановление страниц поддерживается зеркальным отображением базы данных и группами доступности AlwaysOn. После повреждения страницы определенных типов ошибок, что делает её нечитаемой, партнер зеркального отображения базы данных (основной или зеркальный) или реплика высокой доступности (первичная или вторичная) пытается автоматически восстановить страницу. Партнер или реплика, которая не может считывать страницу, запрашивает новую копию страницы от своего партнера или из другой реплики. Если этот запрос выполнен успешно, нечитаемая страница заменяется читаемой копией, и это обычно устраняет ошибку.
Как правило, зеркальное отображение баз данных и группы доступности AlwaysOn обрабатывают ошибки ввода-вывода аналогичным образом. Немногие различия явно указаны здесь.
Замечание
Автоматическое восстановление страниц отличается от восстановления DBCC. Все данные сохраняются с помощью автоматического восстановления страниц. В отличие от этого, исправление ошибок с помощью параметра DBCC REPAIR_ALLOW_DATA_LOSS может потребовать удаления некоторых страниц и, следовательно, данных.
Типы ошибок, которые приводят к автоматической попытке Page-Repair
Автоматическое исправление страниц при зеркалировании базы данных пытается исправить только страницы в файле данных, на которых операция завершилась ошибкой для одной из указанных в следующей таблице ошибок.
| Номер ошибки | Описание | Случаи, вызывающие автоматическую попытку восстановления страницы |
|---|---|---|
| 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).
Если ошибка ввода-вывода страницы вызвала любые отложенные транзакции, после восстановления страницы основной пытается разрешить эти транзакции.
Обработка ошибок ввода-вывода в зеркальной или вторичной базе данных
Ошибки ввода-вывода на страницах данных, которые возникают в зеркальной или вторичной базе данных, как правило обрабатываются с помощью зеркального отображения базы данных и групп доступности Always On.
При зеркальном отображении базы данных, если зеркальное отображение обнаруживает одну или несколько ошибок ввода-вывода страницы при повторном изменении записи журнала, сеанс зеркального отображения вступает в состояние SUSPENDED. При использовании групп доступности Always On, если вторичная реплика сталкивается с одной или несколькими ошибками ввода-вывода страницы при повторном применении записи журнала, вторичная база данных переходит в состояние SUSPENDED. На этом этапе зеркало или вторичный процесс добавляет строку в таблицу suspect_pages с подходящим статусом ошибки. Затем зеркало или вторичный сервер запрашивает копию страницы у главного или первичного сервера.
Главный пользователь или основной субъект пытается получить доступ к странице в своей копии базы данных. Если можно получить доступ к странице, основной отправляет копию страницы зеркальному или вторичному.
Если зеркало/вторичный получает копии каждой запрошенной страницы, зеркало/вторичный пытается возобновить сеанс зеркального отображения. Если попытка автоматического восстановления страницы исправляет подозреваемую страницу, страница помечается в таблице suspect_pages как восстановленная (event_type = 4).
Если вторичный сервер или зеркало не получают запрашиваемую страницу от основного сервера, попытка автоматического восстановления страницы завершается ошибкой. При зеркальных отображениях базы данных сеанс зеркального отображения остается приостановленным. При наличии групп доступности Always On вторичная база данных остается приостановленной. Если сеанс зеркального отображения или вторичная база данных возобновляется вручную, поврежденные страницы снова будут затронуты на этапе синхронизации.
Рекомендации разработчика
Автоматическое восстановление страницы — это асинхронный процесс, который выполняется в фоновом режиме. Поэтому операция базы данных, которая запрашивает нечитаемую страницу, завершается ошибкой и возвращает код ошибки для любого условия, вызвавшего сбой. При разработке приложения для зеркальной базы данных или базы данных высокой доступности следует перехватывать исключения, возникающие при неудачных операциях. Если код ошибки SQL Server равен 823, 824 или 829, повторите операцию позже.
Как просмотреть автоматические попытки Page-Repair
Следующие динамические управляющие представления возвращают строки для последних попыток автоматического восстановления страниц в заданной базе данных доступности или зеркальной базе данных, не более 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)