縮小SQL SERVER記錄檔

來源:互聯網
上載者:User
server SQL server 2000 會有記錄檔由於時間的積累越來越大的問題:資料庫實際大小為15M, 記錄檔實際大小為625KB(匯出的記錄檔), 但記錄檔實際佔用空間為200MB(預設設定是檔案日誌會自動成長)。
如果想在資料庫屬性那裡,直接將當前的記錄檔的儲存空間改小,是不行的。 解決方案:
找到下面的代碼,可以將記錄檔縮小到自己想要的大小了。把代碼COPY到查詢分析器裡,,然後修改其中的3個參數(資料庫名,記錄檔名,和目標記錄檔的大小),運行即可!

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

USE GFCMS -- 要操作的資料庫名
SELECT @LogicalFileName = 'GFCMS_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'

EXEC (@TruncLog)--把log中能夠shrink的transaction的log標記為可以清除
DBCC SHRINKFILE (@LogicalFileName, @NewSize)--shrink檔案

-- 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

詳細解釋: 關鍵的語句是:'BACKUP LOG ' + db_name() + ' WITH TRUNCATE_ONLY'和DBCC SHRINKFILE (@LogicalFileName, @NewSize) 'BACKUP LOG ' + db_name() + ' WITH TRUNCATE_ONLY':在不備份日誌的情況下,刪除不活動的日誌部分,並且截斷日誌。但是,截斷不減小物理記錄檔的大小,但減小邏輯記錄檔的大小。 DBCC SHRINKFILE
收縮相關資料庫的指定資料檔案或記錄檔大小,即減小物理記錄檔的大小。文法
DBCC SHRINKFILE
    ( { file_name | file_id }
        { [ , target_size ]
            | [ , { EMPTYFILE | NOTRUNCATE | TRUNCATEONLY } ]
        }
    ) 詳細的描述可以參考mk:@MSITStore:C:\Program%20Files\Microsoft%20SQL%20Server\80\Tools\Books\tsqlref.chm::/ts_dbcc_8b51.htm mk:@MSITStore:C:\Program%20Files\Microsoft%20SQL%20Server\80\Tools\Books\architec.chm::/8_ar_da2_7vaf.htm   

相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。