Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Correction :"L'instruction BACKUP LOG n'est pas autorisée lorsque le modèle de récupération est SIMPLE" dans SQL Server (et SQL Edge)

Si vous obtenez une erreur indiquant L'instruction BACKUP LOG n'est pas autorisée alors que le modèle de récupération est SIMPLE lorsque vous essayez de sauvegarder une base de données dans SQL Server ou Azure SQL Edge, c'est parce que vous essayez de sauvegarder les journaux de transactions sur une base de données qui utilise le modèle de récupération simple.

Pour résoudre ce problème, modifiez le modèle de récupération en journalisation complète ou en masse.

L'erreur

Voici un exemple de code T-SQL qui génère l'erreur :

BACKUP LOG Music 
TO DISK = '/var/opt/mssql/backups/Music.trn';

Résultat :

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.

La Cause

Comme mentionné, l'erreur se produit lorsque vous essayez de sauvegarder les journaux de transactions sur une base de données qui utilise le modèle de récupération simple.

Le modèle de récupération simple ne prend pas en charge les sauvegardes de journaux.

La solution

Pour résoudre ce problème, définissez le modèle de récupération de base de données sur FULL ou BULK_LOGGED :

USE master;  
ALTER DATABASE Music 
SET RECOVERY FULL;

Cet exemple définit la base de données en mode de récupération complète.

Cependant, vous devrez également effectuer au moins une sauvegarde complète de la base de données avant de commencer à sauvegarder vos journaux de transactions. Si vous ne le faites pas, vous obtiendrez l'erreur 4214, qui indique que BACKUP LOG ne peut pas être exécuté car il n'y a pas de sauvegarde de base de données actuelle .

Voici un exemple d'exécution d'une sauvegarde complète de la base de données :

BACKUP DATABASE Music 
    TO DISK = '/var/opt/mssql/backups/Music.bak' 
    WITH FORMAT;

Désormais, les journaux de transactions peuvent être sauvegardés selon les besoins :

BACKUP LOG Music 
TO DISK = '/var/opt/mssql/backups/Music.trn';

Résultat :

Processed 3 pages for database 'Music', file 'Music_log' on file 1.

Vous utilisez Azure SQL Edge ?

Si vous utilisez Azure SQL Edge, vous constaterez peut-être que ce problème se produit souvent. C'est probablement parce que les bases de données créées avec SQL Edge utilisent le modèle de récupération simple par défaut. Et c'est parce que le model base de données utilise le modèle de récupération simple.

Vous pouvez toujours changer le modèle de récupération sur le model base de données à FULL , ce qui fera que les bases de données suivantes utiliseront le mode de récupération complète par défaut.