Skip to content
Microsoft SQL Server

SQL Server Error 4208

The statement is not allowed while the recovery model is SIMPLE

Severity 16 Backup & Restore
Applies to: All supported SQL Server versions (2016 to 2025), Azure SQL Managed Instance (where you can take log backups yourself)
Last technically reviewed 24 October 2026 on SQL Server 2025 (17.0.1145.4)
The full message
Msg 4208, Level 16, State 1, Line 1
The statement BACKUP LOG is not allowed while the recovery model is SIMPLE. Use BACKUP DATABASE or change the recovery model using ALTER DATABASE.
Other forms of this message
Followed by (always)
Msg 3013, Level 16, State 1, Line 1
BACKUP LOG is terminating abnormally.
Error number
4208
Severity
16 (user-correctable error)
State
1
Product
Microsoft SQL Server Database Engine
Versions
All supported SQL Server versions (2016 to 2025), Azure SQL Managed Instance (where you can take log backups yourself)
Last reviewed
24 October 2026

What it means

Error 4208 means you tried to back up the transaction log of a database that uses the SIMPLE recovery model, where log backups do not exist.

In the SIMPLE recovery model SQL Server truncates the transaction log at checkpoints by itself, so the log never holds an unbroken record of changes since the last backup. A log backup would have nothing complete to save, and it could never be applied during a restore, so the engine rejects BACKUP LOG outright with 4208 and the statement ends with Msg 3013 ... BACKUP LOG is terminating abnormally. Nothing is written.

Read the message as a mismatch between the backup plan and the database setting, not as a failure of the backup itself. The question to answer is which side is wrong: either the database really should be SIMPLE (and the log backup job should leave it out), or someone needs point-in-time restore and the recovery model has to be FULL. The same check applies to a tail-log backup WITH NORECOVERY: in SIMPLE there is no tail to save.

Common causes

  • A log backup job or maintenance plan includes every user database, and some of them use SIMPLE recovery (often because the model database is SIMPLE, so new databases inherit it).
  • Someone switched the database to SIMPLE, for example to shrink a large log, and the scheduled log backups now fail.
  • A restore runbook or the SSMS restore dialog tries to take a tail-log backup of a SIMPLE database before restoring over it.
  • A database was restored or created from a script that sets SIMPLE recovery, on a server where log backups are expected.

Diagnose it

Read-only These queries only read metadata and dynamic management views. They do not change data, permissions or configuration, so they are safe to run first.

Recovery model of the database (and of model, which new databases inherit)

SELECT name, recovery_model_desc, log_reuse_wait_desc
FROM sys.databases
WHERE name IN (N'AppDb', N'model');
What to look for

SIMPLE for the database explains the error. If model is SIMPLE too, every new database starts in SIMPLE and the log backup job will keep finding them.

Which recovery model did earlier backups record?

msdb.dbo.backupset stores the recovery model at the time of each backup, so it shows whether the database used to be FULL and when that changed.

SELECT TOP (10) type, recovery_model, backup_start_date, backup_finish_date, is_copy_only
FROM msdb.dbo.backupset
WHERE database_name = N'AppDb'
ORDER BY backup_finish_date DESC;
What to look for

Log backups (type = 'L') with recovery_model = FULL followed by nothing but full backups in SIMPLE means the model was switched and the log chain ended there.

Every database a log backup job would trip over

SELECT name, recovery_model_desc, state_desc
FROM sys.databases
WHERE recovery_model_desc = 'SIMPLE'
  AND database_id > 4
ORDER BY name;
What to look for

The user databases in SIMPLE recovery. Each one fails with 4208 if a job tries to back up its log.

How to fix it

Each fix is labelled with what it changes. Try read-only checks and the least invasive fix first, and test changes outside production.

Leave SIMPLE databases out of the log backup job

Client or network side

If losing the changes since the last full or differential backup is acceptable for this database (staging, reporting copies, databases rebuilt from source), SIMPLE is a valid choice and the job is what needs fixing. Make the job select databases by recovery_model_desc instead of by name, and protect the database with full and differential backups.

-- Back up a SIMPLE database with full (and optionally differential) backups instead
BACKUP DATABASE AppDb
TO DISK = N'D:\Backups\AppDb_diff_20261023.bak'
WITH DIFFERENTIAL, CHECKSUM;

Switch to FULL recovery and start the log chain with a full backup

Changes configuration

