rt

解决方案 »

  1.   

    给你一个收缩日志文件的参考,自己举一反三:
    USE [数据库名]
    GO
    /****** 对象:  StoredProcedure [dbo].[spDB_ShrinkFile]    脚本日期: 06/08/2008 17:33:20 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    /* =============================================
     作者:冉冉毅马
     创建:2007年5月10日 15:22
     描述:数据库维护之二:日志尺寸超限则收缩
     注意:本存储过程仅适用于SQL Server 2005,SQL Server 2000使用以下语法:
    SELECT name FROM [sysfiles] WHERE status=1081410 AND size*8/1024>@maxSize
     修改:2007年5月28日 04:51
     =============================================*/
    CREATE PROCEDURE [dbo].[spDB_ShrinkFile]
    (
    @maxSize int, -- 日志文件尺寸上限(MB,默认50)
    @targetSize int -- 收缩后日志文件尺寸(MB,默认1)
    )
    AS
    SET NOCOUNT ON; -- 设置“不返回计数”参数开(表示受 Transact-SQL 语句影响的行数)。
    DECLARE @rnm int; 
    SET @rnm=0; --被收缩的日志文件数,初始
    IF @maxSize>@targetSize -- 仅当目标尺寸<=源尺寸时执行收缩
    BEGIN
    --定义变量:日志文件名称
    DECLARE @logName nvarchar(50);
    IF @maxSize IS NULL SET @maxSize=50;
    IF @targetSize IS NULL SET @targetSize=1; -- 游标:尺寸超限日志文件名称
    DECLARE curLogName CURSOR FOR 
    SELECT RTRIM(name) FROM sys.database_files 
    WHERE type=1 AND state=0 AND size*8/1024>@maxSize
    OPEN curLogName
    FETCH NEXT FROM curLogName INTO @logName --日志文件名称
    WHILE @@FETCH_STATUS = 0
    BEGIN
    DBCC SHRINKFILE (@logName,@targetSize) WITH NO_INFOMSGS ;
    SET @rnm = @rnm+1; FETCH NEXT FROM curLogName INTO @logName
    END 
    CLOSE curLogName
    DEALLOCATE curLogName
    END
    SET NOCOUNT OFF; -- 恢复“不返回计数”参数为关
    RETURN @rnm;
      

  2.   

    关键是这句
     DBCC SHRINKFILE  database
      

  3.   

    DUMP  TRANSACTION  库名  WITH  NO_LOG  然后再收缩数据库
      

  4.   

    借代码看看,学习select rtime(name) from sys.database_files where type =1 and state=0 and size*8/1024>@maxsize
    DBCC shrinkfile(@logname,@targetsize) with no_infomsgs