web-dev-qa-db-fra.com

"Le journal des transactions de la base de données est saturé en raison de" LOG_BACKUP "" dans un hôte partagé

J'ai un site Web Asp.Net MVC 5 avec une approche codefirst EntityFramework dans un plan d'hébergement partagé. Il utilise l’open source WebbsitePanel pour le panneau de configuration et son panneau SQL Server est quelque peu limité. Aujourd'hui, lorsque j'ai voulu modifier la base de données, j'ai rencontré cette erreur:

The transaction log for database 'db_name' is full due to 'LOG_BACKUP'

J'ai cherché autour et trouvé beaucoup de réponses liées comme this et this ou this mais le problème est qu'ils suggèrent d'exécuter une requête sur la base de données. J'ai essayé de courir

db.Database.ExecuteSqlCommand("ALTER DATABASE db_name SET RECOVERY SIMPLE;");

avec le studio visuel (sur le HomeController) mais j'obtiens l'erreur suivante:

System.Data.SqlClient.SqlException: ALTER DATABASE statement not allowed within multi-statement transaction.

Comment puis-je résoudre mon problème? Dois-je contacter l'équipe de support (qui est un peu pauvre pour mon hôte) ou puis-je résoudre ce problème moi-même?

62
Alireza Noori

Appelez votre société d'hébergement et demandez-leur de configurer des sauvegardes régulières du journal ou de définir le modèle de récupération sur simple. Je suis sûr que vous savez ce qui informe le choix, mais je serai explicite quand même. Définissez le modèle de récupération sur complet si vous avez besoin de la possibilité de restaurer à un moment arbitraire. Dans les deux cas, la base de données est mal configurée telle quelle.

28
Ben Thul

En plus de la réponse de Ben, vous pouvez essayer les requêtes ci-dessous selon vos besoins

USE {database-name};  
GO  
-- Truncate the log by changing the database recovery model to SIMPLE.  
ALTER DATABASE {database-name}
SET RECOVERY SIMPLE;  
GO  
-- Shrink the truncated log file to 1 MB.  
DBCC SHRINKFILE ({database-file-name}, 1);  
GO  
-- Reset the database recovery model.  
ALTER DATABASE {database-name}
SET RECOVERY FULL;  
GO 

Mise à jour Crédit @ cema-sp

Pour trouver les noms de fichier de base de données, utilisez la requête ci-dessous.

select * from sys.database_files;
105

Parfois, lorsqu'un disque manque d'espace, le message "Le journal des transactions de la base de données XXXXXXXXXX est saturé à cause de" LOG_BACKUP "" est renvoyé lorsqu'une instruction SQL de mise à jour échoue. Vérifiez votre espace disque :)

10
Hein Gous

Cette erreur se produit car le journal des transactions est saturé à cause de LOG_BACKUP. Par conséquent, vous ne pouvez effectuer aucune action sur cette base de données et dans ce cas, le moteur de base de données SQL Server générera une erreur 9002.

Pour résoudre ce problème, vous devez procéder comme suit

  • Effectuez une sauvegarde complète de la base de données.
  • Réduisez le fichier journal pour réduire la taille du fichier physique.
  • Créez un LOG_BACKUP.
  • Créez un plan de maintenance LOG_BACKUP pour créer fréquemment des journaux de sauvegarde.

J’ai écrit un article avec tous les détails sur cette erreur et sur la façon de la résoudre à Le journal des transactions de la base de données ‘SharePoint_Config’ est saturé à cause de LOG_BACKUP

6

J'ai eu la même erreur mais d'un travail de backend (travail SSIS). Lors de la vérification du paramètre de croissance du fichier journal de la base de données, le fichier journal contenait une croissance limitée de 1 Go. Par conséquent, le travail a eu lieu lorsque le travail a été exécuté et qu'il a demandé au serveur SQL d'allouer plus d'espace au journal, mais la limite de croissance du journal refusé a entraîné l'échec du travail. J'ai modifié la croissance du journal et je l'ai configuré pour augmenter de 50 Mo et Croissance illimitée et l'erreur est partie.

1
Andy