it-swarm.com.de

"Das Transaktionsprotokoll für die Datenbank ist aufgrund von 'LOG_BACKUP' voll" in einem gemeinsam genutzten Host

Ich habe eine Asp.Net MVC 5-Website mit EntityFramework-Codefirst-Ansatz in einem gemeinsamen Hosting-Plan. Es verwendet das Open Source WebbsitePanel für die Systemsteuerung und das SQL Server-Bedienfeld ist etwas eingeschränkt. Als ich heute die Datenbank bearbeiten wollte, trat folgender Fehler auf:

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

Ich habe mich umgesehen und viele verwandte Antworten wie this und this oder this gefunden, aber das Problem ist, dass sie vorschlagen, eine Abfrage in der Datenbank auszuführen. Ich habe versucht zu rennen

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

mit dem visual studio (auf dem HomeController) bekomme ich aber folgenden fehler:

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

Wie kann ich mein Problem lösen? Soll ich mich an das Support-Team wenden (was für meinen Gastgeber etwas schlecht ist) oder kann ich das selbst lösen?

62
Alireza Noori

Rufen Sie Ihr Hosting-Unternehmen an und lassen Sie es entweder regelmäßige Protokollsicherungen einrichten oder setzen Sie das Wiederherstellungsmodell auf einfach. Ich bin mir sicher, dass Sie wissen, worauf es ankommt, aber ich werde es trotzdem ausdrücklich sagen. Setzen Sie das Wiederherstellungsmodell auf "Voll", wenn Sie die Möglichkeit benötigen, die Wiederherstellung zu einem beliebigen Zeitpunkt durchzuführen. In beiden Fällen ist die Datenbank falsch konfiguriert.

28
Ben Thul

Zusätzlich zu Bens Antwort können Sie die folgenden Abfragen nach Bedarf ausführen

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 

pdate Gutschrift @ cema-sp

Verwenden Sie die folgende Abfrage, um die Namen der Datenbankdateien zu finden

select * from sys.database_files;
105

Gelegentlich wird die Meldung "Transaktionsprotokoll für Datenbank XXXXXXXXXX ist aufgrund von 'LOG_BACKUP' voll" zurückgegeben, wenn eine SQL-Update-Anweisung fehlschlägt. Überprüfen Sie Ihren Speicherplatz :)

10
Hein Gous

Dieser Fehler tritt auf, weil das Transaktionsprotokoll aufgrund von LOG_BACKUP voll wird. Daher können Sie für diese Datenbank keine Aktionen ausführen. In diesem Fall gibt das SQL Server-Datenbankmodul einen 9002-Fehler aus.

Um dieses Problem zu lösen, sollten Sie Folgendes tun

  • Führen Sie eine vollständige Datenbanksicherung durch.
  • Verkleinern Sie die Protokolldatei, um die physische Dateigröße zu verringern.
  • Erstellen Sie ein LOG_BACKUP.
  • Erstellen Sie einen LOG_BACKUP-Wartungsplan, um häufig Sicherungsprotokolle zu erstellen.

Ich habe unter einen Artikel mit allen Details zu diesem Fehler geschrieben. Das Transaktionsprotokoll für die Datenbank "SharePoint_Config" ist aufgrund von LOG_BACKUP voll.

Ich habe den gleichen Fehler erhalten, aber von einem Back-End-Job (SSIS-Job). Bei Überprüfung der Einstellung für das Wachstum der Protokolldatei in der Datenbank wurde ein begrenztes Wachstum der Protokolldatei von 1 GB festgestellt. Es geschah also, als der Job ausgeführt wurde und SQL Server aufgefordert wurde, mehr Protokollspeicherplatz zuzuweisen. Die gesenkte Wachstumsgrenze des Protokolls führte jedoch dazu, dass der Job fehlschlug. Ich habe das Log-Wachstum geändert und auf 50 MB und Unlimited Growth eingestellt, und der Fehler ist behoben.

1
Andy