共享主机中的“由于'LOG_BACKUP',数据库的事务日志已满”


89

我在共享托管计划中有一个使用EntityFramework codefirst方法的Asp.Net MVC 5网站。它使用开源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 2014年

@usr我该怎么做?
Alireza Noori 2014年

它是数据库问题,可以缩小数据库。要求DBA对此提供帮助。
Shashank Chaturvedi 2014年

您必须以某种方式打开了交易。我不知道,也许EF会自动这样做。您需要对EF和交易进行一些研究。或者,从SSMS执行此操作。或者,使用原始ADO.NET。您的托管服务商可能仍然不允许该语句,因此他们需要更频繁地发布日志备份。
usr

Answers:


38

致电您的托管公司,让他们设置常规日志备份或将恢复模型设置为简单。我敢肯定,您知道是什么决定了您的选择,但是无论如何,我都会明确表示。如果需要恢复到任意时间点的能力,请将恢复模型设置为完全。不管哪种方式,数据库都是按原样错误配置的。


谢谢。我想自己做,但也与他们联系,他们设置了恢复并shrink在数据库上运行了恢复。另外,我不需要恢复,所以我告诉他们将其设置为SIMPLEmode。
Alireza Noori 2014年

1
这个MSDN页面解释了如何将恢复模型设置为simple!
shekhar

143

除Ben的答案外,您还可以根据需要尝试“以下查询”

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
我可以确认这可以治疗。应该是公认的答案。
加勒滕迪

2
谢谢@Mohit Dharmadhikari; 我尝试了许多其他事情,包括分配更多的磁盘空间,增加日志文件的大小,但是直到我先缩小现有的日志文件之前,什么都没起作用。
约翰尼

1
谢谢,非常有帮助。
Obakeng Molebatsi

2
我相信{database-file-name}等name于此查询中日志行的列:select * from sys.database_files
Bob Horn

13

有时,当磁盘空间不足时,如果更新SQL语句失败,则会返回消息“由于'LOG_BACKUP'而导致数据库XXXXXXXXXX的事务日志已满”。检查您的磁盘空间:)


5

发生此错误的原因是由于LOG_BACKUP,事务日志已满。因此,您不能对此数据库执行任何操作,并且在这种情况下,SQL Server数据库引擎将引发9002错误。

要解决此问题,您应该执行以下操作

  • 进行完整数据库备份。
  • 缩小日志文件以减小物理文件的大小。
  • 创建一个LOG_BACKUP。
  • 创建LOG_BACKUP维护计划以频繁获取备份日志。

我写了一篇文章,详细介绍了有关此错误以及如何解决此错误的所有详细信息,由于LOG_BACKUP,数据库'SharePoint_Config'的事务日志已满


8
将错误消息发布为答案根本不是很有帮助。仅链接的答案在StackOverflow上也被忽略。您应该从链接中提取相关文本并在此处引用。对于将来所有链接不可避免地消失的情况,这一点尤其重要。
丹·贝查德

1

我从后端作业(SSIS作业)得到了相同的错误。检查数据库的日志文件增长设置后,日志文件的限制增长为1GB。因此,当作业运行并要求SQL Server分配更多日志空间时发生了什么,但是日志的增长限制下降导致作业失败。我修改了日志增长并将其设置为增长50MB和无限增长,该错误消失了。


1

当日志文件的大小受到限制时,也会发生这种情况。

在对象资源管理器中右键单击数据库

选择属性

选择文件

在日志行上,单击“自动增长/最大大小”列中的省略号

更改/验证最大文件大小是无限的。

在此处输入图片说明

改变为无限后,数据库恢复了活力。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.