也談如何縮小SQL SERVER日志文件_Mssql數據庫教程

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!

      推薦:Sql2005如何用dtexec運行ssis(DTS)包
        一、首先在Business Intelligence中設計好包,并調試通過。   二、選用dtexec工具運行包   (一) 打開 xp_cmdshell 選項   SQL Server 2005 中引入的 xp_cmdshell 選項是服務

      前幾天也碰到日志文件過大的問題,數據庫實際大小為600M, 日志文件實際大小為33M, 但日志文件占用空間為2.8G!

      試了多種方式,SHIRNK DATABASE, TRUNCATE LOG FILE, 都沒辦法將文件縮小。無論如何,這應該算SQL Server的一個BUG吧。

      后來找到下面的代碼,就可以將日志文件縮小到自己想要的大小了。把代碼COPY到查詢分析器里,,然后修改其中的3個參數(數據庫名,日志文件名,和目標日志文件的大小),運行即可(我已經用過多次了)

      以下為引用的內容:

      -----
      SET NOCOUNT ON
      DECLARE @LogicalFileName sysname,
      @MaxMinutes INT,
      @NewSize INT


      USE Marias -- 要操作的數據庫名
      SELECT @LogicalFileName = 'Marias_log', -- 日志文件名
      @MaxMinutes = 10, -- Limit on time allowed to wrap log.
      @NewSize = 100 -- 你想設定的日志文件的大小(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 has not expired
      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

      分享:帶你深入了解SQL Server 2008獨到之處
      SQL Server 2008的獨到之處: 安裝 SQL Server 2008的設置和安裝也有所改進。配置數據和引擎位已經分開了,所以它使創建基本的未配置系統的磁盤圖像變得可能了,它使分布到多個服務器

      來源:模板無憂//所屬分類:Mssql數據庫教程/更新時間:2008-08-22
      相關Mssql數據庫教程