在日常运维中,有时会遇到“The transaction log for database 'xxxx' is full due to 'ACTIVE_TRANSACTION'.”这样的报错信息。

此错误消息表明:数据库的事务日志文件空间耗尽,log 文件不能再存储新的transaction log。

这个时候我们需要进行日志收缩。本文将介绍日志收缩的两种方法。

通过图形界面进行日志收缩

第一步:右键数据库属性

第二步:更改数据库恢复模式,将模式改为Simple。

第三步:右键数据库,Tasks→Shrink→Files 。

第四步:收缩数据库日志,选择文件类型Log,并在Shrink action 中将文件收缩到给出的Minimum 值,这里的数据库因为是新建的没有数据,所以提供的Minimum 值为0MB,可以将红框3中的数字修改为0。



File type:选择所要收缩的是“数据库文件”还是“日志文件”。

Currebtly allocated space:数据库为该文件分配的大小,就是在磁盘上看到的文件大小。

Available free space:就是“当前分配的空间” 减去“实际使用的空间”。

Shrink action:

① Release unused space:将该文件中未使用的空间释放出来,数据在文件中不移动;

② Reorganize pages before releasing unused space:此选项可以将文件收缩到“指定大小”,并将数据重新组织。其最小值为数据库“实际使用的空间”;

③ Empty file by migrating the data to other files in the same filegroup:该选项很少用。

上述操作也可以使用T-SQL替代:

DBCC ShrinkFile(‘数据库名’,  targetsize);		/* 收缩数据库文件 */
DBCC ShrinkFile(‘数据库名_log’, targetsize); /* 收缩日志文件 */

Targetsize:单位为兆,必须为整数,DBCC SHRINKFILE 尝试将文件收缩到指定大小。

DBCC SHRINKFILE 不会将文件收缩到小于“实际使用的空间”大小,例如“分配空间”为10M,“实际使用空间”为6M,当制定targetsize为1时,则将该文件收缩到6M,不会将文件收缩到1M。

用本例中的数据库替换后如下:

DBCC ShrinkFile(‘TEST01’,  1);			/* 收缩数据库文件 */
DBCC ShrinkFile(‘TEST01_log’, 1); /* 收缩日志文件 */

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

分离数据库操作如下:

右击数据库,Task→Detach



点击OK



此时发现数据库列表中已经没有TEST01,说明数据库分离成功了。



附加数据库操作如下:

右击Databases,单击Attach



点击Add,添加数据库文件



选择需要添加的文件后点击OK



检查添加的文件无误后,点击OK



此时在数据库列表中可看到刚附件上去的数据库TEST01



若未显示TEST01,请刷新数据库列表

通过 Transact-Sql 进行日志收缩

执行如下命令:

USE [数据库名]
GO
ALTER DATABASE [数据库名] SET RECOVERY SIMPLE WITH NO_WAIT
GO
--设为简单模式
ALTER DATABASE [数据库名] SET RECOVERY SIMPLE
GO
USE [数据库名]
GO
DBCC SHRINKFILE (N'[log文件名]', [ targetsize], TRUNCATEONLY)
GO
USE [数据库名]
GO
ALTER DATABASE [数据库名] SET RECOVERY FULL WITH NO_WAIT
GO
--还原为完全模式
ALTER DATABASE [数据库名] SET RECOVERY FULL
GO

[数据库名]替换为具体数据库, [ targetsize]替换为收缩目标值。

替换为本例中的数据库修改如下:

USE TEST01
GO
ALTER DATABASE TEST01 SET RECOVERY SIMPLE WITH NO_WAIT
GO
--设为简单模式
ALTER DATABASE TEST01 SET RECOVERY SIMPLE
GO
USE TEST01
GO
DBCC SHRINKFILE (N'TEST01_log', 1, TRUNCATEONLY)
GO
USE TEST01
GO
ALTER DATABASE TEST01 SET RECOVERY FULL WITH NO_WAIT
GO
--还原为完全模式
ALTER DATABASE TEST01 SET RECOVERY FULL
GO

