天天看點

SQL Server 2005 日志删除和日志檔案限制

http://www.javaresearch.org/article/127373.htm

清除日志:

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: 删除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' 

2:清空日志 

DUMP  TRANSACTION  庫名  WITH  NO_LOG    

再: 

企業管理器--右鍵你要壓縮的資料庫--所有任務--收縮資料庫--收縮檔案--選擇日志檔案--在收縮方式裡選擇收縮至XXM,這裡會給出一個允許收縮到的最小M數,直接輸入這個數,确定就可以了 

3: 如果想以後不讓它增長 

企業管理器->伺服器->資料庫->屬性->事務日志->将檔案增長限制為2M