Симптом:

Когато използвате DBCC CHECKDB с параметър REPAIR_ALLOW_DATA_LOSS за ремонт на повреденa .MDF база данни, като този:

DBCC CHECKDB(xxxx, ‘REPAIR_ALLOW_DATA_LOSS’)

виждате следното съобщение за грешка:

Резултати от DBCC за ‘xxxx’.
CHECKDB откри 0 грешки при разпределението и 0 грешки в съответствието на базата данни ‘xxxx’.
Съобщение 824, ниво 24, състояние 2, ред 8
SQL Server засече грешка, свързана с логическата последователност на входно-изходните операции: грешна контролна сума (очаквана: 0xea8a9a2f; актуална: 0x37adbff8). Това се случи при чтение на страница (1:28) в база данни с ID 39 при отместване 0x00000000038000 във файл ‘xxxx.mdf’. Допълнителни съобщения в журнала за грешки на SQL Server или системния журнал за събития могат да предоставят повече подробности. Това е тежка грешка, която застрашава интегритета на базата данни и трябва незабавно да бъде коригирана. Извършете пълна проверка на съответствието на базата данни (DBCC CHECKDB). Тази грешка може да бъде причинена от множество фактори; за повече информация, вижте SQL Server Books Online.

където 'xxxx.mdf' е името на повредения MDF файл, който се ремонтира. Въпреки че CHECKDB казва

CHECKDB откри 0 грешки при разпределението и 0 грешки при съответствието в базата данни ‘xxxx’.

Това е все още грешка в последователността (Съобщение 824) в базата данни.

Екранна снимка на съобщението за грешка:

логическа I / O грешка, базирана на логическа последователност: неправилна контролна сума

Ако повредата е сериозна, тогава ще има непрекъснати съобщения за грешки (Msg 824), както следва:

Съобщение 824, ниво 24, състояние 6, ред 2, SQL сървърът засече логическа грешка, базирана на непоследователност: неправилна контролна сума (очаквана: 0x3d17dfef; актуална: 0xd81748ef). Тя се появи по време на четене на страница (1:0) в база данни ID 39 на отместване 0000000000000000 във файл ‘xxxx.mdf‘. Допълнителни съобщения в журнала на грешките на SQL сървъра или в системния журнал на събитията може да предоставят повече детайли. Това е сериозно състояние на грешка, което застрашава цялостта на базата данни и трябва да бъде коригирано веднага. Извършете пълна проверка на последователността на базата данни (DBCC CHECKDB). Тази грешка може да бъде причинена от много фактори; за повече информация, вижте SQL Server Books Online.

Съобщение 824, Ниво 24, Състояние 6, Линия 4 SQL Сървърът откри логическа грешка при I/O базирана на последователност: неправилен контролен сум (очакван: 0x3d17dfef; фактически: 0xd81748ef). Тя се появи по време на четене на страница (1:0) в база данни с ID 39 на отклонение 0000000000000000 във файл ‘xxxx.mdf’. Допълнителни съобщения в журнала за грешки на SQL Сървъра или системния събитиен журнал може да предоставят повече информация. Това е тежка грешка, която застрашава цялостта на базата данни и трябва незабавно да бъде коригирана. Извършете пълен проверка за последователност на базата данни (DBCC CHECKDB). Тази грешка може да бъде причинена от много фактори; за повече информация, вижте SQL Server Books Online.

където 'xxxx.mdf' е името на повредения MDF файл, който се ремонтира.

Екранна снимка на съобщението за грешка:

Ако повредата е по-сериозна, може да видите Съобщение 7909, следвано от Съобщение 824:

DBCC резултати за ‘xxxx’.
CHECKDB намери 0 грешки при заделянето и 0 грешки при консистентността в базата данни ‘xxxx’.
Съобщение 824, Ниво 24, Състояние 2, Ред 8
SQL Server откри логическа грешка при проверката на consistence-based I/O: некоректна контролна сума (очаквана: 0xcfcd2118; актуална: 0x6fc599d6). Грешката възникна при четене на страница (1:1) в база данни с ID 39 на място 0x00000000002000 във файл ‘xxxx.mdf’. Допълнителни съобщения в журнала за грешки на SQL Server или в системния журнал за събития могат да предоставят повече информация. Това е сериозна грешка, която застрашава цялостта на базата данни и трябва да бъде коригирана незабавно. Извършете пълна проверка на консистентността на базата данни (DBCC CHECKDB). Тази грешка може да бъде предизвикана от много фактори; за повече информация, вижте SQL Server Books Online.
Съобщение 7909, Ниво 20, Състояние 1, Ред 8
Аварийният ремонт не сполучи.Трябва да възстановите от резервно копие.

където 'xxxx' е името на базата данни и 'xxxx.mdf' е физическото име на файла на базата данни.

Обърнете внимание, че съобщение 7909 е сериозна грешка, която може да се появи во множество ситуации, когато SQL сървърът смята, че базата данни е извън възможността за възстановяване.

Екранна снимка на съобщението за грешка:

Точно обяснение:

Данните в MDF файла се съхраняват като 8KB страници. Всяка страница има опционално поле за контролна сума.

Ако командата DBCC CHECKDB открие, че контролните суми в заглавната страница, страницата PFS и някои от данните на страниците са невалидни и не може да коригира проблема, тя ще докладва за тази грешка (Съобщение 824). Ако повредата е сериозна, може да има непрекъснати грешки (Съобщение 824) или да бъдат последвани от друга грешка (Съобщение 7909).

Можете да използвате нашия продукт DataNumen SQL Recovery, за да възстановите данните от повредения MDF файл и да решите тази грешка.

Файлове с образци:

Примерни повредени MDF файлове, които ще причинят грешката (Единична Msg 824 грешка):

Версия на SQL Server Повреден MDF файл MDF файл, фиксиран от DataNumen SQL Recovery
SQL Server 2014 Грешка1_3.mdf Грешка1_3_fixed.mdf

Примерни повредени MDF файлове, които ще причинят грешка (постоянни Msg 824 грешки):

Версия на SQL Server Повреден MDF файл MDF файл, фиксиран от DataNumen SQL Recovery
SQL Server 2014 Грешка1_1.mdf Грешка1_1_fixed.mdf

Примерни повредени MDF файлове, които ще причинят грешка ( съобщение за грешка 824, последвано от съобщение за грешка 7909):

Версия на SQL Server Повреден MDF файл MDF файл, фиксиран от DataNumen SQL Recovery
SQL Server 2014 Грешка1_2.mdf Грешка1_2_fixed.mdf

 

Референции:

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