"Журнал транзакцій для бази даних заповнений через" LOG_BACKUP "" у спільному хості


89

У мене є веб-сайт Asp.Net MVC 5 з першим підходом EntityFramework у плані спільного хостингу. Він використовує відкритий вихідний код WebbsitePanel для панелі керування, а панель 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.

Як я можу вирішити свою проблему? Чи слід мені звертатися до команди підтримки (яка для мого господаря трохи погана) або я можу це вирішити сам?


Виконайте ALTER без транзакції.
usr

@usr Як би я це зробив?
Аліреза Нурі

Це проблема з базою даних, зменшення бази даних може спрацювати. Попросіть DBA допомогти вам у цьому.
Шашанк Чатурведі

Ви, мабуть, якось відкрили транзакцію. Не знаю, можливо EF робить це автоматично. Вам потрібно буде провести деякі дослідження EF та транзакцій. Або виконайте це з SSMS. Або використовуйте необроблений ADO.NET. Можливо, ваш хостер все одно не дозволить цю заяву, і їм потрібно частіше видавати резервні копії журналів.
usr

Відповіді:


38

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


Дякую. Я хотів зробити це сам, але також зв’язався з ними, і вони налаштували відновлення та запустили shrinkна БД. Крім того, мені не потрібно було відновлення, тому я сказав їм встановити його в SIMPLEрежим.
Alireza Noori

1
Ця сторінка MSDN пояснює, як встановити просту модель відновлення!
shekhar

143

Окрім відповіді Бена, ви можете спробувати Нижче запитів відповідно до ваших потреб

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;

8
Додатково: знайти {database-file-name}:select * from sys.database_files;
cema-sp

2
Я можу підтвердити, що це працює. Має бути прийнятою відповіддю.
garrettendi

2
Дякую @Mohit Dharmadhikari; Я спробував багато інших речей, включаючи виділення більше місця на диску та збільшення розміру файлу журналу, але нічого не працювало, поки я не зменшив існуючий файл журналу спочатку.
Джонні

1
Дякую, дуже корисно.
Обакенг Молебаці

2
Я вважаю, що {database-file-name} буде прирівнюватися до nameстовпця для рядка журналу з цього запиту:select * from sys.database_files
Боб Хорн

13

Іноді, коли на диску не вистачає місця, повідомлення "Журнал транзакцій для бази даних XXXXXXXXXX заповнений через" LOG_BACKUP "" буде повертатися, коли не вдається оновити оператор SQL. Перевірте свій дисковий простір :)


5

Ця помилка виникає, оскільки журнал транзакцій заповнюється через LOG_BACKUP. Отже, ви не можете виконати жодної дії з цією базою даних, і в цьому випадку механізм бази даних SQL Server викличе помилку 9002.

Для вирішення цієї проблеми слід зробити наступне

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

Я написав статтю з усіма подробицями щодо цієї помилки та способу її усунення на сторінці Журнал транзакцій для бази даних 'SharePoint_Config' заповнений через LOG_BACKUP


8
Розміщення повідомлення про помилку як вашої відповіді взагалі не дуже корисне. Відповіді лише за посиланнями також не бачать на StackOverflow. Вам слід витягти відповідний текст із посилання та процитувати його тут. Це особливо важливо на випадок, якщо посилання в майбутньому загине, як усі посилання неминуче вмирають.
Ден Бешард

1

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


1

Це також може статися, коли розмір файлу журналу обмежений.

Клацніть правою кнопкою миші на базі даних в Object Explorer

Виберіть Властивості

Виберіть Файли

У рядку журналу клацніть еліпсис у стовпці Авторост / Збільшення

Змінити / перевірити Максимальний розмір файлу необмежений.

введіть тут опис зображення

Після зміни на необмежений, база даних ожила.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.