copy过来的,给你参考一下
--定期压缩日志1:截断事务日志:
BACKUP LOG 数据库名 WITH NO_LOG2:清空日志
DUMP  TRANSACTION  库名  WITH  NO_LOG    再:
企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
3: 删除LOG
1:分离数据库   企业管理器->服务器->数据库->右键->分离数据库
2:删除LOG文件
3:附加数据库  企业管理器->服务器->数据库->右键->附加数据库
此法生成新的LOG,大小只有500多K
   再将此数据库设置自动收缩
 或用代码: 
下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。EXEC sp_detach_db @dbname = 'pubs'
EXEC sp_attach_single_file_db @dbname = 'pubs', 
   @physname = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs.mdf'
4: 如果想以后不让它增长
企业管理器--服务器--右键数据库--属性--事务日志--将文件增长限制为xM(x是你允许的最大数据文件大小)--SQL语句的设置方式:
alter database 数据库名 modify file(name=逻辑文件名,maxsize=20)5.设置为自动收缩
企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩"

解决方案 »

  1.   

    --压缩日志及数据库文件大小--SQL7.0的操作,在查询分析器中执行:1.清空日志
    DUMP  TRANSACTION  库名  WITH  NO_LOG    2.截断事务日志:
    BACKUP LOG 数据库名 WITH NO_LOG3.收缩数据库文件(如果不压缩,数据库的文件不会减小
    企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件
    --选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
    --选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了 也可以用SQL语句来完成
    --收缩数据库
    DBCC SHRINKDATABASE(客户资料)

    --收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles
    DBCC SHRINKFILE(1)4.为了最大化的缩小日志文件
    下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。

    a.分离
    EXEC sp_detach_db @dbname = 'pubs' b.删除日志文件

    c.再附加
    EXEC sp_attach_single_file_db @dbname = 'pubs', 
       @physname = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs.mdf'
      

  2.   

    /*
    新建一proc,压缩时调用就行了!
    更多的参考 http://expert.csdn.net/Expert/topic/2632/2632755.xml?temp=.7790033
    */SET QUOTED_IDENTIFIER OFF 
    GO
    SET ANSI_NULLS OFF 
    GO
    CREATE PROCEDURE strink_logspace
     AS
       SET NOCOUNT ON
       DECLARE @LogicalFileName sysname,
               @MaxMinutes INT,
               @NewSize INT   SELECT  @LogicalFileName = rtrim(name),
               @MaxMinutes = 10,      -- 最大执行时间
               @NewSize    = 10       -- 最小空间
       from sysfiles where status & 0x40 = 0x40   -- Setup / initialize
       DECLARE @OriginalSize int
       SELECT @OriginalSize = size -- in 8K pages
         FROM sysfiles
         WHERE name = @LogicalFileName   SELECT db_name() +'日志原始大小' +  
               CONVERT(VARCHAR(30),@OriginalSize) + ' pages/ 8K 或 ' + 
               CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + 'MB'
         FROM sysfiles
         WHERE name = @LogicalFileName   CREATE TABLE DummyTrans
         (DummyColumn char (8000) not null)   -- Wrap log and truncate it.
       DECLARE @Counter   INT,
               @StartTime DATETIME,
               @TruncLog  VARCHAR(255)
       SELECT  @StartTime = GETDATE(),
               @TruncLog = 'BACKUP LOG ['+ db_name() + '] WITH TRUNCATE_ONLY'
       -- Try an initial shrink.
       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)  -- the log has not shrunk    
             AND (@OriginalSize * 8 /1024) > @NewSize  -- The value passed in for new size is smaller than the current size.
         BEGIN -- Outer loop.
           SELECT @Counter = 0
           WHILE  ((@Counter < @OriginalSize / 16) AND (@Counter < 50000))
             BEGIN -- update
               INSERT DummyTrans VALUES ('Fill Log')  -- Because it is a char field it inserts 8000 bytes.
               DELETE DummyTrans
               SELECT @Counter = @Counter + 1
             END   -- update
           EXEC (@TruncLog)  -- See if a trunc of the log shrinks it.
         END   -- outer loop   DBCC SHRINKFILE (@LogicalFileName, @NewSize)   SELECT db_name() +'日志最后大小' + 
               CONVERT(VARCHAR(30),size) + ' pages/ 8K 或  ' + 
               CONVERT(VARCHAR(30),(size*8/1024)) + 'MB'
         FROM sysfiles 
         WHERE name = @LogicalFileName
       DROP TABLE DummyTrans
       PRINT '*** 数据库日志压缩成功 ***'
       SET NOCOUNT OFFGO
    SET QUOTED_IDENTIFIER OFF 
    GO
    SET ANSI_NULLS ON 
    GO--used
    exec strink_logspace
      

  3.   

    EXEC sp_detach_db @dbname = 'example'
    ----分离数据库后,删除日志文件 ,再用下面的附加数据库EXEC sp_attach_single_file_db @dbname = 'pubs', 
       @physname = 'D:\MSSQL\Data\example.mdf'