Compreendendo e gerenciando a tabela suspect_pages

A tabela suspect_pages reside no banco de dados msdb e foi introduzida no SQL Server 2005. A tabela suspect_pages, usada para manter informações sobre páginas suspeitas, é relevante para decidir se a restauração é necessária.

Uma página é considerada "suspeita" quando o Mecanismo de banco de dados do SQL Server encontra um dos seguintes erros ao tentar ler uma página de dados:

  • Um erro 823 causado por uma CRC (verificação de redundância cíclica) emitido por um sistema operacional como, por exemplo, um erro de disco (certos erros de hardware)

  • Um erro 824, como uma página interrompida (qualquer erro lógico)

A ID de cada página suspeita é registrada na tabela suspect_pages. O Mecanismo de Banco de Dados registra qualquer página suspeita encontrada durante o processamento regular, como o seguinte:

  • Uma consulta precisa ler uma página.

  • Durante uma operação DBCC CHECKDB.

  • Durante uma operação de backup.

A tabela suspect_pages também é atualizada conforme necessário durante uma operação de restauração, uma operação de reparo DBCC ou uma operação de cancelamento de banco de dados.

Erros registrados na tabela suspect_pages

A tabela suspect_pages contém uma linha por página que falhou com um erro 824 até o limite de 1.000 linhas. A tabela a seguir mostra erros registrados na coluna event_type da tabela suspect_pages.

Descrição do erro

Valor event_type

Erro 823 causado por um erro CRC de sistema operacional ou erro 824 diferente de uma soma de verificação inválida ou uma página danificada (por exemplo, uma ID de página inválida).

1

Soma de verificação inválida

2

Página danificada

3

Restaurada (a página foi restaurada depois de marcada como inválida)

4

Reparada (o DBCC reparou a página)

5

Desalocada pelo DBCC

7

A tabela suspect_pages também registra erros temporários. Fontes de erros temporários incluem um erro de E/S (por exemplo, um cabo desconectado) ou uma página que temporariamente falha em um teste de soma de verificação repetido.

Como o Mecanismo de Banco de Dados atualiza a tabela suspect_pages

O Mecanismo de Banco de Dados efetua as seguintes ações na tabela suspect_pages:

  • Se a tabela não estiver completa, a cada erro 824 ela será atualizada para indicar a ocorrência de um erro, e o contador de erros será incrementado.

  • Se uma página tiver um erro consertado pela restauração, restaurado ou desalocado, sua contagem de number_of_errors será incrementada e sua coluna last_update será atualizada

  • Depois que uma página listada é consertada por uma operação de restauração ou reparo, a operação atualizará a linha suspect_pages para indicar que a página foi reparada (event_type = 5) ou restaurada (event_type = 4).

  • Se uma verificação DBCC for executada, a verificação marcará as páginas sem erros como reparadas (event_type = 5) ou desalocadas (event_type = 7).

Atualizações automáticas na tabela suspect_pages

Um banco de dados parceiro espelho atualiza a tabela suspect_pages quando a tentativa de ler uma página de um arquivo de dados falha por uma das razões a seguir.

  • Um erro 823 causado por um erro CRC do sistema operacional.

  • Um erro 824 (dano lógico como uma página corrompida).

As ações a seguir excluem automaticamente as linhas da tabela suspect_pages.

  • ALTER DATABASE REMOVE FILE

  • DROP DATABASE

  • DBCC CHECKDB REPAIR_ALLOW_DATA_LOSS atualiza a tabela suspect_pages para indicar cada página que deve ser desalocada ou reparada.

  • RESTORE também atualiza a lista. Uma restauração completa de página ou arquivo marca as entradas de página como restauradas.

Função de manutenção do administrador de banco de dados

Os administradores de banco de dados são responsáveis por gerenciar a tabela, principalmente excluindo linhas antigas. A tabela suspect_pages é limitada em tamanho e, quando está cheia, os erros novos não são registrados. Para impedir que a tabela fique cheia, o administrador do banco de dados ou do sistema deve limpar manualmente as entradas antigas dessa tabela excluindo as linhas. Portanto, recomendamos que você exclua periodicamente ou arquive linhas com event_type restauradas ou reparadas, ou linhas com valor last_update antigo.

Para monitorar a atividade na tabela suspect_pages, você pode usar o Classe de evento Database Suspect Data Page. Às vezes são adicionadas linhas à tabela suspect_pages por causa de erros temporários. Contudo, se muitas linhas estiverem sendo adicionadas à tabela, talvez haja um problema com o subsistema de E/S. Se você perceber um aumento repentino no número de linhas que estão sendo adicionadas à tabela, recomendamos que investigue os possíveis problemas em seu subsistema de E/S.

Um administrador de banco de dados pode também inserir ou atualizar registros. Por exemplo, a atualização de uma linha pode ser útil quando o administrador do banco de dados sabe que uma determinada página suspeita está realmente intacta, mas quer preservar o registro por algum tempo.

Exemplos

O exemplo a seguir exclui algumas linhas da tabela 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

O exemplo a seguir seleciona as páginas inválidas na tabela 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