Troubleshooting Guide: SQL Server Error 3035 – Cannot Perform a Differential Backup
Why This Error Happens
Error 3035 occurs when SQL Server has no baseline to measure changes against for a differential backup. This typically happens because no full backup has ever been taken for the database, the full backup history was broken by a database file restore, rename, or re-creation, or the msdb backup history was cleared/corrupted. Since SQL Server 2025 relies on the Base LSN (Log Sequence Number) recorded during the last full backup, any disruption to that chain invalidates subsequent differential backup attempts.
Step-by-Step Resolution Guide
Step 1: Verify Backup History Exists
- Open SQL Server Management Studio (SSMS) and connect to the instance.
- Run the following query to check for a valid full backup record:
SELECT database_name, type, backup_start_date
FROM msdb.dbo.backupset
WHERE database_name = 'YourDatabaseName'
ORDER BY backup_start_date DESC;
- Look for a row where
type = 'D'(Database Full Backup). If none exists, this confirms the root cause.
Step 2: Perform a Full Backup to Re-establish the Baseline
- Execute a full backup using T-SQL or SSMS to reset the LSN chain:
BACKUP DATABASE [YourDatabaseName]
TO DISK = 'C:\SQLBackups\YourDatabaseName_Full.bak'
WITH INIT, STATS = 10;
- Ensure the backup destination folder (e.g.,
C:\SQLBackups\) exists and the SQL Server Service Account has Write permissions on Windows Server 2025. - Wait for the “100 percent processed” confirmation in the Messages tab.
Step 3: Re-run the Differential Backup
- Once the full backup completes successfully, immediately attempt the differential backup again:
BACKUP DATABASE [YourDatabaseName]
TO DISK = 'C:\SQLBackups\YourDatabaseName_Diff.bak'
WITH DIFFERENTIAL, STATS = 10;
- If the error persists, check the SQL Server Error Log (via SSMS > Management > SQL Server Logs) for underlying I/O or permission errors masking the 3035 code.
Step 4: Check for Database State or Recovery Model Changes
- Verify the database is not in
SIMPLErecovery mode if you require differential/log chaining consistency:
SELECT name, recovery_model_desc FROM sys.databases WHERE name = 'YourDatabaseName';
- If the database was recently switched from
SIMPLEtoFULL, a new full backup is mandatory before differentials will function.
Alternative or Verification Steps
- Verification: Query
msdb.dbo.backupsetagain after the differential backup completes; you should see a new row withtype = 'I'(Differential) without triggering Error 3035. - Alternative: If backup history in
msdbis corrupted (not just empty), consider runningsp_delete_database_backuphistoryto clear fragmented records, followed immediately by a fresh Full Backup to start a clean backup lineage.