SQL Server数据库日志文件过大如何进行收缩?

1,671 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

由于服务器磁盘空间有限,SQL Server 数据库服务器端产生的事务日志可能出现爆满的情况,导致客户端产生的数据无法写入服务器数据库,进而可能引发宕机事件,针对此情况应及时扩充磁盘空间或做好数据的备份迁移工作。

第一步:选中需要收缩的数据库,然后右键数据库属性,找到选项,将恢复模式改成简单;

12.png

第二步:右键数据库,“任务”->“收缩”->“文件

modb_20211126_fbbf90c0-4e4d-11ec-a62c-38f9d3cd240d.png

第三步:收缩数据库日志,选择文件类型“日志”,选择收缩操作“将文件收缩到” 最小(后有提示),点击“确定”;

modb_20211126_fbd179b6-4e4d-11ec-a62c-38f9d3cd240d.png

第四步:收缩完成后,重复第一步及第二步**更改数据库恢复模式,将模式从“简单”改为“完整”。******

注意:如若磁盘空间已满,无法将数据库事务日志文件进行收缩操作,可采取先分离出部分暂未使用的数据库,然后将分离出的MDF文件及LDF文件拷贝到其他磁盘空间充足的盘符,进行释放当前磁盘空间,待日志收缩成功释放空间后,再次将分离出的数据库文件进行附加操作即可。

---------------------------------------华丽的分隔符----------------------------------------- ---------------------------------------华丽的分隔符----------------------------------------- ---------------------------------------华丽的分隔符-----------------------------------------

除了上面的可视化操作外,直接通过TSQL脚本执行更为方便,代码如下:

USE[master]  
GO  
ALTER DATABASE '数据库名称(XXX)' SET RECOVERY SIMPLE WITH NO_WAIT  
GO  
ALTER DATABASE '数据库名称(XXX)' SET RECOVERY SIMPLE   --简单模式  
GO  
USE Win10DG  
GO  
DBCC SHRINKFILE (N'XXX_log' , 2, TRUNCATEONLY)  --设置压缩后的日志大小为2M,可以自行指定  
GO  
USE[master]  
GO  
ALTER DATABASE '数据库名称(XXX)' SET RECOVERY FULL WITH NO_WAIT  
GO  
ALTER DATABASE '数据库名称(XXX)' SET RECOVERY FULL  --还原为完全模式  
GO