If the database needs point-in-time restore, set it to FULL and take a full (or differential, if a full already exists) backup straight away. Until that backup exists, log backups fail with error 4214 instead. Then schedule log backups often enough for your data loss target.

Caution: In FULL recovery the log is only reused after a log backup. Without regular log backups it grows until the disk or MAXSIZE is reached and the database stops accepting changes (error 9002). Schedule the log backups before or together with the switch.

ALTER DATABASE AppDb SET RECOVERY FULL;

BACKUP DATABASE AppDb
TO DISK = N'D:\Backups\AppDb_full_20261023.bak'
WITH CHECKSUM;

BACKUP LOG AppDb
TO DISK = N'D:\Backups\AppDb_log_20261023_1400.trn'
WITH CHECKSUM;

Before a restore over a SIMPLE database: skip the tail-log step

Client or network side

A SIMPLE database has no log tail to save, so a restore over it can only go back to the last full or differential backup. Clear the tail-log option in the SSMS restore dialog (or remove the BACKUP LOG step from the script). If the current contents matter, take a COPY_ONLY full backup first so they are not lost.

BACKUP DATABASE AppDb
TO DISK = N'D:\Backups\AppDb_before_restore.bak'
WITH COPY_ONLY, CHECKSUM;

Examples

Log backup of a SIMPLE recovery database

-- Throwaway database in SIMPLE recovery
ALTER DATABASE AppDb SET RECOVERY SIMPLE;
BACKUP LOG AppDb TO DISK = 'NUL';   -- NUL discards the output; the error comes first
Result
Msg 4208, Level 16, State 1, Line 3
The statement BACKUP LOG is not allowed while the recovery model is SIMPLE. Use BACKUP DATABASE or change the recovery model using ALTER DATABASE.
Msg 3013, Level 16, State 1, Line 3
BACKUP LOG is terminating abnormally.

Reproduced on SQL Server 2025 (17.0.1145.4), 23 October 2026.

A working log chain, then a switch to SIMPLE

Lab only: DISK = 'NUL' discards the backups, which is never acceptable for real backups. The last statement is the tail-log backup a restore runbook would take; it fails the same way.

ALTER DATABASE AppDb SET RECOVERY FULL;
BACKUP DATABASE AppDb TO DISK = 'NUL';
BACKUP LOG AppDb TO DISK = 'NUL';                    -- works in FULL

ALTER DATABASE AppDb SET RECOVERY SIMPLE;           -- for example, to shrink the log
USE master;
BACKUP LOG AppDb TO DISK = 'NUL' WITH NORECOVERY;   -- tail-log backup before a restore
Result
Msg 4208, Level 16, State 1, Line 7
The statement BACKUP LOG is not allowed while the recovery model is SIMPLE. Use BACKUP DATABASE or change the recovery model using ALTER DATABASE.
Msg 3013, Level 16, State 1, Line 7
BACKUP LOG is terminating abnormally.

Reproduced on SQL Server 2025 (17.0.1145.4), 23 October 2026.

How to prevent it

Decide the recovery model per database with whoever owns the data, write it down, and let backup jobs read sys.databases rather than a hard-coded list: log backups for FULL and BULK_LOGGED, full and differential backups for everything. Check the recovery model of model, because new databases copy it.

Do not switch production databases to SIMPLE to manage log size; schedule log backups more often instead (see error 9002 for why a log fills up). Each switch ends the log chain, and point-in-time restore is impossible across it.

Common questions

How do I free log space in a SIMPLE database without a log backup?

You do not need one: in SIMPLE recovery a checkpoint truncates the inactive part of the log. If the log still grows, something else holds it, such as a long open transaction; log_reuse_wait_desc in sys.databases tells you what.

Can I restore a SIMPLE database to a point in time?

No. Without log backups you can restore only to the moment a full or differential backup finished. If that is not good enough, the database needs the FULL recovery model and regular log backups.

Is BULK_LOGGED affected by 4208 too?

No. BULK_LOGGED keeps a log chain and allows log backups; 4208 is raised only in SIMPLE. Point-in-time restore is limited inside log backups that contain bulk-logged operations.

Learn more on CodeWithSQL

Official documentation

Last technically reviewed 24 October 2026; examples and diagnostics run on SQL Server 2025 (17.0.1145.4). Message text checked against the engine's sys.messages catalogue.

Still stuck on a SQL Server error?

Browse the full SQL Server error library, or get hands-on help from an experienced SQL professional.