SQL Server 事务日志已满,3种解决方案

我们安装数据库后,系统会默认把数据库文件和数据库日志文件最大设为500MB,当然你中途可以更改这个限制。当日志文件接近最大值时,继续使用数据库会提示:事务日志已满。解决这个问题,有3种方案:

第一种解决方案:在数据库上点击右键 → 选择 属性 → 选择 文件,然后增加数据库日志文件的文件大小。
增大日志文件的大小.png

.

第二种解决方案:手动收缩日志文件。在数据库上点击右键 → 选择 属性 → 选择 选项,把模式改为简单
修改数据库恢复模式为【简单模式】.png
然后收缩文件
收缩数据库日志文件大小1.png
收缩数据库日志文件大小2.png
收缩完了,要把模式改回完整,这样数据库才好继续记录日志
修改数据库恢复模式为【完整模式】.png

第三种解决方案:通过执行SQL语句来实现第二步手动操作的效果

-- 修改数据库恢复模式为【简单模式】
USE [master]
GO
ALTER DATABASE [目标数据库名称] SET RECOVERY SIMPLE WITH NO_WAIT
GO

USE [目标数据库名称]
GO
DBCC SHRINKFILE (N'数据库日志逻辑名称', 200)  --10指压缩后的大小
GO

-- 修改数据库恢复模式为【完整模式】
USE [master]
GO
ALTER DATABASE [目标数据库名称] SET RECOVERY FULL WITH NO_WAIT
GO

上面代码模板,有三个地方要改成你数据库的信息,分别是:目标数据库名称、数据库日志逻辑名称、10(这个指压缩后的日志文件大小),估计有人不知道哪里找数据库日志逻辑名称,如图:
查找数据库日志文件逻辑名称.png

再放一个实际的代码:把erp数据库的日志文件(逻辑名称叫Xgoss_log),收缩成50MB

USE [master]
ALTER DATABASE [erp] SET RECOVERY SIMPLE WITH NO_WAIT

USE [erp]
DBCC SHRINKFILE (N'Xgoss_log', 50)

USE [master]
ALTER DATABASE [erp] SET RECOVERY FULL WITH NO_WAIT