数据库

 首页 > 数据库 > SqlServer > 也谈如何缩小SQL SERVER日志文件

也谈如何缩小SQL SERVER日志文件

分享到:
【字体:
导读:
         摘要: 前几天也碰到日志文件过大的标题,数据库实际大小为600M, 日志文件实际大小为33M, 但日志文件占用空间为2.8G! 试了多种方法,SHIRNK DATABASE, TRUNCATE LOG FILE, 都没措施将文件缩小。无论如...

也谈如何缩小SQL SERVER日志文件

前几天也碰到日志文件过大的标题,数据库实际大小为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 SERVER日志文件
分享到:
断定几个SQL Server栏中的最大值
断定几个SQL Server栏中的最大值 你有一个里面包含整数、浮点数、金额或日期的N列SQL Server表,而你的任务是返回这些列中某一行的最大值。你甚至被请求一次求几行的最大值,返回一个记录组(record set)。 第一个任务暗示你可能预先不知道要比拟哪一列或比拟多少列,但事实并非总是如此。可能你恰恰知道你要比拟哪些列,...
SQL Server 2005分析服务 同一整合视图
SQL Server 2005分析服务 同一整合视图 同一的空间模型 分析服务供给了一个商务语义模型,被称为同一的空间模型 (UDM)。该模型定义了商务实体、商务逻辑、盘算和度量。UDM 是一个中心肠位,充当所有报告、电子表格、OLAP浏览器、KIPS 和分析利用程序的真实情况的唯一版本。 应用强盛的新的数据源视图功效,可以将UDM映射为...
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……