江西广告网

标题: SQL SERVER日志清除的两种方法 [打印本页]

作者: bibibobo    时间: 2009-1-8 11:11
标题: SQL SERVER日志清除的两种方法
  在使用过程中大家经常碰到数据库日志非常大的情况,在这里介绍了两种处理方法……      方法一      一般情况下,SQL数据库的收缩并不能很大程度上减小数据库大小,其主要作用是收缩日志大小,应当定期进行此操作以免数据库日志过大      1、设置数据库模式为简单模式:打开SQL企业管理器,在控制台根目录中依次点开Microsoft SQL Server-->SQL Server组-->双击打开你的服务器-->双击打开数据库目录-->选择你的数据库名称(如论坛数据库Forum)-->然后点击右键选择属性-->选择选项-->在故障还原的模式中选择“简单”,然后按确定保存      2、在当前数据库上点右键,看所有任务中的收缩数据库,一般里面的默认设置不用调整,直接点确定      3、收缩数据库完成后,建议将您的数据库属性重新设置为标准模式,操作方法同第一点,因为日志在一些异常情况下往往是恢复数据库的重要依据      方法二      SET NOCOUNT ON      DECLARE @LogicalFileName sysname,      @MaxMinutes INT,      @NewSize INT      USE tablename -- 要操作的数据库名      SELECT @LogicalFileName = 'tablename_log', -- 日志文件名      @MaxMinutes = 10, -- Limit on time allowed to wrap log.      @NewSize = 1 -- 你想设定的日志文件的大小(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 <




欢迎光临 江西广告网 (http://bbs.jxadw.com/) Powered by Discuz! X3.2