Sintoma:

Ao usar DBCC CHECKDB com REPAIR_ALLOW_DATA_LOSS parâmetro para reparar um banco de dados .MDF corrompido, como este:

DBCC CHECKDB(xxxx, 'REPAIR_ALLOW_DATA_LOSS')

você vê a seguinte mensagem de erro:

Resultados DBCC para 'xxxx'.
CHECKDB encontrou 0 erros de alocação e 0 erros de consistência no banco de dados 'xxxx'.
Msg 824, nível 24, estado 2, linha 8
SQL Server detectou um erro de E/S baseado em consistência lógica: soma de verificação incorreta (esperado: 0xea8a9a2f; real: 0x37adbff8). Ocorreu durante uma leitura da página (1:28) no ID do banco de dados 39 no deslocamento 0x00000000038000 no arquivo 'xxxx.mdf'. Mensagens adicionais no SQL Server log de erros ou log de eventos do sistema podem fornecer mais detalhes. Esta é uma condição de erro grave que ameaça a integridade do banco de dados e deve ser corrigida imediatamente. Conclua uma verificação completa de consistência do banco de dados (DBCC CHECKDB). Esse erro pode ser causado por vários fatores; Para mais informações, veja SQL Server Livros on-line.

onde 'xxxx.mdf' é o nome do arquivo MDF corrompido que está sendo reparado. Embora CHECKDB diga

CHECKDB encontrou 0 erros de alocação e 0 erros de consistência no banco de dados 'xxxx'.

Este ainda é um erro de consistência (Mensagem 824) no banco de dados.

Captura de tela da mensagem de erro:

erro de E/S baseado em consistência lógica: soma de verificação incorreta

Se a corrupção for grave, haverá mensagens de erro contínuas (Mensagem 824), como abaixo:

Msg 824, nível 24, estado 6, linha 2 SQL Server detectou um erro de E/S baseado em consistência lógica: soma de verificação incorreta (esperado: 0x3d17dfef; real: 0xd81748ef). Ocorreu durante uma leitura da página (1:0) no banco de dados ID 39 no deslocamento 0000000000000000 no arquivo 'xxxx.mdf'. Mensagens adicionais no SQL Server log de erros ou log de eventos do sistema podem fornecer mais detalhes. Esta é uma condição de erro grave que ameaça a integridade do banco de dados e deve ser corrigida imediatamente. Conclua uma verificação completa de consistência do banco de dados (DBCC CHECKDB). Esse erro pode ser causado por vários fatores; Para mais informações, veja SQL Server Livros on-line.

Msg 824, nível 24, estado 6, linha 4 SQL Server detectou um erro de E/S baseado em consistência lógica: soma de verificação incorreta (esperado: 0x3d17dfef; real: 0xd81748ef). Ocorreu durante uma leitura da página (1:0) no banco de dados ID 39 no deslocamento 0000000000000000 no arquivo 'xxxx.mdf'. Mensagens adicionais no SQL Server log de erros ou log de eventos do sistema podem fornecer mais detalhes. Esta é uma condição de erro grave que ameaça a integridade do banco de dados e deve ser corrigida imediatamente. Conclua uma verificação completa de consistência do banco de dados (DBCC CHECKDB). Esse erro pode ser causado por vários fatores; Para mais informações, veja SQL Server Livros on-line.

onde 'xxxx.mdf' é o nome do arquivo MDF corrompido que está sendo reparado.

Captura de tela da mensagem de erro:

Se a corrupção for mais grave, você poderá ver Mensagem 7909 segue Mensagem 824:

Resultados DBCC para 'xxxx'.
CHECKDB encontrou 0 erros de alocação e 0 erros de consistência no banco de dados 'xxxx'.
Msg 824, nível 24, estado 2, linha 8
SQL Server detectou um erro de E/S baseado em consistência lógica: soma de verificação incorreta (esperado: 0xcfcd2118; real: 0x6fc599d6). Ocorreu durante uma leitura da página (1:1) no banco de dados ID 39 no deslocamento 0x00000000002000 no arquivo 'xxxx.mdf'. Mensagens adicionais no SQL Server log de erros ou log de eventos do sistema podem fornecer mais detalhes. Esta é uma condição de erro grave que ameaça a integridade do banco de dados e deve ser corrigida imediatamente. Conclua uma verificação completa de consistência do banco de dados (DBCC CHECKDB). Esse erro pode ser causado por vários fatores; Para mais informações, veja SQL Server Livros on-line.
Msg 7909, nível 20, estado 1, linha 8
O reparo do modo de emergência falhou. Você deve restaurar a partir do backup.

onde 'xxxx' é o nome do banco de dados e 'xxxx.mdf' é o nome do arquivo físico do banco de dados.

Note Mensagem 7909 é um erro grave que pode ocorrer em muitas situações sempre que SQL Server acho que o banco de dados está além da recuperação.

Captura de tela da mensagem de erro:

Explicação precisa:

Os dados no arquivo MDF são armazenados como 8KB páginas. Cada página tem um campo de soma de verificação opcional.

Se o comando DBCC CHECKDB encontrar os valores da soma de verificação na página de cabeçalho, a página PFS e algumas das páginas de dados são inválidas e não podem corrigir o problema, ele relatará este erro (Mensagem 824). Se a corrupção for grave, pode haver erros contínuos (Mensagem 824) ou seguido por outro erro (Mensagem 7909).

Você pode usar nosso produto DataNumen SQL Recovery para recuperar os dados do arquivo MDF corrompido e resolver este erro.

Arquivos de amostra:

Exemplo de arquivos MDF corrompidos que causarão o erro (Erro de mensagem única 824):

SQL Server versão Arquivo MDF corrompido Arquivo MDF corrigido por DataNumen SQL Recovery
SQL Server 2014 Erro1_3.mdf Erro1_3_fixed.mdf

Exemplo de arquivos MDF corrompidos que causarão o erro (Erros Msg 824 contínuos):

SQL Server versão Arquivo MDF corrompido Arquivo MDF corrigido por DataNumen SQL Recovery
SQL Server 2014 Erro1_1.mdf Erro1_1_fixo.mdf

Exemplo de arquivos MDF corrompidos que causarão o erro (Erro Msg 824 seguido pelo erro Msg 7909):

SQL Server versão Arquivo MDF corrompido Arquivo MDF corrigido por DataNumen SQL Recovery
SQL Server 2014 Erro1_2.mdf Erro1_2_fixed.mdf

 

Referências:

1. https://docs.microsoft.com/en-us/sql/relational-databases/errors-events/mssqlserver-824-database-engine-error?view=sql-server-ver15