Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Correção:“A instrução BACKUP LOG não é permitida enquanto o modelo de recuperação for SIMPLE” no SQL Server (e SQL Edge)


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.