У меня есть веб-сайт Asp.Net MVC 5 с подходом EntityFramework codefirst в плане общего хостинга. Он использует панель веб-сайта с открытым исходным кодом для панели управления, а его панель SQL Server несколько ограничена. Сегодня, когда я хотел отредактировать базу данных, я столкнулся с такой ошибкой:
The transaction log for database 'db_name' is full due to 'LOG_BACKUP'
Я поискал и нашел много связанных ответов, таких как это и то или это, но проблема в том, что они предлагают запустить запрос в базе данных. Я пробовал бежать
db.Database.ExecuteSqlCommand("ALTER DATABASE db_name SET RECOVERY SIMPLE;");
с визуальной студией (на HomeController
), но я получаю следующую ошибку:
System.Data.SqlClient.SqlException: ALTER DATABASE statement not allowed within multi-statement transaction.
Как я могу решить свою проблему? Стоит ли мне связываться со службой поддержки (что немного плохо для моего хозяина) или я могу решить эту проблему самостоятельно?
asp.net
sql-server
asp.net-mvc
database
Алиреза Нури
источник
источник
Ответы:
Позвоните в свою хостинговую компанию и попросите их настроить регулярное резервное копирование журналов или установите простую модель восстановления. Я уверен, что вы знаете, что определяет выбор, но я все равно буду откровенен. Установите модель восстановления на полную, если вам нужна возможность восстановления на произвольный момент времени. В любом случае база данных неверно сконфигурирована как есть.
источник
shrink
БД. Кроме того, мне не требовалось восстановление, поэтому я сказал им перевести его вSIMPLE
режим.В дополнение к ответу Бена вы можете попробовать запросы ниже в соответствии с вашими потребностями
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;
источник
select * from sys.database_files;
name
столбцу для строки журнала из этого запроса:select * from sys.database_files
Иногда, когда на диске заканчивается место, сообщение «журнал транзакций для базы данных XXXXXXXXXX заполнен из-за 'LOG_BACKUP'» будет возвращено, когда SQL-запрос обновления завершится неудачно. Проверьте свое дисковое пространство :)
источник
Эта ошибка возникает из-за того, что журнал транзакций заполняется из-за LOG_BACKUP. Следовательно, вы не можете выполнять какие-либо действия с этой базой данных, и в этом случае ядро СУБД SQL Server выдаст ошибку 9002.
Чтобы решить эту проблему, вам необходимо сделать следующее
Я написал статью со всеми подробностями об этой ошибке и о том, как ее решить. Журнал транзакций для базы данных SharePoint_Config заполнен из-за LOG_BACKUP
источник
У меня такая же ошибка, но из-за серверного задания (задания SSIS). После проверки параметра увеличения файла журнала базы данных, размер файла журнала был ограничен 1 ГБ. Итак, что произошло, когда задание было запущено, и оно попросило SQL-сервер выделить больше места для журнала, но снижение предела роста журнала привело к сбою задания. Я изменил рост журнала и установил его на 50 МБ и неограниченный рост, и ошибка исчезла.
источник
Это также может произойти, если размер файла журнала ограничен.
Щелкните правой кнопкой мыши базу данных в обозревателе объектов
Выбрать свойства
Выбрать файлы
В строке журнала щелкните многоточие в столбце Autogrowth / Maxsize.
Изменить / проверить, что максимальный размер файла не ограничен.
После перехода на безлимит, база данных ожила.
источник