Mam witrynę sieci Web Asp.Net MVC 5 z podejściem Codefirst EntityFramework we wspólnym planie hostingu. Używa panelu WebbsitePanel typu open source do panelu sterowania, a jego panel SQL Server jest nieco ograniczony. Dzisiaj, gdy chciałem edytować bazę danych, napotkałem ten błąd:
The transaction log for database 'db_name' is full due to 'LOG_BACKUP'
Szukałem wokół i znalazłem wiele odpowiedzi powiązanych, takich jak ten i ten lub ten , ale problemem jest to, że proponujemy uruchomienie kwerendy w bazie danych. Spróbowałem biec
db.Database.ExecuteSqlCommand("ALTER DATABASE db_name SET RECOVERY SIMPLE;");
ze studiem wizualnym (włączone HomeController
), ale pojawia się następujący błąd:
System.Data.SqlClient.SqlException: ALTER DATABASE statement not allowed within multi-statement transaction.
Jak mogę rozwiązać mój problem? Czy powinienem skontaktować się z zespołem wsparcia (który jest trochę kiepski dla mojego gospodarza), czy mogę rozwiązać ten problem samodzielnie?
asp.net
sql-server
asp.net-mvc
database
Alireza Noori
źródło
źródło
Odpowiedzi:
Zadzwoń do firmy hostingowej i poproś o skonfigurowanie regularnych kopii zapasowych dziennika lub ustaw prosty model odzyskiwania. Jestem pewien, że wiesz, co wpływa na wybór, ale i tak powiem. Ustaw model odzyskiwania na pełny, jeśli potrzebujesz możliwości przywrócenia do dowolnego punktu w czasie. Tak czy inaczej, baza danych jest źle skonfigurowana.
źródło
shrink
DB. Ponadto nie potrzebowałem odzyskiwania, więc powiedziałem im, aby ustawić go wSIMPLE
trybie.Oprócz odpowiedzi Bena możesz wypróbować poniższe zapytania zgodnie z potrzebami
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
Zaktualizuj Credit @ cema-sp
Aby znaleźć nazwy plików bazy danych użyj poniższego zapytania
select * from sys.database_files;
źródło
select * from sys.database_files;
name
kolumnie wiersza dziennika z tego zapytania:select * from sys.database_files
Czasami, gdy na dysku zabraknie miejsca, komunikat „Dziennik transakcji bazy danych XXXXXXXXXX jest pełny z powodu„ LOG_BACKUP ””, gdy instrukcja aktualizacji SQL nie powiedzie się. Sprawdź swoje miejsce na dysku :)
źródło
Ten błąd występuje, ponieważ dziennik transakcji jest pełny z powodu LOG_BACKUP. W związku z tym nie można wykonać żadnej akcji w tej bazie danych, aw takim przypadku Aparat baz danych programu SQL Server zgłosi błąd 9002.
Aby rozwiązać ten problem, wykonaj następujące czynności
Napisałem artykuł ze wszystkimi szczegółami dotyczącymi tego błędu i jak go rozwiązać w Dziennik transakcji dla bazy danych „SharePoint_Config” jest pełny z powodu LOG_BACKUP
źródło
Otrzymałem ten sam błąd, ale z pracy zaplecza (zadanie SSIS). Po sprawdzeniu ustawienia wzrostu pliku dziennika bazy danych, plik dziennika był ograniczony do 1 GB. Więc co się stało, gdy zadanie zostało uruchomione i poprosiło serwer SQL o przydzielenie większej ilości miejsca na dzienniki, ale limit wzrostu dziennika spadł, co spowodowało niepowodzenie zadania. Zmodyfikowałem wzrost dziennika i ustawiłem go na wzrost o 50 MB i nieograniczony wzrost, a błąd zniknął.
źródło
Może się to również zdarzyć, gdy plik dziennika ma ograniczony rozmiar.
Kliknij prawym przyciskiem myszy bazę danych w Object Explorer
Wybierz Właściwości
Wybierz pliki
W wierszu dziennika kliknij wielokropek w kolumnie Autogrowth / Maxsize
Zmień / sprawdź, czy maksymalny rozmiar pliku jest nieograniczony.
Po zmianie na nieograniczoną bazę danych wróciła do życia.
źródło