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

Ali*_*ori 69 database sql-server asp.net asp.net-mvc

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

The transaction log for database 'db_name' is full due to 'LOG_BACKUP'
Run Code Online (Sandbox Code Playgroud)

我四处搜索,发现了很多相关的答案,比如这个这个或者这个问题,但问题是他们建议在数据库上运行查询.我试过跑步

db.Database.ExecuteSqlCommand("ALTER DATABASE db_name SET RECOVERY SIMPLE;");
Run Code Online (Sandbox Code Playgroud)

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

System.Data.SqlClient.SqlException: ALTER DATABASE statement not allowed within multi-statement transaction.
Run Code Online (Sandbox Code Playgroud)

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

Moh*_*ari 115

除了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 
Run Code Online (Sandbox Code Playgroud)

更新 Credit @ cema-sp

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

select * from sys.database_files;
Run Code Online (Sandbox Code Playgroud)

  • 附加:查找{database-file-name}:`select*from sys.database_files;` (7认同)
  • 我相信 {database-file-name} 将等同于日志行的 `name` 列,来自以下查询:`select * from sys.database_files` (5认同)
  • 我可以确认这可以治疗。应该是公认的答案。 (2认同)
  • 谢谢@Mohit Dharmadhikari;我尝试了很多其他的事情,包括分配更多的磁盘空间和增加日志文件的大小,但在我首先缩小现有的日志文件之前没有任何效果。 (2认同)
  • 这个答案有效,但有人警告我,它会干扰 RDS 增量(每 5 分钟)备份,后者有效地将事务日志按顺序应用到最后一次完整备份 - 因此,当您丢失日志时,您可能无法正确恢复你的数据库 (2认同)

Ben*_*hul 29

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


小智 12

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


Moh*_*MVP 5

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

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

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

我写了一篇文章,其中包含有关此错误的所有详细信息以及如何在数据库"SharePoint_Config"的事务日志中解决此错误,因为LOG_BACKUP已满

  • 发布错误消息作为您的答案根本不是很有帮助.StackOverflow也不赞成仅链接答案.您应该从链接中提取相关文本并在此处引用它.如果链接在将来死亡,这尤其重要,因为所有链接都不可避免地会发生. (5认同)

Roy*_*ham 5

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

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

选择属性

选择文件

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

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

在此处输入图片说明

更改为无限制后,数据库恢复生机。