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 die SQL Server- Anzeige ist etwas eingeschränkt. Als ich heute die Datenbank bearbeiten wollte, ist dieser Fehler aufgetreten:
The transaction log for database 'db_name' is full due to 'LOG_BACKUP'
Ich suchte herum und fand eine Menge von verwandten Antworten wie diese und dies oder das , aber das Problem ist , dass sie eine Abfrage auf der Datenbank schlagen laufen. 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?
asp.net
sql-server
asp.net-mvc
database
Alireza Noori
quelle
quelle
Antworten:
Rufen Sie Ihr Hosting-Unternehmen an und lassen Sie es entweder regelmäßige Protokollsicherungen einrichten oder das Wiederherstellungsmodell auf einfach einstellen. Ich bin sicher, Sie wissen, was die Wahl beeinflusst, aber ich werde es trotzdem explizit sagen. Setzen Sie das Wiederherstellungsmodell auf "Voll", wenn Sie die Wiederherstellung zu einem beliebigen Zeitpunkt benötigen. In beiden Fällen ist die Datenbank unverändert falsch konfiguriert.
quelle
shrink
auf der DB ausgeführt. Außerdem brauchte ich die Wiederherstellung nicht, also sagte ich ihnen, sie sollten sie in denSIMPLE
Modus versetzen.Zusätzlich zu Bens Antwort können Sie die folgenden Abfragen nach Bedarf ausprobieren
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
Aktualisieren Sie Credit @ cema-sp
Verwenden Sie die folgende Abfrage, um Datenbankdateinamen zu finden
select * from sys.database_files;
quelle
select * from sys.database_files;
name
Spalte für die Zeile des Protokolls aus dieser Abfrage entsprechen:select * from sys.database_files
Gelegentlich, wenn auf einer Festplatte nicht genügend Speicherplatz vorhanden ist, wird die Meldung "Transaktionsprotokoll für Datenbank XXXXXXXXXX ist aufgrund von 'LOG_BACKUP' voll" zurückgegeben, wenn eine SQL-Aktualisierungsanweisung fehlschlägt. Überprüfen Sie Ihren Speicherplatz :)
quelle
Dieser Fehler tritt auf, weil das Transaktionsprotokoll aufgrund von LOG_BACKUP voll wird. Daher können Sie für diese Datenbank keine Aktion ausführen. In diesem Fall löst das SQL Server-Datenbankmodul einen 9002-Fehler aus.
Um dieses Problem zu lösen, sollten Sie Folgendes tun
Ich habe einen Artikel mit allen Details zu diesem Fehler und seiner Behebung unter geschrieben. Das Transaktionsprotokoll für die Datenbank 'SharePoint_Config' ist aufgrund von LOG_BACKUP voll
quelle
Ich habe den gleichen Fehler erhalten, aber von einem Backend-Job (SSIS-Job). Beim Überprüfen der Wachstumseinstellung für die Protokolldatei der Datenbank war das Wachstum der Protokolldatei auf 1 GB begrenzt. Was also geschah, war, als der Job ausgeführt wurde und SQL Server aufgefordert wurde, mehr Protokollspeicherplatz zuzuweisen, aber das Wachstumslimit des abgelehnten Protokolls führte dazu, dass der Job fehlschlug. Ich habe das Protokollwachstum geändert und es auf 50 MB und unbegrenztes Wachstum eingestellt, und der Fehler ist verschwunden.
quelle
Dies kann auch passieren, wenn die Größe der Protokolldatei eingeschränkt ist.
Klicken Sie im Objekt-Explorer mit der rechten Maustaste auf Datenbank
Wählen Sie Eigenschaften
Dateien auswählen
Klicken Sie in der Protokollzeile auf die Auslassungspunkte in der Spalte Autogrowth / Maxsize
Ändern / Überprüfen Die maximale Dateigröße ist unbegrenzt.
Nach dem Ändern auf unbegrenzt wurde die Datenbank wieder zum Leben erweckt.
quelle