我的SQL用了一段时间,最近提示事物日志满了,一看都10个G了
晕,备份了一下,还是不见少,请问有什么方法可以给日志瘦身
好像有一个存储过程可以,请各位指点,谢谢!

解决方案 »

  1.   

    --将日志文件缩小到自己想要的大小了,修改其中的3个参数(数据库名,日志文件名,和目标日志文件的大小) 
    SET NOCOUNT ON 
    DECLARE @LogicalFileName sysname, 
    @MaxMinutes INT, 
    @NewSize INT 
    USE tjdata -- 要操作的数据库名 
    SELECT @LogicalFileName = 'tjdata_Log', -- 日志文件名 
    @MaxMinutes = 15, -- Limit on time allowed to wrap log. 
    @NewSize = 500 -- 你想设定的日志文件的大小(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
      

  2.   

    企业管理器里面的方法:
    1、打开企业管理器
    2、打开要处理的数据库
    3、点击最上面菜单>工具>SQL查询分析器,打开SQL查询分析器
    4、在输入窗口里面输入:
    DUMP TRANSACTION [数据库名] WITH  NO_LOG
    BACKUP LOG [数据库名] WITH NO_LOG
    DBCC SHRINKDATABASE([数据库名])
     
    或者
    1.打开查询分析器,输入命令
    DUMP TRANSACTION 数据库名 WITH NO_LOG
    2.再打开企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了。
      

  3.   

    strink_logspace这个系统自带的存储过程可不可以?