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

我有阿斯匹灵。NetMVC5网站与 EntityFramework 代码优先方法在一个共享托管计划。它使用开源 网站面板作为控制面板,而它的 SQLServer 面板有一定的局限性。今天,当我想编辑数据库时,我遇到了这个错误:

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.

我怎样才能解决我的问题?我应该联系支持团队(这对我的主人来说有点可怜)或者我可以自己解决这个问题吗?

373128 次浏览

打电话给你的托管公司,让他们建立常规的日志备份或者将恢复模式设置为简单的。我相信你知道选择的依据是什么,但我还是要说清楚。如果需要能够恢复到任意时间点,则将恢复模式设置为完全。不管是哪种情况,数据库的配置都是错误的。

发生此错误是因为由于 LOG _ BACKUP 事务日志已满。因此,不能对此数据库执行任何操作,在这种情况下,SQLServer 数据库引擎将引发9002错误。

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

  • 进行完整的数据库备份。
  • 缩小日志文件以减小物理文件大小。
  • 创建一个 LOG _ BACKUP。
  • 创建一个 LOG _ BACKUP 维护计划,以便经常备份日志。

我写了一篇关于这个错误的所有细节以及如何在 由于 LOG _ BACKUP,数据库“ SharePoint _ Config”的事务日志已满上解决它的文章

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

除了本的答案,您可以尝试以下查询根据您的需要

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

更新 Credit < strong >@cema-sp

要查找数据库文件名,请使用以下查询

select * from sys.database_files;

有时,当磁盘空间不足时,当更新 SQL 语句失败时,将返回消息“由于‘ LOG _ BACKUP’,数据库 XXXXXXXXXX 的事务日志已满”。 检查您的磁盘空间:)

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

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

选择属性

选择文件

在日志行上,单击 Autogrowth/Maxsize 列中的省略号

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

enter image description here

数据库改为无限后,又恢复了生机。