Se você receber um erro que diz A instrução BACKUP LOG não é permitida enquanto o modelo de recuperação for SIMPLE ao tentar fazer backup de um banco de dados no SQL Server ou Azure SQL Edge, é porque você está tentando fazer backup dos logs de transações em um banco de dados que usa o modelo de recuperação simples.
Para corrigir isso, altere o modelo de recuperação para log completo ou em massa.
O erro
Aqui está um exemplo de código T-SQL que resulta no erro:
BACKUP LOG Music
TO DISK = '/var/opt/mssql/backups/Music.trn';
Resultado:
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.
A causa
Conforme mencionado, o erro é causado quando você tenta fazer backup dos logs de transações em um banco de dados que usa o modelo de recuperação simples.
O modelo de recuperação simples não oferece suporte a backups de log.
A solução
Para superar esse problema, defina o modelo de recuperação do banco de dados para
FULL
ou BULK_LOGGED
:USE master;
ALTER DATABASE Music
SET RECOVERY FULL;
Esse exemplo define o banco de dados para o modo de recuperação total.
No entanto, você também precisará executar pelo menos um backup completo do banco de dados antes de iniciar o backup dos logs de transações. Se você não fizer isso, receberá o erro 4214, que informa que BACKUP LOG não pode ser executado porque não há backup de banco de dados atual .
Aqui está um exemplo de como realizar um backup completo do banco de dados:
BACKUP DATABASE Music
TO DISK = '/var/opt/mssql/backups/Music.bak'
WITH FORMAT;
Agora os logs de transações podem ser copiados conforme necessário:
BACKUP LOG Music
TO DISK = '/var/opt/mssql/backups/Music.trn';
Resultado:
Processed 3 pages for database 'Music', file 'Music_log' on file 1.
Usando o Azure SQL Edge?
Se você usa o Azure SQL Edge, pode achar que esse problema acontece muito. Isso provavelmente ocorre porque os bancos de dados criados com o SQL Edge usam o modelo de recuperação simples por padrão. E isso porque o
model
banco de dados usa o modelo de recuperação simples. Você sempre pode alterar o modelo de recuperação no
model
banco de dados para FULL
, o que resultará em bancos de dados subsequentes usando o modo de recuperação completa por padrão.