Database Restore Point Incomplete – Fix It Fast
Your database restore point is incomplete because a log backup is missing or the backup chain is broken. Here's how to fix it without rebuilding from scratch.
Quick answer (for advanced users)
Run RESTORE HEADERONLY FROM DISK = 'C:\backups\your_db.bak' to check your backup chain. Missing log backups cause this. You'll need to restore the full backup with NORECOVERY, then all logs in order. If you're missing a log, you're stuck with a full restore and lose data after the last complete log.
Why this happens
I see this error all the time. You try to restore a database to a specific point in time — say 2:00 PM Tuesday — but SQL Server says "restore point incomplete." The root cause is almost always a broken backup chain. Your full backup at midnight, differential at 6 AM, and then a transaction log backup at 10 AM — but the 11 AM log is missing. Maybe the backup job failed, maybe someone deleted the file to save space. Doesn't matter. SQL Server needs every log backup in sequence to rebuild the database to that exact point. Had a client last month whose entire accounting system went down because their nightly full backup ran, but the log backups had been failing silently for three days. The restore point was incomplete for any time after 8 AM Friday.
How to fix it – step by step
- Identify your backup chain. Run this on your backup drive:
RESTORE HEADERONLY FROM DISK = 'C:\Backups\YourDB_FULL.bak';
RESTORE HEADERONLY FROM DISK = 'C:\Backups\YourDB_DIFF.bak';
RESTORE HEADERONLY FROM DISK = 'C:\Backups\YourDB_Log_20231010_1000.trn';
Look at the Position column and FirstLSN/LastLSN values. Each backup's FirstLSN should match the previous backup's LastLSN. If there's a gap, that's your problem.
- Find the missing file. Check your backup folder for all files with
.bak,.diff,.trnextensions. Sort by date. Did a file get deleted? Sometimes backups overwrite each other — bad retention policy.
- Restore using WITH NORECOVERY. You need to restore the full backup first, then every log backup in order, keeping the database in restoring state:
RESTORE DATABASE YourDB FROM DISK = 'C:\Backups\YourDB_FULL.bak' WITH NORECOVERY;
RESTORE LOG YourDB FROM DISK = 'C:\Backups\YourDB_Log_20231010_1000.trn' WITH NORECOVERY;
-- repeat for each log, then the final one with recovery
RESTORE LOG YourDB FROM DISK = 'C:\Backups\YourDB_Log_20231010_1200.trn' WITH RECOVERY;
- If you're missing a log backup. You have two choices:
- Restore with the last complete log and stop — lose data after that point.
- Skip to an older full backup and rebuild the database from scratch — lose everything after that older full backup.
Real example: Client had a full backup at midnight, logs at 6 AM, 7 AM, missing 8 AM log, then logs at 9 AM and 10 AM. We restored the full backup with NORECOVERY, then the 6 AM and 7 AM logs with NORECOVERY, then the 9 AM log with NORECOVERY (SQL Server accepted it because the LSN chain wasn't broken — the 7 AM log ended where 9 AM log started? No, it still failed because the gap was 8 AM. We had to restore the full backup and then jump to the 9 AM log, losing all data between 7 AM and 9 AM).
Alternative fixes if the main one fails
Option A: Use STOPAT with a different time
If you don't care about the exact point, try restoring to the end of the last good log backup:
RESTORE DATABASE YourDB FROM DISK = 'C:\Backups\YourDB_FULL.bak' WITH NORECOVERY;
RESTORE LOG YourDB FROM DISK = 'C:\Backups\YourDB_Log_last_good.trn' WITH RECOVERY;
This works if you're okay losing the latest transactions.
Option B: Restore from a different backup set
If your backup chain is completely broken — say you have only a full backup from two days ago — you can restore that full backup and then apply any differentials that were taken after it. But you'll lose everything after the last differential.
Option C: Use a third-party tool
Tools like Red-Gate SQL Backup or Idera can sometimes stitch together broken chains. They're not magic — if a log is physically missing, it's gone. But they can help when a backup file is corrupt, not missing. I've had mixed results. Don't rely on them.
Prevention tip – stop this from happening again
Set up a real backup monitoring system. Don't just trust the SQL Server Agent job history. I use sp_readerrorlog and a custom email alert that checks the backup folder every hour:
-- Check last backup time per database
SELECT database_name, MAX(backup_finish_date) AS last_backup
FROM msdb.dbo.backupset
WHERE type = 'L' -- log backups
GROUP BY database_name;
If a database hasn't had a log backup in over an hour, send an alert. Also, set your backup retention to at least 7 days for log backups. Never let them auto-delete without a check.
One more thing: test your restores quarterly. I cannot tell you how many times I've seen backup jobs that run fine but the backups are corrupt. Restore to a test server, run DBCC CHECKDB, and verify the point-in-time restore works. That's what separates a real DBA from someone who just clicks "New Backup Job" in SSMS.
Was this solution helpful?