其實有比較簡短的語法 就是 SQL 內定的 SP 寶寶知道 但是寶寶先不說
又臭又長的 只要把有中文說明的部份改成你要的對象
P.S. 完整內容及持續更新版本請連結至原文查看:http://www.imp.idv.tw/play/forum/viewthread?thread=990
SET NOCOUNT ON DECLARE @LogicalFileName sysname, @MaxMinutes INT, @NewSize INT USE {DBName ex HRMS} -- 要操作的資料庫名 SELECT @LogicalFileName = '{Log file name ex HRMS_Log}', -- 日誌文件名 @MaxMinutes = 10, -- Limit on time allowed to wrap log. (M) @NewSize = 1 -- 你想設定的日誌文件的大小(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
引用自:藍色小惡魔《MS SQL 清除 LOG 並縮減空間的語法》
http://www.imp.idv.tw/play/forum/viewthread?thread=990
事隔這麼久... 我現在來公佈那個簡短的語法 但是請注意這個語法的缺點!!!
DUMP TRANSACTION DBName WITH NO_LOG
為什麼我不一開始就推薦這個語法勒...
因為這個內建的方法他不會重新設定 LOG 檔的初始大小
請注意我原本的語法中 〝@NewSize = 1 -- 你想設定的日誌文件的大小(M)〞
很多時候我們剛接手別人的系統,發現磁碟空間老是爆滿,第一手段就是控制 LOG 的成長。
然而如果你只會這個簡單的語法,如果不是很了解原理也許一開始你會猛按卻沒有效果,因為很多偷懶或不懂的資料庫設計者,就是愛把 LOG 開個幾百幾千妹的,很討厭......
但是去問他會不會解 LOG 抓賊啊?只有無言的答案!
而上面提到的簡短語法他只會把 LOG 清除,然後呢?該DB 的 LOG 檔就會強佔他被設定的初始空間。
舉例你會看到一個 LOG 檔有 2 G,其實他幾百年都是 2 G,你以為他用到 2 G 了所以用力清卻沒用。
使用了我樂樂長的可重設初始空間的語法後,你才發現該資料庫這輩子根本用不到 200 M。
廢話好多... 就是要告訴各位一件事情,萬事都別偷懶,最難的和最簡單的都要學,交叉使用才能讓你的系統設計達到藝術的完美境界!
引用自:藍色小惡魔《MS SQL 清除 LOG 並縮減空間的語法》
http://www.imp.idv.tw/play/forum/viewthread?thread=990
留言列表