Skip to content
Microsoft SQL Server

SQL Server Error 3183

RESTORE detected an error on a page as read from the backup set

Severity 16 Backup & Restore
Applies to: All supported SQL Server versions (2016 to 2025), Azure SQL Managed Instance
Last technically reviewed 24 October 2026 on SQL Server 2025 (17.0.1145.4)
The full message
Msg 3183, Level 16, State 1, Line 1
RESTORE detected an error on page (1:243) in database "AppDb" as read from the backup set.
Other forms of this message
Followed by (documented by Microsoft)
Msg 3013, Level 16, State 1, Line 1
RESTORE DATABASE is terminating abnormally.
Error number
3183
Severity
16 (user-correctable error)
State
1
Product
Microsoft SQL Server Database Engine
Versions
All supported SQL Server versions (2016 to 2025), Azure SQL Managed Instance
Last reviewed
24 October 2026

What it means

Error 3183 means a page read from the backup failed its checksum validation during RESTORE, so the backup (or the database it was taken from) contains a damaged page and the restore stopped.

A backup taken WITH CHECKSUM carries the page checksums of the database. While restoring it, SQL Server validates each page again; if a page does not match, it raises 3183 with the page address (file:page) and the database name, and the restore ends with Msg 3013 ... RESTORE DATABASE is terminating abnormally. The target database is not usable from this attempt, but nothing else is affected.

The damage was either already in the database when it was backed up, or happened to the backup afterwards: on the disk or tape that stores it, or while it was copied between servers. Microsoft points to hardware and operating system issues as the usual root cause. Treat it as a storage incident, not as a restore syntax problem: find a good backup, and find out where the damage came from so other backups are not affected too.

Common causes

  • The backup file was damaged after it was written: faulty disk, controller or tape, or a storage system that returned bad data.
  • The file was damaged while it was copied or transferred (network share, cloud upload, removable media) and the copy differs from the original.
  • The source database already had a damaged page, and the backup was taken WITH CHECKSUM, CONTINUE_AFTER_ERROR, which writes the backup despite the error.
  • Memory or I/O path problems on the server that wrote or read the backup.

Diagnose it

Read-only These queries only read metadata and dynamic management views. They do not change data, permissions or configuration, so they are safe to run first.

Is the backup marked as damaged, and does it have checksums?

For a backup file from anywhere, RESTORE HEADERONLY FROM DISK = N'D:\Backups\AppDb.bak'; shows HasBackupChecksums and IsDamaged, and RESTORE VERIFYONLY FROM DISK = N'...' WITH CHECKSUM; reads the whole file and checks every page without restoring anything. For backups taken on this server, msdb has the same flags.

SELECT TOP (10) bs.backup_finish_date, bs.type, bs.has_backup_checksums, bs.is_damaged,
       bs.server_name, mf.physical_device_name
FROM msdb.dbo.backupset AS bs
JOIN msdb.dbo.backupmediafamily AS mf ON mf.media_set_id = bs.media_set_id
WHERE bs.database_name = N'AppDb'
ORDER BY bs.backup_finish_date DESC;
What to look for

is_damaged = 1 means the backup was written with CONTINUE_AFTER_ERROR over a damaged page: the problem was in the source database. If the backup is not flagged, the file was more likely damaged later, and an older or another copy may restore cleanly.

Has the source database reported damaged pages?

Run on the server the backup came from.

SELECT DB_NAME(database_id) AS database_name, file_id, page_id,
       event_type, error_count, last_update_date
FROM msdb.dbo.suspect_pages
ORDER BY last_update_date DESC;
What to look for

A row for the same file and page as in the 3183 message means the page was already bad in the database itself; see error 824. No rows points to damage in the backup copy.

Check the source database for consistency

Read-only, but it reads the whole database: run it outside busy hours on large databases.

DBCC CHECKDB (N'AppDb') WITH NO_INFOMSGS, ALL_ERRORMSGS;
What to look for

No output means no corruption was found in the live database, so a fresh backup WITH CHECKSUM should restore cleanly. Errors here mean the source needs attention first.

How to fix it

Each fix is labelled with what it changes. Try read-only checks and the least invasive fix first, and test changes outside production.

