SQL Server database in RECOVERY PENDING or SUSPECT state with warning sign and disk inspection

SQL Server Database Stuck in RECOVERY PENDING or SUSPECT? What to Do First (and What Never to Do)

A SQL Server database in RECOVERY PENDING or SUSPECT isn’t always lost. Learn how to find the real cause, recover in the safest order, and which panic moves turn an outage into data loss.

October 6, 2026

Your application starts throwing connection errors, someone opens SQL Server Management Studio, and the database shows up with a label nobody wants to see: RECOVERY PENDING or SUSPECT. The next ten minutes matter more than the original failure. In our field work, we’ve seen more data lost to the panic response than to the incident itself — restarts at the wrong moment, files deleted to “free up space”, even entire virtual machines removed and rebuilt.

This guide walks through what to do in the right order: identify the exact state, find the real cause, choose the least destructive fix — and the moves you should never make, no matter how urgent it feels.

Short answer

A SQL Server database in RECOVERY PENDING is usually not damaged: SQL Server hit a resource problem, such as a missing file, wrong path, permission or full disk, while starting recovery. Fix that resource first, then retry with OFFLINE and ONLINE. SUSPECT means recovery failed. Copy every database file, restore the last good backup, and keep REPAIR_ALLOW_DATA_LOSS as the last resort.

Emergency SQL Server Support

Database Won't Come Online?

Our senior DBA team finds the root cause behind RECOVERY PENDING and SUSPECT databases and brings them back online with the least possible data loss.

Get Help Now

Last verified: 19 October 2026. Checked against Microsoft Learn for database states, ALTER DATABASE, DBCC CHECKDB, KILL and Accelerated Database Recovery. Microsoft’s database states page covers SQL Server 2017 and later plus Azure SQL; Accelerated Database Recovery starts with SQL Server 2019. T-SQL tested on SQL Server 2025 (build 17.0.4055.5).

Start Here: Diagnostic Table for the First Ten Minutes

Match what you see in sys.databases and the SQL Server error log to the row below before you change anything.

What you see Most likely meaning Do this first Do not
RECOVERY PENDING, error log names a file and “access denied” The SQL Server service account lost access to its data or log files (service account or folder permissions changed). Restore the permission, then run ALTER DATABASE ... SET OFFLINE and SET ONLINE. Restart the service again and again.
RECOVERY PENDING, error log says the system cannot find the path Drive letter, mount point or path changed, or storage came up in a different order after a reboot. Compare sys.master_files.physical_name with the disk and put the volume back where SQL Server expects it. Delete or recreate the database.
RECOVERY PENDING, disk is full, log_reuse_wait_desc is not NOTHING The log could not be reused (for example stalled replication) and filled the drive. Free or extend the disk, then fix what is holding log reuse. Delete the .ldf file to make room.
RECOVERING, error log shows a percentage Crash recovery is running. It is transient by design. Wait and watch the percentage in the error log. There is no session to kill or monitor here; recovery has to finish on its own. Restart SQL Server to “speed it up”.
RESTORING A restore sequence was never finished with recovery, or this is a log shipping or standby target. Check whether it is a log shipping secondary. If not, and all backups are applied, run RESTORE DATABASE ... WITH RECOVERY. Run WITH RECOVERY on a log shipping secondary.
SUSPECT Recovery failed. At least the primary filegroup is suspect and might be damaged. Copy every database file, then locate the last known good backup and restore it. Run repair before restoring, or detach the database.
EMERGENCY Someone set it manually. Read-only, logging disabled, sysadmin access only. Extract critical data that changed after your last backup. Treat it as a normal online database.

Step 1: Identify the Exact Database State

Don’t rely on the icon in Object Explorer. Ask SQL Server directly — this query works even when the database itself can’t be opened:

SELECT name,
       state_desc,
       user_access_desc,
       is_read_only,
       recovery_model_desc,
       log_reuse_wait_desc
FROM sys.databases
WHERE state_desc <> 'ONLINE'
   OR name = N'YourDatabase';

