How to Fix Page Corruption in SQL Server?

Summary: Pages in SQL databases can get corrupted due to several reasons, such as software bugs, sudden server shutdown, hardware failure, etc. In this post, we’ll discuss how to check page-level corruption in SQL database, and mention some solutions to fix page corruption and restore the corrupt pages. You’ll also find about an advanced SQL database repair software that can easily repair corrupt database and restore all its objects without any data loss.

Page is the primary storage unit in SQL Server. All the information in SQL Server database (MDF/NDF) files is stored in pages of 8 KB size. Each page starts with a 96-byte header that stores information, like page number, page type, free space etc. If a page gets corrupted, then it can impact the entire database. In this case, you may receive different errors when opening the database file or even not able to access the database. Therefore, fixing page-level corruption immediately is important. In this article, we will see how to fix page corruption in SQL Server database.

How to Detect Corruption in SQL Server Database?

Before proceeding to the solutions to fix corruption, you need to check the SQL database for corruption. There are various ways to check page-level corruption in SQL Server database. Some of them are explained below:

1. Run the SELECT Statement

SQL Server keeps a log of all the suspect pages in the suspect_pages table in msdb (system) database, containing all the corrupt pages that are reported by SQL queries. You can check the suspect_pages table to see the corrupted pages in the database. For this, you can run the SELECT statement as given below:

SELECT * FROM msdb..suspect_pages

The above command will return a grid with a row of each corrupted page. In our case (see the above image), you can see that the page, with id 368, is corrupted.

2. Execute DBCC CHECKDB Command

The DBCC CHECKDB command checks physical and logical integrity of database objects and index relationships. You can use the DBCC CHECKDB command, as given below, to check for corruption in the SQL database.

DBCC CHECKDB ‘database_name’;

If the above command finds corruption in the database, it will display consistency errors, along with the possible option to repair the database.

3. Use CHECKSUM Option

You can also use the CHECKSUM option to detect page-level corruption in SQL database, if the PAGE_VERIFY option is set to CHECKSUM. CHECKSUM is a database option that defines the process in SQL Server to check page consistency when it is written to the disk and read again from the disk. To check page-level corruption in the SQL database, run the following command:

SELECT name, page_verify_option_desc FROM sys.databases

4. Run DBCC PAGE Command

The DBCC PAGE command is an undocumented command that is used to detect corrupt pages in a database. To get the result from the DBCC PAGE command, you need to set the Trace flag 3604. Here is the command:

DBCC TRACEON (3604)
DBCC PAGE('Recovery_test',1,368,2) WITH TABLERESULTS

The command output will help you understand what kind of corruption has occurred and what type of data is affected.

Solutions to Fix Page Corruption in SQL Server Database

After checking the database by using any of the above methods, if you find any page-level errors or corruption in SQL database, then follow the below methods to repair the database and recover the data.

1 – Perform Page Level Restore

You can perform “Page Restore” to restore only the corrupt/damaged pages, without restoring the entire database. This is a faster way when you need to restore only a few individual pages. The page restore applies to databases that use full or bulk-logged recovery system. You can restore pages by using the SQL Server Management Studio or T-SQL commands. To restore pages using SSMS, follow the below steps:

Alternatively, you can use the T-SQL command – RESTORE DATABASE (see the below example) to restore the page

Note: You must know the File ID where the page is located and Page ID of the corrupted page.

RESTORE DATABASE <database_name> 
 PAGE = '<file: page> [ ,... n ] ' [ ,... n ]
 FROM <backup_device> [ ,... n ]
 WITH NORECOVERY

Limitations of the above method:

2 – Use DBCC CHECKDB Command

If multiple pages are corrupted, then you can use the DBCC CHECKDB command to repair the corrupt SQL database. You can use the REPAIR_ALLOW_DATA_LOSS option with the command.

First, you need to set the database in single-user mode by running the below command:

ALTER DATABASE Dbtesting SET SINGLE_USER

Then, run the below command to repair the database:

DBCC CHECKDB (N ’Dbtesting’, REPAIR_ALLOW_DATA_LOSS) WITH ALL_ERRORMSGS, NO_INFOMSGS;
GO

After repairing the database, set it to multi-user mode by using the below command:

ALTER DATABASE Dbtesting SET MULTI_USER

Limitations of  the above method:

3 – Use a Professional SQL Repair Tool

If the above methods fail, you can use a professional SQL database repair tool to repair the corrupt database. Stellar Repair for MS SQL is one such tool that can quickly repair the corrupt SQL database without any data loss. It can repair and restore all the database objects, including tables, pages, views, keys, and indexes, with complete precision.  

Some key features of Stellar Repair for MS SQL:

Watch the below video to know how the software works:

To Conclude

There are various reasons that can cause page-level corruption in SQL Server databases. Above, we have discussed how to detect page-level corruption in database. If there is corruption in a few pages, you can use the page restore method to restore the corrupted pages. If multiple pages are corrupted, you can use the DBCC CHECKDB command to repair the corrupt database. However, both these methods have some limitations. Alternatively, you can use a professional SQL repair tool, such as Stellar Repair for MS SQL. It can easily repair highly damaged SQL database files and restore all the data, including pages, with complete precision.

Related Post

Exit mobile version