Infelizmente, e raramente, os dados dentro do banco de dados podem se tornar corrompidos se houver alguma falha no sistema de armazenamento em disco, quando o SQL Server gravar os dados em uma página de dados.
Cada página de dados tem o tamanho máximo de 8 KBs. O SQL Server divide uma página em 16 blocos de 512 bytes. Caso ocorra uma falha de disco, ao gravar blocos em uma página de dados, apenas parte da página de dados sera gravada com sucesso. Gerando um problema, conhecido como “Torn page“, ou traduzindo ao pé da letra: Página rasgada.
Verificando a integridade de dados
Todos os banco de dados tem a opção: “PAGE_VERIFY“. A mesma pode ser configurada como:
TORN_PAGE_DETECTION: Está opção existe apenas para compatibilidade, com versões anteriores no SQL Server, não é recomendado que seja utilizada. O problema é que ele não vai informar se os dados armazenados no bloco de 512 bytes é realmente correto ou não, devido ao fato de que alguns bytes pode ter sido escrito incorretamente.
CHECKSUM: Está opção é a mais adequada, desde a versão 2005 do SQL Server. Ao escolher esta opção, o SQL Server deve calcular uma soma de verificação para a página antes da gravação no bloco. Sempre que uma página é lida do disco, uma soma de verificação é novamente calculada e comparada com a soma de verificação gravada na página. Caso o resultado da soma, não seja igual, significa que a página foi corrompida.
Embora a verificação de página possa detectar uma corrupção de página. A página deve ser lida do disco, para que a verificação seja disparada. O ideal é encontrar a corrupção de página, antes de uma aplicação, quando possível.
Quando o SQL Server encontra uma página corrompida, é gerado um erro; O comando que está tentando acessar a página é cancelado. E uma nova linha é colocada em “suspect_pages”. Veja a descrição de cada campo em https://msdn.microsoft.com/en-us/library/ms174425.aspx.
É possível forçar o SQL Server a ler todas as páginas do disco, e verificar a integridade de cada uma. Normalmente este é um comando executado em horário de janela de manutenção.
DBCC CHECKDB
Para maiores informações sobre o comando acima, veja https://msdn.microsoft.com/pt-br/library/ms176064(v=sql.120).aspx.
O comando executa as tarefas:
Verifica a alocação de página dentro do banco de dados
Verifica a integridade estrutural de todas as tabelas e views indexadas
Calcula uma soma de verificação para cada página de dados e índice e compara com a soma de verificação armazenada
Válida o conteúdo de cada modo de exibição indexado
Verifica o catalogo do banco de dados
Valida os dados do service broker.
Os erros encontrados são mostrados, ao finalizar o comando. Ao encontrar um erro de integridade em um índice. Você pode excluir e criar o índice novamente. Caso o erro seja em uma tabela, você precisará usar um backup recente, para reparar a página de dados.
Recomendo fortemente que você deixe seu banco de produção com a opção CHECKSUM, em PAGE_VERIFY.
Um banco que utiliza espelhamento de dados, através do Database mirroring. O SQL Server tentará recuperar uma cópia da página do espelho, ou seja, não é necessário intervenção manual. Quando o SQL Server substitui uma página, via mirror, uma nova linha é adicionada em sys.dm_db_mirroring_auto_page_repair, para mais informações sobre os campos dessa view, veja https://msdn.microsoft.com/pt-br/library/bb677259(v=sql.120).aspx.
Espero ter ajudado!
Até a próxima!