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

时间:2014-01-20 07:50:53

标签: asp.net sql-server asp.net-mvc database

我有一个Asp.Net MVC 5网站,在共享主机方案中使用EntityFramework codefirst方法。它使用开源WebbsitePanel作为控制面板,其SQL Server面板有限。今天,当我想编辑数据库时,我遇到了这个错误:

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

我搜索了很多相关的答案,例如thisthisthis,但问题是他们建议在数据库上运行查询。我试过跑

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

使用visual studio(在HomeController上)但我收到以下错误:

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

如何解决我的问题?我应该联系支持团队(对我的主人来说有点差)还是我可以自己解决这个问题?

6 个答案:

答案 0 :(得分:98)

除了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;

答案 1 :(得分:27)

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

答案 2 :(得分:10)

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

答案 3 :(得分:6)

发生此错误是因为LOG_BACKUP导致事务日志变满。因此,您无法对此数据库执行任何操作,在这种情况下,SQL Server数据库引擎将引发9002错误。

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

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

我写了一篇文章,其中包含有关此错误的所有详细信息以及如何在The transaction log for database ‘SharePoint_Config’ is full due to LOG_BACKUP

解决此问题

答案 4 :(得分:3)

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

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

选择属性

选择文件

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

更改/验证最大文件大小不受限制。

enter image description here

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

答案 5 :(得分:1)

我从后端工作(SSIS工作)得到了同样的错误。在检查数据库的日志文件增长设置后,日志文件的增长限制为1GB。所以发生的事情是当作业运行并且它要求SQL服务器分配更多的日志空间,但是日志的增长限制下降导致作业失败。我修改了日志增长并将其设置为增长50MB和无限增长,错误消失了。