我有一个Asp.Net MVC 5网站,在共享主机方案中使用EntityFramework codefirst方法。它使用开源WebbsitePanel作为控制面板,其SQL Server面板有限。今天,当我想编辑数据库时,我遇到了这个错误:
The transaction log for database 'db_name' is full due to 'LOG_BACKUP'
我搜索了很多相关的答案,例如this和this或this,但问题是他们建议在数据库上运行查询。我试过跑
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.
如何解决我的问题?我应该联系支持团队(对我的主人来说有点差)还是我可以自己解决这个问题?
答案 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错误。
要解决此问题,您应该执行以下操作
我写了一篇文章,其中包含有关此错误的所有详细信息以及如何在The transaction log for database ‘SharePoint_Config’ is full due to LOG_BACKUP
解决此问题答案 4 :(得分:3)
当日志文件的大小受到限制时,也会发生这种情况。
在对象资源管理器中右键单击数据库
选择属性
选择文件
在日志行上,单击“自动增长/最大大小”列中的省略号
更改/验证最大文件大小不受限制。
更改为无限制后,数据库恢复了活力。
答案 5 :(得分:1)
我从后端工作(SSIS工作)得到了同样的错误。在检查数据库的日志文件增长设置后,日志文件的增长限制为1GB。所以发生的事情是当作业运行并且它要求SQL服务器分配更多的日志空间,但是日志的增长限制下降导致作业失败。我修改了日志增长并将其设置为增长50MB和无限增长,错误消失了。