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

原创 2004年07月13日 11:12: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:“数据收缩”详解

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

SQL SERVER 收缩数据库的命令

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

SQLServer 维护脚本分享(02)数据库文件增长及收缩情况

--先确定是否开启了默认跟踪,没有则需开启跟踪一段时间 exec sp_configure 'show advanced options',1 reconfigure exec sp_conf...
  • kk185800961
  • kk185800961
  • 2015年01月25日 23:36
  • 813

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

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

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

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

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

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

sql server 2000收缩数据库【极简操作】

个人理解,数据库在平凡长期操作的过程中会数据的日志文件永远是按一定的比例在增加,数据文件在数据库删除大量的数据后不一定减小磁盘空间,反复操作会出现空间浪费,所以收缩数据库将会得以体现。 假设把数据库...
  • w200221626
  • w200221626
  • 2016年07月25日 15:26
  • 2448
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章: 『收藏』收缩日志文件的SQL脚本
举报原因:
原因补充:

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