SQL Server 日志收缩方法的更多相关文章

  1. SQL Server日志清空方法

    1.清空日志:DUMP   TRANSACTION   databasename   WITH   NO_LOG 2.截断事务日志:BACKUP   LOG   databasename   WITH ...

  2. SQL Server 日志收缩

  3. SQL Server日志文件庞大收缩方法(实测好用)

    原文:SQL Server日志文件庞大收缩方法(实测好用) 这两个命令连续执行,间隔时间越少越明显(可多次运行),直到达到效果 --截断 BACKUP LOG CloudMonitor TO DISK ...

  4. 清理SQL Server日志释放文件空间的终极方法

    清理SQL Server日志释放文件空间的终极方法  转自:http://www.cnblogs.com/dudu/archive/2013/04/10/3011416.html [问题场景]有一个数 ...

  5. 收缩SQL Server日志不是那么简单

    收缩SQL Server日志不是那么简单的(翻译)   原文地址:http://rusanu.com/2012/07/27/how-to-shrink-the-sql-server-log/ 说明:本 ...

  6. SQL Server无法收缩日志文件 2 因为逻辑日志文件的总数不能少于 2问题

    SQL Server无法收缩日志文件 2 因为逻辑日志文件的总数不能少于 2问题 最近服务器执行收缩日志文件大小的job老是报错 我所用的一个批量收缩日志脚本 USE [master] GO /*** ...

  7. SQL Server 2008 收缩日志 清空删除大日志文件 转载

    SQL Server 2008 收缩日志 清空删除大日志文件 由于SQL2008对文件和日志管理进行了优化,所以以下语句在SQL2005中可以运行但在SQL2008中已经被取消:(SQL2005)Ba ...

  8. SQL Server 2008 收缩日志

    如果SQL SERVER 日志过大,比如,达到了几十个G,想一次性收缩的,直接执行下面命令即可: USE DATABASENAME; GO – Truncate the log by changing ...

  9. 解决Sql Server 日志满了,设置收缩

    解决Sql Server 日志满了,设置收缩: --查看文件占用空间 . '文件大小(MB)',* from sysfiles; ALTER DATABASE SpyData SET RECOVERY ...

随机推荐

  1. 多任务-python实现-继承Thread类,单独编写一个类(2.1.2)

    @ 目录 1.thread类 1.thread类 threding代码实现 import threading import time class MyThread(threading.Thread): ...

  2. jmeter流媒体在线播放HLS插件BlazeMeter - HLS Plugin实现视频在线播放压测

    一.前提 近日因工作需要,需对视频在线播放功能进行压测,视频播放使用的是HLS协议,传输内容包括两部分,一是用来控制播放的m3u8文件,二是TS媒体文件.(HLS协议和m3u8详解可参考此链接:htt ...

  3. Python将word文档转换成PDF文件

    如题. 代码: ''' #將word文档转换为pdf文件 #用到的库是pywin32 #思路上是调用了windows和office功能 ''' #导入所需库 from win32com.client ...

  4. JDK、JRE、JVM,是什么关系?

    作者:小傅哥 博客:https://bugstack.cn Github:https://github.com/fuzhengwei/CodeGuide/wiki 沉淀.分享.成长,让自己和他人都能有 ...

  5. net core cap结合redis+数据库实现最终一致性

    CAP 同时支持使用 RabbitMQ,Kafka,Azure Service Bus 等进行底层之间的消息发送. CAP 目前支持使用 Sql Server,MySql,PostgreSql,Mon ...

  6. Ubuntu系统的ifconfig命令不能执行

    新安装的Ubuntu想要用WinSCP传文件时发现,ifconfig命令用不了 ping www.baidu.com 获得回应,应该是ifconfig未安装 解决这个问题,首先如图(时间较长,获取:[ ...

  7. 卷积网络可解释性复现 | Grad-CAM | ICCV | 2017

    觉得本文不错的可以点个赞.有问题联系作者微信cyx645016617,之后主要转战公众号,不在博客园和CSDN更新. 论文名称:"Grad-CAM: Visual Explanations ...

  8. [leetcode]48RotateImage二维数组翻转

    import java.util.Arrays; /** * You are given an n x n 2D matrix representing an image. Rotate the im ...

  9. Qt学习笔记-了解信号与槽-自定义信号-自定义槽

    信号与槽是连接不同控件直接的渠道. 这里以Horizontal Slider和Dial两个控件举例. 目的是在改变滑条的数值时,Dial也随之响应. 首先添加两个控件. 然后按快捷键F4进入控件编辑模 ...

  10. 架构设计哲学【三种方式:支持DevOps的原则】

    三种方式:支持DevOps的原则 2012年8月22日作者Gene Kim 45条评论 这篇文章是杨波老师分享的一篇文章:这几年对他架构影响最深的一篇文章.主要描述是关于DevOps的,但对系统架构同 ...