sintomo:

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

DBCC CHECKDB (xxxx, "REPAIR_ALLOW_DATA_LOSS")

viene visualizzato il seguente messaggio di errore:

Risultati DBCC per "xxxx".
CHECKDB ha trovato 0 errori di allocazione e 0 errori di coerenza nel database "xxxx".
Messaggio 824, livello 24, stato 2, riga 8
SQL Server ha rilevato un errore 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 in SQL Server il registro degli errori o il registro degli eventi di sistema possono fornire ulteriori dettagli. Questa è una condizione di errore grave 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 danneggiato da riparare. Sebbene CHECKDB dica

CHECKDB ha trovato 0 errori di allocazione e 0 errori di coerenza nel database "xxxx".

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

Screenshot del messaggio di errore:

Errore di I / O basato sulla coerenza logica: checksum errato

Se il danneggiamento è grave, verranno visualizzati messaggi di errore continui (Msg 824), come sotto:

Messaggio 824, livello 24, stato 6, riga 2 SQL Server ha 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 in SQL Server il registro degli errori o il registro degli eventi di sistema possono fornire ulteriori dettagli. Questa è una condizione di errore grave 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 ha 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 in SQL Server il registro degli errori o il registro degli eventi di sistema possono fornire ulteriori dettagli. Questa è una condizione di errore grave 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 danneggiato da riparare.

Screenshot del messaggio di errore:

vuoto

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

Risultati DBCC per "xxxx".
CHECKDB ha trovato 0 errori di allocazione e 0 errori di coerenza nel database "xxxx".
Messaggio 824, livello 24, stato 2, riga 8
SQL Server ha rilevato un errore I / O basato sulla coerenza logica: checksum non corretto (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 in SQL Server il registro degli errori o il registro degli eventi di sistema possono fornire ulteriori dettagli. Questa è una condizione di errore grave 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.

Osservazioni: Msg 7909 è un grave errore che può verificarsi in molte situazioni ogni volta SQL Server penso che il database sia oltre il recupero.

Screenshot del messaggio di errore:

vuoto

Spiegazione precisa:

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

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

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

File di esempio:

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

SQL Server versione File MDF danneggiato File MDF corretto da DataNumen SQL Recovery
SQL Server 2014 Error1_3.mdf Error1_3_fixed.mdf

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

SQL Server versione File MDF danneggiato File MDF corretto da DataNumen SQL Recovery
SQL Server 2014 Error1_1.mdf Errore1_1_fixed.mdf

Esempio di file MDF danneggiati che causeranno l'errore (Errore del messaggio 824 seguito dall'errore del messaggio 7909):

SQL Server versione File MDF danneggiato File MDF corretto da DataNumen SQL Recovery
SQL Server 2014 Error1_2.mdf Error1_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