Troubleshooting Guide: Error 3105 — RESTORE Cannot Restore Any More Pages
Why This Error Happens
This error occurs when SQL Server’s internal page-tracking buffer for a page-level restore sequence reaches its maximum capacity, typically because an overly long or improperly sequenced chain of transaction log backups is being applied during a page restore operation. It commonly arises when a DBA attempts to restore too many individual pages in a single RESTORE DATABASE...PAGE statement, or when the restore sequence hasn’t been finalized with a tail-log backup before continuing. Corrupted backup files or an interrupted restore chain can also cause SQL Server to lose track of the proper sequence, triggering this limit prematurely.
Step-by-Step Resolution Guide
Step 1: Complete or Reset the Current Restore Sequence
- Run
RESTORE DATABASE [YourDB] WITH RECOVERYto finalize the existing page restore sequence if it is already in progress. - If recovery isn’t desired yet, verify the sequence status using
RESTORE HEADERONLYagainst the log backup files to confirm LSN continuity. - Avoid issuing additional
RESTORE...PAGEcommands until the current batch is fully resolved.
Step 2: Reduce the Number of Pages Restored Per Batch
- Instead of listing dozens of pages in one
RESTORE DATABASE...PAGE='1:100,1:101,1:102...'statement, split the page list into smaller batches (e.g., 10–20 pages per restore command). - Execute each batch sequentially, applying all required log backups between batches using
RESTORE LOG [YourDB] FROM DISK = 'C:\Backups\YourDB_log.trn' WITH NORECOVERY. - This prevents the internal restore-tracking array from exceeding its page limit.
Step 3: Validate Backup File Integrity
- Run
RESTORE VERIFYONLY FROM DISK = 'C:\Backups\YourDB_full.bak'to confirm the backup file isn’t corrupted. - Check Windows Server 2025 Event Viewer under Applications and Services Logs > MSSQLSERVER for I/O or disk-related warnings that may indicate storage corruption affecting the backup chain.
- If corruption is found, restore from an alternate backup set or rebuild the backup chain from the last known-good full backup.
Step 4: Apply the Tail-Log Backup and Finalize Recovery
- Before bringing the database online, back up the tail of the log using
BACKUP LOG [YourDB] TO DISK = 'C:\Backups\YourDB_tail.trn' WITH NORECOVERY. - Restore this tail-log backup as the final step in the sequence:
RESTORE LOG [YourDB] FROM DISK = 'C:\Backups\YourDB_tail.trn' WITH RECOVERY. - This closes out the restore sequence cleanly and clears the internal page-tracking buffer.
Alternative or Verification Steps
- After recovery, run
DBCC CHECKDB('YourDB') WITH NO_INFOMSGSto confirm the restored pages are consistent and no further corruption exists. - If the error persists across multiple attempts, consider performing a full database restore instead of page-level restores, especially if the number of corrupted pages exceeds 5–10% of the database size.