Restore from another good backup

Changes database state

Microsoft's first recommendation is the last known good backup. Use an earlier full backup (or a second copy of the same file from another location) and bring it forward with differential and log backups, all WITH CHECKSUM and NORECOVERY except the last step. Log backups taken after the damaged full backup still apply on top of an earlier full backup if the log chain is unbroken.

Caution: REPLACE overwrites the existing database. If it is the live database and still holds changes, take a tail-log backup first (see error 3159).

RESTORE DATABASE AppDb
FROM DISK = N'\\backupserver\sql\AppDb_full_20261020.bak'
WITH CHECKSUM, NORECOVERY, REPLACE;

RESTORE LOG AppDb
FROM DISK = N'\\backupserver\sql\AppDb_log_20261021_0000.trn'
WITH CHECKSUM, RECOVERY;

If the source database is healthy: take a new backup and verify it

Client or network side

When the live database passes DBCC CHECKDB and only the backup is bad, take a new backup WITH CHECKSUM to different storage, copy it again if needed, and run RESTORE VERIFYONLY ... WITH CHECKSUM on the copy before you rely on it.

Last resort only: CONTINUE_AFTER_ERROR into a separate database

Changes database state

Microsoft documents CONTINUE_AFTER_ERROR as a way to restore past the damaged page when no good backup exists, followed by DBCC CHECKDB. Restore under a new name with MOVE, never over the database or backup you still have, then check it and copy out what you can.

Caution: The result is a database with known damage: the restore carries on past the bad pages instead of repairing them, so some data can be missing or wrong. Never put it back into production use as if it were a normal restore, never restore it over your only other copy, and get the owner of the data to agree on what is recovered. Exhaust every other backup first.

RESTORE DATABASE AppDb_Salvage
FROM DISK = N'D:\Backups\AppDb_full_20261023.bak'
WITH CONTINUE_AFTER_ERROR,
     MOVE N'AppDb'     TO N'D:\SQLData\AppDb_Salvage.mdf',
     MOVE N'AppDb_log' TO N'D:\SQLLogs\AppDb_Salvage_log.ldf';

DBCC CHECKDB (N'AppDb_Salvage') WITH NO_INFOMSGS, ALL_ERRORMSGS;

Examples

Restoring a backup with a damaged page (as documented by Microsoft)

Shown as documented by Microsoft and not reproduced here: producing it requires deliberately damaging a database or backup file. The database name and page address are Microsoft's example values.

RESTORE DATABASE corruption_errors_test
FROM DISK = N'D:\Backups\corruption_errors_test.bak'
WITH CHECKSUM;
Result
Msg 3183, Level 16, State 1, Line 1
RESTORE detected an error on page (1:243) in database "corruption_errors_test" as read from the backup set.
Msg 3013, Level 16, State 1, Line 1
RESTORE DATABASE is terminating abnormally.

How to prevent it

Take every backup WITH CHECKSUM (or enable the backup checksum default server setting after review), keep at least two copies on different storage, and verify copies with RESTORE VERIFYONLY ... WITH CHECKSUM after every transfer. Run DBCC CHECKDB on a schedule so damage in the database is found before it reaches your backups.

Test restores regularly on another server. A restore test is the only way to be sure a backup can be restored, and it catches damaged backup media while older good backups still exist.

Common questions

Is my production database corrupt if I get 3183?

Not necessarily. The damaged page may exist only in the backup copy. Check msdb.dbo.suspect_pages and run DBCC CHECKDB on the source database to find out.

Why did the backup itself not fail?

Either it was taken without CHECKSUM, so pages were not validated while writing, or with CONTINUE_AFTER_ERROR, or the damage happened to the file after the backup finished.

Should I just add CONTINUE_AFTER_ERROR?

Only when no good backup exists, and only into a separate database. It restores past the damage instead of fixing it, so the result has to be checked and treated as damaged.

Learn more on CodeWithSQL

Official documentation

Last technically reviewed 24 October 2026; examples and diagnostics run on SQL Server 2025 (17.0.1145.4). Message text checked against the engine's sys.messages catalogue.

Still stuck on a SQL Server error?

Browse the full SQL Server error library, or get hands-on help from an experienced SQL professional.