当前位置: 首页 > 图文教程 > 数据库 > MSSQL > 怎样缩小SQL Server数据库日志文件

MSSQL
修改自定义数据类型精度
SQL Server 2000之日志传送功能(1)
SQL Server 2000之日志传送功能(2)
建立安全的MSSQL SERVER启动账号
用T-SQL导入文件数据到SQL Server
SQL Server CHARINDEX和PATINDEX详解
如何同时对多个表或列操作
让数据库产生一张详细的日历表
用DTS导入多个文件数据到SQL Server中
SQL SERVER2000备份和恢复存储过程
将Excel中的数据导入到SQL Server 2000数据库中
SQL Server数据库文件恢复技术
SQL邮件自动应答
SQL Sever 2000的系统数据库和索引
SQLServer2000中UNION与UNION ALL的区别
用SQL语句来建立跟踪的问题
关于SQL Server 2000的安全配置
备份服务器端SQL SERVER数据库至本地目录
Sqlserver中的一些技巧
在SQL Server存储过程中执行DTS包

MSSQL 中的 怎样缩小SQL Server数据库日志文件


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-30   浏览: 97 ::
收藏到网摘: n/a

  本文将向大家讲解一下怎样缩小 SQL Server 的数据库日志文件,比较简单,一看就能明白。

  问:我的数据库实际大小为600MB, 日志文件实际大小为33MB, 但日志文件占用空间为2.8GB!我曾经试了几种方式,SHIRNK DATABASE, TRUNCATE LOG FILE, 都没办法将文件缩小。

  答:你可以把下面的代码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