清除日志: 
DECLARE @LogicalFileName sysname,
        @MaxMinutes INT,
        @NewSize INT
USE     szwzcheck             -- 要操作的数据库名
SELECT  @LogicalFileName = 'szwzcheck_Log',  -- 日志文件名
@MaxMinutes = 10,               -- Limit on time allowed to wrap log.
        @NewSize = 20                  -- 你想设定的日志文件的大小(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 
      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
 
把szwzcheck换成你数据库的名字即可,在查询分析器里面运行。 
有全角的空格(为了显示好看),你自己把他换一下. 
收缩日志:企业管理器--所有任务--收缩数据库--文件--选日志文件收缩

解决方案 »

  1.   

    *--压缩数据库的通用存储过程 
      
     压缩日志及数据库文件大小 
     因为要对数据库进行分离处理 
     所以存储过程不能创建在被压缩的数据库中 --邹建 2004.03(引用请保留此信息)--*/ /*--调用示例 
     exec p_compdb  'test ' 
    --*/ use master  --注意,此存储过程要建在master数据库中 
    go if exists (select * from dbo.sysobjects where id = object_id(N '[dbo].[p_compdb] ') and OBJECTPROPERTY(id, N 'IsProcedure ') = 1) 
    drop procedure [dbo].[p_compdb] 
    GO create proc p_compdb 
    @dbname sysname,   --要压缩的数据库名 
    @bkdatabase bit=1,   --因为分离日志的步骤中,可能会损坏数据库,所以你可以选择是否自动数据库 
    @bkfname nvarchar(260)= ' ' --备份的文件名,如果不指定,自动备份到默认备份目录,备份文件名为:数据库名+日期时间 
    as 
    --1.清空日志 
    exec( 'DUMP TRANSACTION [ '+@dbname+ '] WITH  NO_LOG ') --2.截断事务日志: 
    exec( 'BACKUP LOG [ '+@dbname+ '] WITH NO_LOG ') --3.收缩数据库文件(如果不压缩,数据库的文件不会减小 
    exec( 'DBCC SHRINKDATABASE([ '+@dbname+ ']) ') --4.设置自动收缩 
    exec( 'EXEC sp_dboption  ' ' '+@dbname+ ' ' ', ' 'autoshrink ' ', ' 'TRUE ' ' ') --后面的步骤有一定危险,你可以可以选择是否应该这些步骤 
    --5.分离数据库 
    if @bkdatabase=1 
    begin 
     if isnull(@bkfname, ' ')= ' '  
      set @bkfname=@dbname+ '_ '+convert(varchar,getdate(),112) 
       +replace(convert(varchar,getdate(),108), ': ', ' ') 
     select 提示信息= '备份数据库到SQL 默认备份目录,备份文件名: '+@bkfname 
     exec( 'backup database [ '+@dbname+ '] to disk= ' ' '+@bkfname+ ' ' ' ') 
    end --进行分离处理 
    create table #t(fname nvarchar(260),type int) 
    exec( 'insert into #t select filename,type=status&0x40 from [ '+@dbname+ ']..sysfiles ') 
    exec( 'sp_detach_db  ' ' '+@dbname+ ' ' ' ') --删除日志文件 
    declare @fname nvarchar(260),@s varchar(8000) 
    declare tb cursor local for select fname from #t where type=64 
    open tb  
    fetch next from tb into @fname 
    while @@fetch_status=0 
    begin 
     set @s= 'del " '+rtrim(@fname)+ '" ' 
     exec master..xp_cmdshell @s,no_output 
     fetch next from tb into @fname 
    end 
    close tb 
    deallocate tb --附加数据库 
    set @s= ' ' 
    declare tb cursor local for select fname from #t where type=0 
    open tb  
    fetch next from tb into @fname 
    while @@fetch_status=0 
    begin 
     set @s=@s+ ', ' ' '+rtrim(@fname)+ ' ' ' ' 
     fetch next from tb into @fname 
    end 
    close tb 
    deallocate tb 
    exec( 'sp_attach_single_file_db  ' ' '+@dbname+ ' ' ' '+@s) 
    go 
    ------------------------------------------------------------------------------------也可在企业管理里收缩日志: 
    --收缩数据库 
    dbcc shrinkdatabase( '数据库名 ',0,notruncate) 
    DUMP TRANSACTION [库名] WITH NO_LOG   
    下例将 UserDB 用户数据库中名为 DataFil1 的文件收缩到 7 MB。 USE UserDB 
    GO 
    DBCC SHRINKFILE (DataFil1, 7) 
    下例将 UserDB 用户数据库中的文件减小,以使 UserDB 中的文件有 10% 的可用空间。 DBCC SHRINKDATABASE (UserDB, 10) 
    GO