Gejala:

Apabila menggunakan DBCC CHECKDB bersama PEMBAIKAN_ALLOW_DATA_LOSS parameter untuk memperbaiki pangkalan data .MDF yang rosak, seperti ini:

DBCC CHECKDB (xxxx, 'REPAIR_ALLOW_DATA_LOSS')

anda melihat mesej ralat berikut:

Hasil DBCC untuk 'xxxx'.
CHECKDB menemui 0 kesalahan peruntukan dan 0 kesalahan konsistensi dalam pangkalan data 'xxxx'.
Msg 824, Level 24, State 2, Line 8
SQL Server mengesan ralat I / O berdasarkan konsistensi logik: checksum yang salah (dijangka: 0xea8a9a2f; sebenar: 0x37adbff8). Ia berlaku semasa pembacaan halaman (1:28) dalam pangkalan data ID 39 pada offset 0x00000000038000 dalam fail 'xxxx.mdf'. Mesej tambahan di SQL Server log ralat atau log peristiwa sistem mungkin memberikan lebih terperinci. Ini adalah keadaan ralat yang teruk yang mengancam integriti pangkalan data dan mesti diperbetulkan dengan segera. Lengkapkan pemeriksaan ketekalan pangkalan data penuh (DBCC CHECKDB) Kesalahan ini boleh disebabkan oleh banyak faktor; untuk maklumat lebih lanjut, lihat SQL Server Buku Dalam Talian.

di mana 'xxxx.mdf' adalah nama fail MDF yang rosak yang sedang diperbaiki. Walaupun CHECKDB mengatakan

CHECKDB menemui 0 kesalahan peruntukan dan 0 kesalahan konsistensi dalam pangkalan data 'xxxx'.

Ini masih merupakan kesilapan konsistensi (Mesej 824) dalam pangkalan data.

Tangkapan skrin mesej ralat:

ralat I / O berasaskan konsistensi logik: checksum yang salah

Sekiranya rasuah teruk, maka akan ada mesej ralat berterusan (Mesej 824), seperti di bawah:

Msg 824, Level 24, State 6, Line 2 SQL Server mengesan ralat I / O berdasarkan konsistensi logik: checksum yang tidak betul (dijangka: 0x3d17dfef; sebenar: 0xd81748ef). Ia berlaku semasa pembacaan halaman (1: 0) dalam ID pangkalan data 39 pada ofset 0000000000000000 dalam fail 'xxxx.mdf'. Mesej tambahan di SQL Server log ralat atau log peristiwa sistem mungkin memberikan lebih terperinci. Ini adalah keadaan ralat yang teruk yang mengancam integriti pangkalan data dan mesti diperbetulkan dengan segera. Lengkapkan pemeriksaan ketekalan pangkalan data penuh (DBCC CHECKDB) Kesalahan ini boleh disebabkan oleh banyak faktor; untuk maklumat lebih lanjut, lihat SQL Server Buku Dalam Talian.

Msg 824, Level 24, State 6, Line 4 SQL Server mengesan ralat I / O berdasarkan konsistensi logik: checksum yang tidak betul (dijangka: 0x3d17dfef; sebenar: 0xd81748ef). Ia berlaku semasa pembacaan halaman (1: 0) dalam ID pangkalan data 39 pada ofset 0000000000000000 dalam fail 'xxxx.mdf'. Mesej tambahan di SQL Server log ralat atau log peristiwa sistem mungkin memberikan lebih terperinci. Ini adalah keadaan ralat yang teruk yang mengancam integriti pangkalan data dan mesti diperbetulkan dengan segera. Lengkapkan pemeriksaan ketekalan pangkalan data penuh (DBCC CHECKDB) Kesalahan ini boleh disebabkan oleh banyak faktor; untuk maklumat lebih lanjut, lihat SQL Server Buku Dalam Talian.

di mana 'xxxx.mdf' adalah nama fail MDF yang rosak yang sedang diperbaiki.

Tangkapan skrin mesej ralat:

Sekiranya rasuah lebih teruk, anda mungkin akan melihat Mesej 7909 ikut Mesej 824:

Hasil DBCC untuk 'xxxx'.
CHECKDB menemui 0 kesalahan peruntukan dan 0 kesalahan konsistensi dalam pangkalan data 'xxxx'.
Msg 824, Level 24, State 2, Line 8
SQL Server mengesan ralat I / O berdasarkan konsistensi logik: checksum yang salah (dijangka: 0xcfcd2118; sebenar: 0x6fc599d6). Ia berlaku semasa pembacaan halaman (1: 1) dalam ID pangkalan data 39 pada offset 0x00000000002000 dalam fail 'xxxx.mdf'. Mesej tambahan di SQL Server log ralat atau log peristiwa sistem mungkin memberikan lebih terperinci. Ini adalah keadaan ralat yang teruk yang mengancam integriti pangkalan data dan mesti diperbetulkan dengan segera. Lengkapkan pemeriksaan ketekalan pangkalan data penuh (DBCC CHECKDB) Kesalahan ini boleh disebabkan oleh banyak faktor; untuk maklumat lebih lanjut, lihat SQL Server Buku Dalam Talian.
Msg 7909, Level 20, State 1, Line 8
Pembaikan mod kecemasan gagal. Anda mesti memulihkan dari sandaran.

di mana 'xxxx' adalah nama pangkalan data dan 'xxxx.mdf' adalah nama fail fizikal pangkalan data.

Nota Mesej 7909 adalah kesalahan teruk yang mungkin berlaku dalam banyak keadaan bila-bila masa SQL Server fikir pangkalan data tidak dapat dipulihkan.

Tangkapan skrin mesej ralat:

Penjelasan tepat:

Data dalam fail MDF disimpan sebagai 8KB muka surat. Setiap halaman mempunyai medan checksum pilihan.

Sekiranya perintah DBCC CHECKDB mendapati nilai checksum di halaman header, halaman PFS dan beberapa halaman data tidak sah dan tidak dapat membetulkan masalahnya, maka akan melaporkan ralat ini (Mesej 824). Sekiranya korupton teruk, mungkin terdapat erosi berterusan (Mesej 824) atau diikuti dengan kesalahan lain (Mesej 7909).

Anda boleh menggunakan produk kami DataNumen SQL Recovery untuk memulihkan data dari fail MDF yang rosak dan menyelesaikan ralat ini.

Fail Contoh:

Contoh fail MDF yang rosak yang akan menyebabkan ralat (Kesalahan Msg 824 Tunggal):

SQL Server versi Fail MDF rosak Fail MDF dibetulkan oleh DataNumen SQL Recovery
SQL Server 2014 Ralat1_3.mdf Ralat1_3_fixed.mdf

Contoh fail MDF yang rosak yang akan menyebabkan ralat (Kesalahan Msg 824 berterusan):

SQL Server versi Fail MDF rosak Fail MDF dibetulkan oleh DataNumen SQL Recovery
SQL Server 2014 Ralat1_1.mdf Ralat1_1_fixed.mdf

Contoh fail MDF yang rosak yang akan menyebabkan ralat (Ralat Msg 824 diikuti oleh ralat Msg 7909):

SQL Server versi Fail MDF rosak Fail MDF dibetulkan oleh DataNumen SQL Recovery
SQL Server 2014 Ralat1_2.mdf Ralat1_2_fixed.mdf

 

Rujukan:

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