state_desc tells you which situation you’re in. log_reuse_wait_desc is the column most people skip — and as you’ll see below, it often explains why the database got there in the first place.

Quick Decision Table: What Each State Means

State What it means Danger First move
ONLINE Available. The undo phase of recovery may still be finishing. None Look elsewhere — the problem isn’t the database state.
OFFLINE Someone explicitly took it offline. Low Find out who and why before bringing it online.
RESTORING A restore is in progress or was never finished with recovery. Low – medium Check whether this is a log shipping or standby target first.
RECOVERING Crash recovery is running. Transient by design. Medium (if you interrupt it) Watch progress in the error log. Do not restart.
RECOVERY PENDING Recovery couldn’t start because of a resource problem. The data itself is not damaged. Medium Find the missing resource: disk, path, permission.
SUSPECT Recovery failed; at least the primary filegroup may be damaged. High Copy the files, then locate your last good backup.
EMERGENCY Set manually by a sysadmin. Read-only, logging disabled, sysadmin access only. High Use only to extract data or as a last-resort repair path.

The definitions above follow Microsoft’s database states documentation. The two states that bring people to this page are RECOVERY PENDING and SUSPECT, so let’s take them one at a time.

RECOVERY PENDING: The Data Is Fine, Something Around It Isn’t

This is the most misunderstood state — and the most recoverable. Microsoft’s own definition is explicit: the database isn’t damaged; SQL Server hit a resource-related error while trying to start recovery. Files may be missing or unreachable, or the system may not have what it needs to open them. Your job is to find that resource, not to “repair” the database.

Real causes we’ve seen in the field

  • Missing file permissions after a service restart. The SQL Server service account had been changed (or folder permissions tightened) while the instance was running. Nothing broke — until the next restart, when the service could no longer open its own data and log files.
  • A full disk, caused by replication. Replication had stopped delivering changes, so the transaction log couldn’t be reused and kept growing until the drive filled up. On the next startup there was no room to complete recovery. The giveaway was log_reuse_wait_desc = REPLICATION in the query above.
  • Changed drive letters. A customer reassigned drive letters on the server. The database files were all still there — just not at the paths SQL Server had recorded for them.
  • Storage reshuffled at the virtualization layer. VMware administrators changed the virtual disk / host bus configuration of the SQL Server VM, and at boot the disks came up under swapped drive letters. Data volume where the log volume should be, and vice versa.

Notice the pattern: in every case the database was intact. The fix was to put the environment back the way SQL Server expected it — not to run a single repair command.

How to diagnose and fix it

First, compare where SQL Server expects the files with what actually exists on disk:

SELECT type_desc,
       name AS logical_name,
       physical_name,
       state_desc
FROM sys.master_files
WHERE database_id = DB_ID(N'YourDatabase');

Then read what SQL Server said at startup. The error log almost always names the exact file and the operating system error (for example “access denied” or “the system cannot find the path specified”). If you’re new to reading it, our guide to SQL Server error logs covers the basics.

-- Current error log, filtered to messages that mention the database
EXEC sys.xp_readerrorlog 0, 1, N'YourDatabase';

Fix the underlying cause — free or extend the disk, restore the drive letter or mount point, grant the service account access to the folder — and then let SQL Server retry recovery:

ALTER DATABASE [YourDatabase] SET OFFLINE;
ALTER DATABASE [YourDatabase] SET ONLINE;

Warning

If the cause affected the whole instance (a disk that mounted too late at boot, for example), restarting the SQL Server service once the storage is healthy is also fine. What isn’t fine is restarting repeatedly before you’ve found the cause — that only adds noise to the error log.

SUSPECT: Recovery Ran and Failed

