Основные сведения о таблице suspect_pages и управлении ей

Таблица suspect_pages, добавленная в версии SQL Server 2005, расположена в базе данных msdb database. Таблица suspect_pages, в которой хранятся сведения о «подозрительных» страницах, используется при принятии решений о необходимости восстановления.

Страница считается «подозрительной», если при попытке ее чтения компонентом SQL Server Database Engine обнаруживается одна из следующих ошибок.

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

  • Ошибка 824, например разрыв страницы (или любая другая логическая ошибка).

Идентификатор каждой «подозрительной» страницы записывается в таблицу suspect_pages. В эту таблицу записываются все подозрительные страницы, которые встретились при обработке, в частности:

  • При обработке запроса необходимо считать страницу.

  • При выполнении инструкции DBCC CHECKDB.

  • Во время операции резервного копирования.

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

Ошибки, заносящиеся в таблицу suspect_pages

Таблица suspect_pages содержит по одной строке на каждую страницу, в которой обнаружена ошибка с номером 824, но не более 1 000 строк. В следующей таблице приводятся ошибки, занесенные в столбец event_type таблицы suspect_pages.

Описание ошибки

Значение event_type

Ошибка 823, вызванная ошибкой CRC операционной системы, или ошибка 824, не относящаяся к неверной контрольной сумме или обрыву страницы (например, неверный идентификатор страницы).

1

Неверная контрольная сумма

2

Разрыв страницы

3

Восстановлена (страница была восстановлена после того, как была помечена поврежденной)

4

Исправлена (в ходе проверки базы данных DBCC)

5

Удалена при выполнении DBCC

7

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

Как компонент Database Engine обновляет таблицу suspect_pages

Компонент Database Engine выполняет с таблицей suspect_pages следующие действия.

  • Если таблица не заполнена, она обновляется для каждой ошибки с номером 824 для указания на наличие ошибки; при этом счетчик ошибок увеличивается на единицу.

  • Если страница содержит ошибку, которая впоследствии была исправлена, ее счетчик number_of_errors увеличивается на единицу и изменяется значение столбца last_update.

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

  • В ходе проверки базы данных (DBCC) все страницы, не содержащие ошибок, помечаются как исправленные (event_type = 5) или освобожденные (event_type = 7).

Автоматические обновления таблицы suspect_pages

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

  • Ошибка 823, вызываемая ошибкой CRC операционной системы.

  • Ошибка 824 (логическая ошибка, например разрыв страницы).

Следующие действия автоматически удаляют строки из таблицы suspect_pages.

  • ALTER DATABASE REMOVE FILE

  • DROP DATABASE

  • DBCC CHECKDB REPAIR_ALLOW_DATA_LOSS обновляет таблицу suspect_pages, отмечая освобождение или исправление каждой страницы.

  • RESTORE также обновляет список. Операции полного восстановления, восстановления файла или страницы помечают записи для страниц как восстановленные.

Задачи обслуживания, выполняемые администратором базы данных

За обслуживание таблицы, преимущественно за удаление старых строк, отвечают администраторы базы данных. Размер таблицы suspect_pages ограничен, поэтому после того, как она заполнена, новые ошибки в нее не заносятся. Чтобы не допустить переполнения таблицы, администратор базы данных или системный администратор должен вручную удалить из нее старые строки. Поэтому рекомендуется периодически удалять или архивировать строки, в которых значение event_type указывает на то, что страница восстановлена или исправлена, или строки, имеющие устаревшее значение last_update.

Для слежения за ситуацией в таблице «suspect_pages» можно использовать Класс событий Database Suspect Data Page. Иногда строки добавляются в таблицу suspect_pages вследствие нерегулярных ошибок. Однако если в таблицу добавляется множество строк, то, скорее всего, проблема существует в подсистеме ввода-вывода. Если было замечено резко возросшее количество строк, добавляемых в систему, то рекомендуется провести диагностику подсистемы ввода-вывода на предмет возможных проблем.

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

Примеры

В следующем примере из таблицы suspect_pages удаляется несколько строк.

' Select restored, repaired, or deallocated pages.DELETE FROM msdb..suspect_pages   WHERE (event_type = 4 OR event_type = 5 OR event_type = 7);GO

В следующем примере в таблице suspect_pages выбираются поврежденные страницы.

' Select nonspecific 824, bad checksum, and torn page errors.SELECT * FROM msdb..suspect_pages   WHERE (event_type = 1 OR event_type = 2 OR event_type = 3);GO