1

One of our clients gets the following error when trying to backup a database:

System.Data.SqlClient.SqlException: SQL Server detected a logical consistency-based I/O error: incorrect checksum (expected: 0x121db60d; actual: 0x521db60d). It occurred during a read of page (1:1632) in database ID 4 at offset 0x00000000cc0000 in file 'C:\Program Files (x86)\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\MSDBData.mdf'. Additional messages in the SQL Server error log or system event log may provide more detail. This is a severe error condition that threatens database integrity and must be corrected immediately. Complete a full database consistency check (DBCC CHECKDB). This error can be caused by many factors; for more information, see SQL Server Books Online. Could not insert a backup or restore history/detail record in the msdb database. This may indicate a problem with the msdb database. The backup/restore operation was still successful.

I tried to perform checkdb, checkdb repair_rebuild as well as checkdb REPAIR_ALLOW_DATA_LOSS but none of these corrected the issues is the MSDB database.

My question is: can I just grab a clean MSDB database from another instance to recover corrupt one or do I really have to uninstall/reinstall SQL Server?

migrated from superuser.com Jun 28 '14 at 13:37

This question came from our site for computer enthusiasts and power users.

  • 1
    Well first and foremost you should determine why and how this happened. Won't do you much good to fix msdb only to have it go corrupt again. What sort of troubleshooting have you done to determine the cause and prevent it from happening again? Next, I can't understand why people spend hours and hours trying to figure out how to repair (or replace!) a system database when in a lot of cases it would much easier to just install a new instance. – Aaron Bertrand Jun 30 '14 at 14:04
2

You're getting this while trying to backup any database?

msdb is used for a bunch of things and you'll want to make sure it's okay. But critically, it sounds like your corruption is in a table which is used for backups, and this is a good thing, because you don't necessarily need that data.

Start by scripting out all your SQL Agent jobs, exporting all your SSIS packages that you've put in msdb, and anything else you can think of that uses msdb.

Now do some investigation to find out what that corrupt page is used for....

...but ultimately, your best bet is likely to be to stop the instance for a moment, pull out the msdb MDF and LDF files (so you have copies), restore from a backup from a different database (and check again for corruption), and then redeploy all your maintenance jobs, agent jobs, SSIS packages, and anything else you can think of.

You might be able to swap your MDF and LDF files onto another machine and extract extra information that you may have missed, but this should at least get you going again.