"Журнал транзакций для базы данных заполнен из-за" 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.
Как я могу решить свою проблему? Должен ли я связаться с командой поддержки (которая немного бедна для моего хоста) или я могу решить это самостоятельно?
Ответы
Ответ 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