每次操作都会在log中记录
可以定期缩减log的大小

解决方案 »

  1.   

    Create PROCEDURE Sp_ShrinkLog 
                  (@LogF  varchar(200),   @NSize INT) 
    AS
    -- DESC: attempt to shrink the log file to a specific size
    --    gets logical file name and attempt sizeSET NOCOUNT ON
    DECLARE @MaxMin INT, @LogicalFileName sysname,@origs int
    DECLARE @Cnt INT,@StartTime DATETIME, @Truncl VARCHAR(255)SELECT @LogicalFileName = @LogF
    SELECT @MaxMin = 2--获得当前数据库的文件大小
    SELECT @origs = size 
     FROM sysfiles
     WHERE name = @LogicalFileName
    --显示获得的数据库文件的大小
    SELECT 'Original Size OF ' + db_name() + ' LOG IS ' + 
    CONVERT(VARCHAR(30),@origs) + ' 8K pages or ' + 
    CONVERT(VARCHAR(30),(@origs*8/1024)) + 'MB'
     FROM sysfiles
     WHERE name = @LogicalFileNameCREATE TABLE DumpTrn  (DumCol char (8000) NOT null)SELECT @StartTime = GETDATE(),
                    @Truncl = 'BACKUP LOG ['+ db_name() + '] WITH TRUNCATE_ONLY'--收缩数据库的指定数据文件大小
    DBCC SHRINKFILE (@LogicalFileName, @NSize)
    EXEC (@Truncl) -- 使用备份命令收缩日志文件大小--如果已经收缩过,判断数据库是否已经收缩
    WHILE @MaxMin > DATEDIFF (mi, @StartTime, GETDATE()) --收缩使用的时间
     AND @origs =    (SELECT size FROM sysfiles WHERE name = @LogicalFileName) --收缩前后文件的大小比较
     AND (@origs * 8 /1024) > @NSize --原数据库是否需要收缩
    BEGIN 
        set @Cnt = 0
        WHILE ((@Cnt < @origs / 16) AND (@Cnt < 50000))
        BEGIN -- 填写数据然后删除
            INSERT DumpTrn VALUES ('Fill Log') -- 这是一个8000字节的字符列.
            DELETE DumpTrn
            set  @Cnt = @Cnt + 1
         END
         EXEC (@Truncl) -- 察看Log文件是否已经收缩.
    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 = @LogicalFileNameDROP TABLE DumpTrnPRINT '*** Perform a FULL DATABASE BACKUP ***'SET NOCOUNT OFF
    go--使用方法
    use northwind
    go
    exec sp_shrinkLog 'northwind',22
    backup log dbname with no_log
    dbcc shrinkdatabase(dbname)3
      

  2.   

    靠!
    将数据库选项设为在检查点自动截断日志(truncate log on check point);事后再手工处理治标不治本啊!别告诉我日志文件你有大用处,不错日志文件对金融机构的确有大用处,但金融机构,好像还没学会用MS SQL啊!
      

  3.   

    http://expert.csdn.net/Expert/topic/2623/2623764.xml?temp=.8325922