sintomo:

Quando si usa DBCC CHECKDB con REPAIR_ALLOW_DATA_LOSS parametro per riparare un database .MDF corrotto, come questo:

DBCC CHECKDB(xxxx, 'REPAIR_ALLOW_DATA_LOSS')

viene visualizzato il seguente messaggio di errore:

Risultati DBCC per 'xxxx'.
CHECKDB ha rilevato 0 errori di allocazione e 0 errori di coerenza nel database 'xxxx'.
Messaggio 824, livello 24, stato 2, riga 8
SQL Server rilevato un errore di I/O basato sulla coerenza logica: checksum errato (previsto: 0xea8a9a2f; effettivo: 0x37adbff8). Si è verificato durante una lettura della pagina (1:28) nell'ID database 39 all'offset 0x00000000038000 nel file 'xxxx.mdf'. Messaggi aggiuntivi nel file SQL Server il registro degli errori o il registro degli eventi di sistema possono fornire maggiori dettagli. Questa è una grave condizione di errore che minaccia l'integrità del database e deve essere corretta immediatamente. Completare un controllo completo della coerenza del database (DBCC CHECKDB). Questo errore può essere causato da molti fattori; Per ulteriori informazioni, vedere SQL Server Libri in linea.

dove 'xxxx.mdf' è il nome del file MDF corrotto che viene riparato. Anche se CHECKDB dice

CHECKDB ha rilevato 0 errori di allocazione e 0 errori di coerenza nel database 'xxxx'.

Questo è ancora un errore di coerenza (Messaggio 824) nel database.

Screenshot del messaggio di errore:

Errore di I/O basato sulla coerenza logica: checksum non corretto

Se la corruzione è grave, ci saranno continui messaggi di errore (Messaggio 824), come sotto:

Messaggio 824, livello 24, stato 6, riga 2 SQL Server rilevato un errore I/O basato sulla coerenza logica: checksum errato (previsto: 0x3d17dfef; effettivo: 0xd81748ef). Si è verificato durante una lettura della pagina (1:0) nell'ID database 39 all'offset 0000000000000000 nel file 'xxxx.mdf'. Messaggi aggiuntivi nel file SQL Server il registro degli errori o il registro degli eventi di sistema possono fornire maggiori dettagli. Questa è una grave condizione di errore che minaccia l'integrità del database e deve essere corretta immediatamente. Completare un controllo completo della coerenza del database (DBCC CHECKDB). Questo errore può essere causato da molti fattori; Per ulteriori informazioni, vedere SQL Server Libri in linea.

Messaggio 824, livello 24, stato 6, riga 4 SQL Server rilevato un errore I/O basato sulla coerenza logica: checksum errato (previsto: 0x3d17dfef; effettivo: 0xd81748ef). Si è verificato durante una lettura della pagina (1:0) nell'ID database 39 all'offset 0000000000000000 nel file 'xxxx.mdf'. Messaggi aggiuntivi nel file SQL Server il registro degli errori o il registro degli eventi di sistema possono fornire maggiori dettagli. Questa è una grave condizione di errore che minaccia l'integrità del database e deve essere corretta immediatamente. Completare un controllo completo della coerenza del database (DBCC CHECKDB). Questo errore può essere causato da molti fattori; Per ulteriori informazioni, vedere SQL Server Libri in linea.

dove 'xxxx.mdf' è il nome del file MDF corrotto che viene riparato.

Screenshot del messaggio di errore:

Se la corruzione è più grave, potresti vedere Messaggio 7909 segue Messaggio 824:

Risultati DBCC per 'xxxx'.
CHECKDB ha rilevato 0 errori di allocazione e 0 errori di coerenza nel database 'xxxx'.
Messaggio 824, livello 24, stato 2, riga 8
SQL Server rilevato un errore I/O basato sulla coerenza logica: checksum errato (previsto: 0xcfcd2118; effettivo: 0x6fc599d6). Si è verificato durante una lettura della pagina (1:1) nell'ID database 39 all'offset 0x00000000002000 nel file 'xxxx.mdf'. Messaggi aggiuntivi nel file SQL Server il registro degli errori o il registro degli eventi di sistema possono fornire maggiori dettagli. Questa è una grave condizione di errore che minaccia l'integrità del database e deve essere corretta immediatamente. Completare un controllo completo della coerenza del database (DBCC CHECKDB). Questo errore può essere causato da molti fattori; Per ulteriori informazioni, vedere SQL Server Libri in linea.
Messaggio 7909, livello 20, stato 1, riga 8
La riparazione in modalità di emergenza non è riuscita. È necessario eseguire il ripristino dal backup.

dove 'xxxx' è il nome del database e 'xxxx.mdf' è il nome del file fisico del database.

Note: Messaggio 7909 è un grave errore che può verificarsi in molte situazioni ogni volta SQL Server pensare che il database sia irrecuperabile.

Screenshot del messaggio di errore:

Spiegazione precisa:

I dati nel file MDF sono memorizzati come 8KB pagine. Ogni pagina ha un campo checksum facoltativo.

Se il comando DBCC CHECKDB trova i valori di checksum nella pagina di intestazione, nella pagina PFS e in alcune delle pagine di dati non sono valide e non può correggere il problema, segnalerà questo errore (Messaggio 824). Se la corruzione è grave, potrebbero esserci errori continui (Messaggio 824) o seguito da un altro errore (Messaggio 7909).

Puoi usare il nostro prodotto DataNumen SQL Recovery per recuperare i dati dal file MDF corrotto e risolvere questo errore.

File di esempio:

Esempio di file MDF corrotti che causeranno l'errore (Errore singolo messaggio 824):

SQL Server versione File MDF corrotto File MDF riparato da DataNumen SQL Recovery
SQL Server 2014 Errore1_3.mdf Errore1_3_fixed.mdf

Esempio di file MDF corrotti che causeranno l'errore (Errori continui del messaggio 824):

SQL Server versione File MDF corrotto File MDF riparato da DataNumen SQL Recovery
SQL Server 2014 Errore1_1.mdf Errore1_1_fixed.mdf

Esempio di file MDF corrotti che causeranno l'errore (Errore Msg 824 seguito da errore Msg 7909):

SQL Server versione File MDF corrotto File MDF riparato da DataNumen SQL Recovery
SQL Server 2014 Errore1_2.mdf Errore1_2_fixed.mdf

 

Riferimenti:

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