我有一个 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.
我该如何解决我的问题?我应该联系支持团队(这对我的房东来说有点糟糕)还是我可以自己解决这个问题?
除了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;
致电您的托管公司,让他们设置定期日志备份或将恢复模式设置为简单。我相信您知道选择的依据是什么,但无论如何我都会明确表示。如果您需要恢复到任意时间点的能力,请将恢复模式设置为完整。无论哪种方式,数据库都配置错误。
有时,当磁盘空间不足时,更新 SQL 语句失败时会返回“transaction log for database XXXXXXXXXX is full due to 'LOG_BACKUP'”消息。 检查您的磁盘空间:)
出现此错误是因为 LOG_BACKUP 导致事务日志已满。因此,您无法对此数据库执行任何操作,在这种情况下,SQL Server 数据库引擎将引发 9002 错误。
要解决此问题,您应该执行以下操作
我写了一篇文章,其中包含有关此错误的所有详细信息以及如何解决该错误,网址为 数据库“SharePoint_Config”的事务日志因 LOG_BACKUP 已满
我得到了同样的错误,但是来自后端作业(SSIS 作业)。检查数据库的日志文件增长设置后发现,日志文件的增长限制为 1GB。那么发生的情况是,当作业运行时,它要求 SQL Server 分配更多的日志空间,但日志的增长限制下降导致作业失败。我修改了日志增长并将其设置为增长 50MB 和无限增长,错误消失了。
救援方法:
运行查询:获取数据库文件名
从sys.database_files中选择*; 然后运行这个查询:
使用{数据库名称}; GO——通过将数据库恢复模式更改为“SIMPLE”来截断日志。 ALTER DATABASE {数据库名称}设置恢复简单; GO -- 将截断的日志文件缩小到 1 MB。 DBCC SHRINKFILE ({数据库文件名}, 1); GO -- 重置数据库恢复模型。
更改数据库 {数据库名称}
设置恢复完全;
去吧