SUSPECT means SQL Server tried to recover the database and couldn’t — at least the primary filegroup may be damaged. This is where careful order of operations protects your data.

  1. Stop and copy the files. Before any repair attempt, take physical copies of every file that belongs to the database: .mdf, .ndf, .ldf, full-text catalogs and FILESTREAM folders. Microsoft lists this as a prerequisite for repair, and it’s what keeps every later option open.
  2. Find the last known good backup. In the vast majority of cases, restoring from backup is the right answer — and the fastest one. Our step-by-step SQL Server restore guide walks through full, differential and log restores.
  3. Use EMERGENCY mode to rescue data, not to “fix” it. A sysadmin can set the database to EMERGENCY, which makes it read-only for sysadmins only. This is useful for copying out critical tables that changed after your last backup.
  4. Treat REPAIR_ALLOW_DATA_LOSS as the very last resort. According to Microsoft’s DBCC CHECKDB documentation, it can lose more data than restoring a good backup; when it rebuilds the transaction log there’s no full ACID guarantee, and you must validate constraints afterward with DBCC CHECKCONSTRAINTS.

When the backup isn’t enough

Sometimes the backup exists but doesn’t contain everything you need. We worked with a customer whose backups didn’t include their full-text indexes, and rebuilding them from scratch wasn’t an option within their downtime window. Instead of repairing the damaged database, our team created a placeholder database with a matching file layout, swapped in the original data files, and brought it online in a controlled way — recovering the full-text structures that a plain restore would have lost.

It worked because the team knew exactly which steps were safe at each point. Attempted without that experience, the same technique can turn a recoverable database into an unrecoverable one. We’ll publish the full story as a separate case study.

RESTORING and RECOVERING: Usually a Matter of Patience

RESTORING most often means a restore sequence was started but never finished WITH RECOVERY. If this is a one-off restore and all the backups you need are applied, finish it:

RESTORE DATABASE [YourDatabase] WITH RECOVERY;

Note

One important exception: on a log shipping secondary, RESTORING is the normal state. Running WITH RECOVERY there brings the copy online but ends its ability to accept further log backups — you’d have to re-initialize log shipping.

RECOVERING means SQL Server is replaying and rolling back transactions after a restart or failover. The error log reports progress in phases and percentages (“Recovery of database … is 42% complete”). Large or long-running open transactions make this phase slow. On SQL Server 2019 and later, Accelerated Database Recovery can shorten it dramatically — worth enabling before you need it.

What Never to Do — Real Mistakes We’ve Cleaned Up

Every item on this list is something we’ve personally seen make an incident worse:

  • Restarting after killing a long-running transaction. Killing a large transaction starts a rollback. Restarting the service doesn’t skip that work — recovery has to finish the rollback before the database opens, and now everything else waits too. Check progress with KILL <session_id> WITH STATUSONLY and let it finish.
  • Restarting a replica that is catching up. A system administrator restarted a node in a replicated environment while it was synchronizing, and hours of progress went back to zero.
  • Deleting the SQL Server virtual machine. Yes, really — more than once. “We’ll just rebuild it” removes the very files a recovery would have needed.
  • Deleting the .ldf file to free space. The log is not a scratch file. Without it, a database that was perfectly recoverable can go straight to SUSPECT.
  • Detaching a damaged database to “re-attach it cleanly”. Attaching requires a successful recovery — exactly what’s failing. A database you can’t attach is far harder to work with than one SQL Server still knows about.
  • Changing settings you don’t fully understand. One customer set FILLFACTOR to 1, believing it meant “fill completely”. It means each page is left about 1% full — the indexes ballooned, and runaway file growth is exactly how a full disk, and a RECOVERY PENDING database, begins.
  • Running repair before restore. If a good backup exists, restore it. Repair is for when no backup can help.
  • Pasting a command from a forum or an AI chat. The suggestion may be right for someone’s environment. It doesn’t know your backups, your topology, or what’s at stake.

Official Behavior, Aryasoft Field Notes and Our Recommendation

We separate three things on purpose: what Microsoft documents, what we have seen on real incidents, and what we advise. Treat them differently.

