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:
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 |