Подтвердить что ты не робот

"Журнал транзакций для базы данных заполнен из-за" LOG_BACKUP "на общем хосте

У меня есть веб-сайт Asp.Net MVC 5 с использованием подхода EntityFramework codefirst в общем плане хостинга. Он использует открытый WebbsitePanel для панели управления, а его панель SQL Server несколько ограничена. Сегодня, когда я хотел редактировать базу данных, я столкнулся с этой ошибкой:

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

Я искал вокруг и нашел много связанных ответов, таких как this и this или это, но проблема в том, что они предлагают запустить запрос в базе данных. Я попытался запустить

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

с визуальной студией (на HomeController), но я получаю следующую ошибку:

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

Как я могу решить свою проблему? Должен ли я связаться с командой поддержки (которая немного бедна для моего хоста) или я могу решить это самостоятельно?

4b9b3361

Ответ 1

Позвоните в вашу хостинговую компанию и попросите их настроить регулярные резервные копии журналов или просто установите модель восстановления. Я уверен, что вы знаете, что сообщает выбор, но я все равно буду явным. Установите модель восстановления полностью, если вам нужна возможность восстановления в произвольный момент времени. В любом случае база данных неправильно сконфигурирована, как есть.

Ответ 2

В дополнение к ответу "Бен" вы можете попробовать "Ниже запросов" в соответствии с вашими потребностями

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 

Обновить Кредит @cema-sp

Чтобы найти имена файлов базы данных, используйте ниже запрос

select * from sys.database_files;

Ответ 3

Эта ошибка возникает из-за того, что журнал транзакций заполняется из-за LOG_BACKUP. Поэтому вы не можете выполнять какие-либо действия в этой базе данных, и в этом случае SQL Server Database Engine вызовет ошибку 9002.

Чтобы решить эту проблему, вы должны сделать следующее

  • Сделайте резервную копию полной базы данных.
  • Сократите файл журнала, чтобы уменьшить размер физического файла.
  • Создайте LOG_BACKUP.
  • Создайте план обслуживания LOG_BACKUP для частого резервирования журналов.

Я написал статью со всеми подробностями относительно этой ошибки и как ее решить в Журнал транзакций для базы данных SharePoint_Config заполнен из-за LOG_BACKUP

Ответ 4

Иногда, когда на диске заканчивается свободное место, сообщение об ошибке "Журнал транзакций для базы данных XXXXXXXXXX заполняется из-за" LOG_BACKUP ", будет возвращено, когда сбой SQL-запроса обновления. Проверьте дисковое пространство:)

Ответ 5

Я получил ту же ошибку, но из работы с базой (работа SSIS). После проверки настройки роста файла журнала базы данных файл журнала был ограничен ростом 1 ГБ. Итак, что произошло, когда работа запустилась, и попросил SQL-сервер выделить больше пространства журналов, но предел роста журнала снизился, что привело к провалу задания. Я изменил рост журнала и установил его рост на 50 МБ и Неограниченный рост, и ошибка исчезла.

Ответ 6

Эта ошибка, с которой я столкнулся в клиентской системе, где у нас был пространственный хруст на самом сервере. В связи с этим мы не смогли сжать журнал или выполнить полную резервную копию.

Ниже приведено обходное решение: #copied из решения Mohit, приведенного выше для этого конкретного сценария.

ИСПОЛЬЗОВАТЬ DBNAME,
GO

ALTER DATABASE DBNAME УСТАНОВИТЬ ВОССТАНОВЛЕНИЕ ПРОСТОЙ | GO

DBCC SHRINKFILE ('DBNAME', 10),
GO

ALTER DATABASE DBNAME SET RECOVERY FULL,
GO