Topic Official behavior (Microsoft) Aryasoft field note Our recommendation
RECOVERY PENDING A resource-related error occurred during recovery. The database isn’t damaged, but files might be missing or system resource limits might prevent startup. Further user action is required. In every case we describe above (permissions, full disk, drive letters, swapped virtual disks) the database was intact. Find and fix the missing resource. Do not run a repair command.
SUSPECT At least the primary filegroup is suspect and might be damaged. The database can’t be recovered during startup. A backup sometimes lacks something you need, such as full-text indexes, which is when careful file-level work can matter. Copy all files first, then restore the last good backup.
REPAIR_ALLOW_DATA_LOSS An emergency last-resort option. It can lose more data than restoring a last known good backup, there is no full ACID guarantee after a log rebuild, and you should create physical copies of the database files before repair. Running repair before restoring is on our list of mistakes that make incidents worse. Restore first. If you must repair, do it on copies, then run DBCC CHECKCONSTRAINTS and back up.
EMERGENCY READ_ONLY, logging disabled, sysadmin only, primarily for troubleshooting. Microsoft suggests considering it to extract critical data before a repair. No separate field note. Use it to rescue data, not to “fix” the database.
Restarting during rollback KILL ... WITH STATUSONLY only reports the rollback progress; it does not end or roll back the session. Restarts after killing a long transaction, or during replica catch-up, made incidents longer. Check progress and let the rollback finish.

How to Make Sure It Doesn’t Happen Again

  • Run DBCC CHECKDB regularly, so corruption is found by a scheduled job instead of by your users.
  • Test your backups by actually restoring them — a backup job that “succeeded” proves only that a file was written.
  • Monitor free disk space and log_reuse_wait_desc, especially on replicated databases.
  • Agree with your infrastructure team that storage, drive-letter and service-account changes on SQL Server hosts go through the DBA first.
  • Read our deeper dive on SQL Server corruption to understand where damaged pages come from.

For a real example of disciplined recovery, see how we recovered from an accidental restore with a 1-minute RPO.

How Fast Aryasoft Responds

When a production database is down, response time is part of the fix. Customers on our SLA plan get a DBA working on the incident within 30 minutes during business hours and 2 hours outside business hours. Maintenance support customers get a response within 2 hours during business hours and 4 hours outside them.

Not necessarily — usually not. Microsoft defines RECOVERY PENDING as a resource-related error during recovery: the database isn’t damaged, but a file is missing or unreachable, or a resource like disk space or permissions is preventing startup. Fix the resource problem and recovery can usually complete.
Only after you’ve found and fixed the cause. Restarting without fixing anything just produces the same state again. If the cause affected the whole server, such as a disk that mounted late, one restart after the fix is fine.
Sometimes, using EMERGENCY mode and DBCC CHECKDB with REPAIR_ALLOW_DATA_LOSS — but that’s a last resort that can lose data and break transactional consistency. Always copy the database files first, and get expert help if the data matters.
It depends on how much transaction log has to be redone and undone. Large open transactions make it longer. The SQL Server error log shows the percentage complete; Accelerated Database Recovery (SQL Server 2019 and later) can shorten it significantly.
In RECOVERY PENDING, SQL Server hit a resource-related error while starting recovery; the database isn’t damaged, but files might be missing or a resource limit blocks startup. In SUSPECT, at least the primary filegroup is suspect and might be damaged, and the database can’t be recovered during startup. Both leave the database unavailable until someone acts.
Query state_desc in sys.databases, or read the Status property with DATABASEPROPERTYEX. This works even when you can’t open the database itself.
It is meant for troubleshooting. EMERGENCY marks the database READ_ONLY, disables logging and limits access to sysadmin members. Microsoft suggests considering it to extract critical data before a repair; it is not a way to bring the database back to normal service.

Sources (Microsoft Learn)

Technical claims in this guide were checked against these primary sources on 19 October 2026. Microsoft can change documentation at any time, so re-check version-specific details before a production change.

SQL Server Emergency Support

Database Down Right Now? Put a Senior DBA on It

If a production database is stuck in RECOVERY PENDING or SUSPECT, stop changing things and bring in a senior DBA before anything irreversible happens. Aryasoft’s emergency and managed DBA service covers root-cause analysis, safe recovery and the monitoring that keeps it from happening twice.

4.7/5