SQL SERVER 日志文件过大导致磁盘空间不足产生错误:事务日志已满,起因为"LOG_BACKUP"。
转自:https://www.cnblogs.com/haibing0107/p/10836045.html
https://bbs.51cto.com/thread-1023360-1.html
根本的解决办法应该是根据日志增长速度分配好足够的磁盘空间,或者通过检查修改控制一下日志的增长速度。
比较紧急处理且对日志保留不进行要求的话,可以按如下操作直接主动缩小日志文件体积:
USE [master] GO ALTER DATABASE 要清理的数据库名称 SET RECOVERY SIMPLE WITH NO_WAIT GO ALTER DATABASE 要清理的数据库名称 SET RECOVERY SIMPLE --简单模式 GO USE 要清理的数据库名称 GO DBCC SHRINKFILE (N'要清理的数据库名称_log' , 2, TRUNCATEONLY) --设置压缩后的日志大小为2M,可以自行指定 GO USE [master] GO ALTER DATABASE 要清理的数据库名称 SET RECOVERY FULL WITH NO_WAIT GO ALTER DATABASE 要清理的数据库名称 SET RECOVERY FULL --还原为完全模式 GO
可以少修改脚本的版本:
-- 请将以下 dbxxx 改为数据库名称
DECLARE @DatabaseName NVARCHAR(255) = 'dbxxx';
USE [master]
-- 设置数据库为简单恢复模式
EXEC('ALTER DATABASE ' + @DatabaseName + ' SET RECOVERY SIMPLE WITH NO_WAIT');
EXEC('ALTER DATABASE ' + @DatabaseName + ' SET RECOVERY SIMPLE');
-- 获取目标数据库的日志文件名称
DECLARE @SQL NVARCHAR(MAX)
DECLARE @LogFileName NVARCHAR(255)
SET @SQL = N'
SELECT @LogFileName = name FROM sys.master_files
WHERE database_id = DB_ID(@DatabaseName)
AND type_desc = ''LOG''
';
-- 执行动态 SQL,并传递数据库名称变量,传出日志文件名称
EXEC sp_executesql @SQL, N'@DatabaseName NVARCHAR(255), @LogFileName NVARCHAR(255) OUTPUT', @DatabaseName, @LogFileName OUTPUT;
-- 检查是否找到了日志文件
IF @LogFileName IS NOT NULL
BEGIN
-- 执行日志收缩操作
EXEC('USE ' + @DatabaseName + '; DBCC SHRINKFILE (N''' + @LogFileName + ''', 2, TRUNCATEONLY);');
PRINT '日志文件收缩成功: ' + @LogFileName;
END
ELSE
BEGIN
PRINT '未找到日志文件,无法执行收缩操作';
END
USE [master]
GO
输了你,赢了世界又如何...
分类:
SQL SERVER
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)