SQL Server日志文件无法收缩的解决方法

 更新时间:2025年11月12日 10:04:34   作者:伯恩bourne  
正常情况下,不要轻易的收缩日志文件,但是日积月累,日志文件太大,造成硬盘空间不足,不得已去收缩时,却发现收缩不了,那是因为在还原的完整模式下活动事务一直使用日志,所以无法收缩,因此本文给大家介绍了SQL Server日志文件无法收缩的解决方法,需要的朋友可以参考下

前言

正常情况下,不要轻易的收缩日志文件,但是日积月累,日志文件太大,造成硬盘空间不足,不得已去收缩时,却发现收缩不了,那是因为在还原的完整模式下活动事务一直使用日志,所以无法收缩。
可以通过以下步骤:

第一步,查询日志信息(可省略)

SELECT 
    name AS 日志文件逻辑名,  --这个就是逻辑名,有的时候逻辑名和我们看到的文件名不一样
    physical_name AS 物理路径,
    size * 8.0 / 1024 AS 当前大小MB
FROM sys.database_files 
WHERE type_desc = 'LOG';

第二步,强制提交事务,并将 恢复模式 改为简单模式

-- 查看数据库中活跃的事务信息,用于检查是否有未提交的事务(可能阻止日志收缩)
-- 语法:DBCC OPENTRAN (数据库名称),会显示最早的活动事务、未分发的事务等信息
DBCC OPENTRAN (databaseName);  


-- 执行检查点操作,强制将内存中已提交的事务日志从缓存写入磁盘
-- 作用:减少日志文件中的活跃内容,为后续收缩做准备(确保已提交数据持久化)
CHECKPOINT;


-- 将数据库恢复模式临时改为简单恢复模式(SIMPLE)
-- 简单模式下,事务日志会自动截断(在检查点后清除不再需要的日志记录),便于收缩日志文件
-- WITH NO_WAIT:表示如果无法立即执行(如存在锁定),不等待直接返回错误(避免长时间阻塞)
ALTER DATABASE databaseName SET RECOVERY SIMPLE WITH NO_WAIT;

第三步,开始收缩

-- 收缩指定的数据库日志文件
-- 语法:DBCC SHRINKFILE (日志文件逻辑名, 目标大小, 收缩方式)
DBCC SHRINKFILE (
    N'database_log',  -- 日志文件的逻辑名称(需与数据库中定义的一致,可通过sys.database_files查询)
    200,              -- 收缩后的目标大小(单位:MB)
    TRUNCATEONLY      -- 仅截断未使用的日志空间(不移动数据页,效率高,仅适用于日志文件)
);


-- 收缩整个数据库的数据文件和日志文件(通常在收缩日志后补充,进一步释放空间)
-- 语法:DBCC SHRINKDATABASE (数据库名称),会尝试收缩所有文件至最小可能大小(受数据分布影响)
DBCC SHRINKDATABASE(N'数据库名称');  
GO  -- 批处理分隔符,分隔前后语句的执行批次

第四步,恢复数据库的 完整恢复模式

-- 将数据库恢复模式改回完整恢复模式(FULL)
-- 完整模式下,日志会记录所有事务细节,支持时间点恢复(生产环境通常需要此模式)
-- WITH NO_WAIT:同上,不等待直接执行或返回错误
ALTER DATABASE databaseName SET RECOVERY FULL WITH NO_WAIT;

SQL server数据库日志文件收缩方法

1、首先打开数据库,选择需要收缩日志文件的数据库右键选择属性点击选项将恢复模式完整改为简单点击确定。

2、右击数据库选择收缩文件

3、选择收缩日志,更改想要收缩到的大小点击确定

4、收缩完成后将恢复模式改回完整

此时数据库日志文件将收缩到规定大小

收缩命令:

-- 将数据库恢复模式更改为简单

ALTER DATABASE [ZiDanDataBase]  
SET RECOVERY SIMPLE;  
GO 
-- 收缩日志到1G
DBCC SHRINKFILE (N'ZhiDan_log', 1024);
GO
-- 将数据库恢复模式更改为完整
ALTER DATABASE [ZiDanDataBase]  
SET RECOVERY FULL;  
GO

以上就是SQL Server日志文件无法收缩的解决方法的详细内容,更多关于SQL Server日志文件无法收缩的资料请关注脚本之家其它相关文章!

相关文章

  • SQLserver2016镜像备份不需要见证服务器(实战亲测)

    SQLserver2016镜像备份不需要见证服务器(实战亲测)

    本文介绍了SQL2016镜像备份的功能和优势,包括数据保护、恢复和容灾等方面的应用,具有一定的参考价值,感兴趣的可以了解一下
    2023-10-10
  • SQL Server主键约束(PRIMARY KEY)

    SQL Server主键约束(PRIMARY KEY)

    这篇文章主要介绍了SQL Server主键约束(PRIMARY KEY),主键是唯一标识表中每一行的一列或一组列,文章围绕主题展开详情,需要的朋友可以参考一下
    2022-09-09
  • SQL server高级应用 收藏版

    SQL server高级应用 收藏版

    SQL server高级应用 收藏版,使用sqlserver的朋友可以参考下
    2012-08-08
  • SQL SERVER 与ACCESS、EXCEL的数据转换

    SQL SERVER 与ACCESS、EXCEL的数据转换

    SQL SERVER 与ACCESS、EXCEL的数据转换...
    2006-07-07
  • SQLSERVER 临时表和表变量的区别汇总

    SQLSERVER 临时表和表变量的区别汇总

    不管临时表还是表变量都带了表这个词,既然提到表 ,按推理自然会落到某数据库中,如果真在一个数据库中,那自然就有它的存储文件 .mdf和.ldf,那是不是如我推理的那样呢,这篇文章主要介绍了SQLSERVER 临时表和表变量到底有什么区别,需要的朋友可以参考下
    2023-02-02
  • 查看本地sql server数据库的ip地址的方法指南

    查看本地sql server数据库的ip地址的方法指南

    程序连线SQL数据库,需要SQL Server实例的名称或网络地址,故本文给大家介绍了查看本地sql server数据库的ip地址的方法指南,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2024-06-06
  • SQL Server数据库的死锁详细说明

    SQL Server数据库的死锁详细说明

    死锁是指在一组进程中的各个进程均占有不会释放的资源,但因互相申请被其他进程所站用不会释放的资源而处于的一种永久等待,下面这篇文章主要给大家介绍了关于SQL Server死锁的相关资料,需要的朋友可以参考下
    2024-07-07
  • SQL 多条件查询几种实现方法详细介绍

    SQL 多条件查询几种实现方法详细介绍

    这篇文章主要介绍了SQL 多条件查询两种实现方法详细介绍的相关资料,一种是排列结合,另一种是动态拼接SQL,需要的朋友可以参考下
    2016-12-12
  • SQL实现模糊查询的四种方法小结

    SQL实现模糊查询的四种方法小结

    在SQL中,模糊查询是一种通过匹配字符串中的一部分或关键字来查询数据的方法,本文主要介绍了SQL实现模糊查询的四种方法小结,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • SqlServer生成连续数字根据指定的数字操作

    SqlServer生成连续数字根据指定的数字操作

    这篇文章主要介绍了SqlServer生成连续数字根据指定的数字操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-10-10

最新评论