『收藏』收缩日志文件的SQL脚本

原创 2004年06月28日 16:30:00

/* 本文由微软新闻组摘录下来的。一段非常有用的脚本。*/

前几天也碰到日志文件过大的问题,数据库实际大小为600M, 日志文件实际大小为33M,
但日志文件占用空间为2.8G!!! 试了多种方式,SHIRNK DATABASE, TRUNCATE LOG FILE, 都没办法将文件缩小。无论如何,这应该算SQL SERVER的一个BUG吧。

后来找到下面的代码,就可以将日志文件缩小到自己想要的大小了。把代码COPY到查询
分析器里,,然后修改其中的3个参数(数据库名,日志文件名,和目标日志文件的大
小),运行即可(我已经用过多次了)
-----
SET NOCOUNT ON
DECLARE @LogicalFileName sysname,
@MaxMinutes INT,
@NewSize INT


USE Marias -- 要操作的数据库名
SELECT @LogicalFileName = 'Marias_log', -- 日志文件名
@MaxMinutes = 10, -- Limit on time allowed to wrap log.
@NewSize = 100 -- 你想设定的日志文件的大小(M)

-- Setup / initialize
DECLARE @OriginalSize int
SELECT @OriginalSize = size
FROM sysfiles
WHERE name = @LogicalFileName
SELECT 'Original Size of ' + db_name() + ' LOG is ' +
CONVERT(VARCHAR(30),@OriginalSize) + ' 8K pages or ' +
CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + 'MB'
FROM sysfiles
WHERE name = @LogicalFileName
CREATE TABLE DummyTrans
(DummyColumn char (8000) not null)


DECLARE @Counter INT,
@StartTime DATETIME,
@TruncLog VARCHAR(255)
SELECT @StartTime = GETDATE(),
@TruncLog = 'BACKUP LOG ' + db_name() + ' WITH TRUNCATE_ONLY'

DBCC SHRINKFILE (@LogicalFileName, @NewSize)
EXEC (@TruncLog)
-- Wrap the log if necessary.
WHILE @MaxMinutes > DATEDIFF (mi, @StartTime, GETDATE()) -- time has not
expired
AND @OriginalSize = (SELECT size FROM sysfiles WHERE name =
@LogicalFileName)
AND (@OriginalSize * 8 /1024) > @NewSize
BEGIN -- Outer loop.
SELECT @Counter = 0
WHILE ((@Counter < @OriginalSize / 16) AND (@Counter < 50000))
BEGIN -- update
INSERT DummyTrans VALUES ('Fill Log')
DELETE DummyTrans
SELECT @Counter = @Counter + 1
END
EXEC (@TruncLog)
END
SELECT 'Final Size of ' + db_name() + ' LOG is ' +
CONVERT(VARCHAR(30),size) + ' 8K pages or ' +
CONVERT(VARCHAR(30),(size*8/1024)) + 'MB'
FROM sysfiles
WHERE name = @LogicalFileName
DROP TABLE DummyTrans
SET NOCOUNT OFF

 

sql收缩数据库日志的几种办法

在SQL Server 2000/2005中可以快速压缩日志log文件,通过SQL, 方法一: --BigData为数据库名 DUMP TRANSACTION BigData WITH ...
  • qooer_tech
  • qooer_tech
  • 2014年11月18日 15:13
  • 4728

SQL Server中收缩、清空和删除数据库文件及日志文件

一、简单方法 –SQL Server收缩方法 1、右键数据库→属性→选项→故障还原模型→设为简单→确定; 2、右键数据库→所有任务→收缩数据库→确定; 3、右键数据库→属性→选项→故障还...
  • wlming6
  • wlming6
  • 2015年06月15日 11:29
  • 8225

SqlServer 数据库日志无法收缩处理过程

今天按常用方法收缩一个测试用的数据库日志,发现没法收缩!
  • kk185800961
  • kk185800961
  • 2014年12月11日 13:45
  • 3987

Sql server 2005日志文件太大,使其减小的方法

Sql server 2005日志文件太大,使其减小的方法   Sqlserver2005日志文件太大,使其减小的方法:  运行下面的三行 dbName为数据库名:  ...
  • kingmax54212008
  • kingmax54212008
  • 2013年04月12日 16:52
  • 10623

SQL SERVER 收缩数据库的命令

http://www.cnblogs.com/fyen/archive/2011/01/18/1938707.html
  • panpanxj
  • panpanxj
  • 2014年09月30日 17:12
  • 1120

SQL Server中收缩、清空和删除数据库文件及日志文件

一、简单方法  –SQL Server收缩方法  1、右键数据库→属性→选项→故障还原模型→设为简单→确定;  2、右键数据库→所有任务→收缩数据库→确定;  3、右键数据库→属性→选项→故障...
  • dawn4317
  • dawn4317
  • 2017年03月07日 19:52
  • 1217

LDF文件过大,如何收缩

方法一、       方法二、 MSSQL清除日志的命令 如何清除sqlserver 日志? 设置数据库为简单模式,自动收缩 1.打开查询分析器,输入命令 backup lo...
  • liujiayu2
  • liujiayu2
  • 2015年08月19日 15:17
  • 340

SQL Server:“数据收缩”详解

SQL Server:“数据收缩”详解 1. 数据库的相关属性 2. 为何数据库需要收缩? 3. 如何收缩数据库? 1. 数据库的相关属性 ...
  • sunroyi666
  • sunroyi666
  • 2016年06月27日 12:26
  • 10077

SQL 2008 R2数据库变为REPLICATION,日志不断增长而且不能截断和收缩的解决方案

运行环境:windows server2003,sql server2008 R2,数据库上布置CDC   用户反应系统报错是日志已满,系统不能运行。查看日志文件时,发现日志文件已经达到15G,...
  • hdhai9451
  • hdhai9451
  • 2015年06月24日 10:57
  • 1704

虚拟日志文件过大导致不能收缩日志文件

今天在对一个历史数据库进行日志收缩时(SQLServer2008R2),发现怎么弄,最后日志大小都有2G多。检查了数据库为简单模式,且没有相关写操作,按理来说应该可以收缩到很小才对。 先是检查了...
  • seteor
  • seteor
  • 2013年04月26日 12:34
  • 1781
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:『收藏』收缩日志文件的SQL脚本
举报原因:
原因补充:

(最多只允许输入30个字)