How to fix Error 4310 on Windows Server 2025 / Windows 11

Troubleshooting Guide: Error 4310 – “RESTORE PAGE is not allowed on file because the file is not online”

Why This Error Happens

This error occurs when SQL Server 2025 attempts a page-level restore on a data file that is currently in an OFFLINE, RESTORING, or RECOVERY PENDING state rather than the required ONLINE state. Page-level restores are designed to be an online operation, meaning the database must be accessible and the specific file’s metadata in sys.master_files must reflect an operational status before SQL Server will apply the restored page. This is frequently caused by a prior failed restore sequence, a file left in a suspect state due to underlying storage corruption, or an incomplete transaction log chain that prevented the file from transitioning back to an online state.

Step-by-Step Resolution Guide

Step 1: Verify the Current State of the Database File

  • Open SQL Server Management Studio (SSMS) or a query window connected to the instance.
  • Run the following query to check file status:
  SELECT name, state_desc, physical_name 
  FROM sys.master_files 
  WHERE database_id = DB_ID('YourDatabaseName');
  • Confirm whether the file shows OFFLINE, RECOVERY_PENDING, or SUSPECT instead of ONLINE.

Step 2: Check the Windows Storage Layer for File Accessibility

  • Navigate to the physical file path (e.g., C:\Program Files\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\DATA\) and confirm the .mdf or .ndf file is not locked, moved, or missing.
  • On Windows Server 2025 / Windows 11, check Event Viewer under Windows Logs > System for any Disk or NTFS corruption warnings (Event ID 7 or 55) that may have forced the file offline.
  • If using Storage Spaces Direct or a SAN, verify the volume is mounted and not in a degraded state via Get-Volume in PowerShell.

Step 3: Bring the File Back Online Before Retrying the Restore

  • Attempt to bring the specific file online using:
  ALTER DATABASE YourDatabaseName 
  MODIFY FILE (NAME = YourLogicalFileName, OFFLINE = FALSE);
  • If the file remains unresponsive, restore the full file (not just the page) from the last known good full backup to reset its state:
  RESTORE DATABASE YourDatabaseName 
  FILE = 'YourLogicalFileName' 
  FROM DISK = 'C:\Backups\YourDatabase_Full.bak' 
  WITH NORECOVERY;

Step 4: Rebuild the Restore Sequence

  • Once the file is online, re-issue the RESTORE PAGE command targeting the specific corrupted page ID(s) identified in the SQL Server Error Log.
  • Follow immediately with a transaction log restore to roll the page forward and bring it current with the rest of the database:
  RESTORE LOG YourDatabaseName 
  FROM DISK = 'C:\Backups\YourDatabase_Log.trn' 
  WITH RECOVERY;

Alternative or Verification Steps

  • Verify the fix: Run DBCC CHECKDB('YourDatabaseName') WITH NO_INFOMSGS, ALL_ERRORMSGS; to confirm the page is no longer marked as corrupt and the file reports a clean bill of health.
  • Alternative solution: If the file cannot be brought online due to irreparable hardware failure, perform a full database restore to a new storage volume rather than attempting an isolated page restore.