Blueimp 論壇首頁
  首頁  | 討論區  | 最新話題  | 搜尋  | XML  |  登入
博客來購書 | 《主管這樣帶人就對了!》
貝殼鯨魚兒童程式啟蒙教育課程(點我去報名)

此話題中所有文章數: 4 [ 話題狀態: 一般 ]
上一話題 此文章已經觀看 22499 次 而且有 篇回應 下一話題
會員大頭照
男寶寶 jieh
《騎士團團長》
文章: 6700

MS SQL 清除 LOG 並縮減空間的語法(SQL Script)



其實有比較簡短的語法 就是 SQL 內定的 SP laughing 寶寶知道 但是寶寶先不說

又臭又長的 只要把有中文說明的部份改成你要的對象

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。

廢話好多... 就是要告訴各位一件事情,萬事都別偷懶,最難的和最簡單的都要學,交叉使用才能讓你的系統設計達到藝術的完美境界! laughing

----------------------------------------
支持小惡魔
BTC : 19tn3RnCuwZVukXAwyhDWZD4uBgUZoGJPx
LTC : LTFa17pSvvoe3aU5jbmfcmEpo1xuGa9XeA
知識跟八卦一樣,越多人知道越有價值;知識最好的備份方法,散播!
藍色小惡魔(林永傑): 臉書
----------------------------------------
[編輯文章 19 次, 最後修改: jieh 於 2016/12/13 上午 11:44:42]

[2008/1/16 上午 09:31:01] 友善列印   [返迴此篇文章頂端 ]  回到頂端 
會員大頭照
男寶寶 jieh
《騎士團團長》
文章: 6700

MS SQL 清除 LOG 並縮減空間的語法

QQ
----------------------------------------
支持小惡魔
BTC : 19tn3RnCuwZVukXAwyhDWZD4uBgUZoGJPx
LTC : LTFa17pSvvoe3aU5jbmfcmEpo1xuGa9XeA
知識跟八卦一樣,越多人知道越有價值;知識最好的備份方法,散播!
藍色小惡魔(林永傑): 臉書
----------------------------------------
[編輯文章 4 次, 最後修改: jieh 於 2016/10/13 下午 07:06:41]
[2008/5/19 下午 05:43:50] 友善列印   [返迴此篇文章頂端 ]  回到頂端 
會員大頭照
男寶寶 jieh
《騎士團團長》
文章: 6700

Re: MS SQL 清除 LOG 並縮減空間的語法

QQ
----------------------------------------
支持小惡魔
BTC : 19tn3RnCuwZVukXAwyhDWZD4uBgUZoGJPx
LTC : LTFa17pSvvoe3aU5jbmfcmEpo1xuGa9XeA
知識跟八卦一樣,越多人知道越有價值;知識最好的備份方法,散播!
藍色小惡魔(林永傑): 臉書
----------------------------------------
[編輯文章 1 次, 最後修改: jieh 於 2016/10/13 下午 07:07:06]
[2016/7/27 下午 12:01:03] 友善列印   [返迴此篇文章頂端 ]  回到頂端 
會員大頭照
男寶寶 jieh
《騎士團團長》
文章: 6700

Re: MS SQL 清除 LOG 並縮減空間的語法

http://blueimp.pixnet.net/blog/post/63874051

2016/7/27:8867+0, 2017
dotblogs
2016/7/27:24888
----------------------------------------
支持小惡魔
BTC : 19tn3RnCuwZVukXAwyhDWZD4uBgUZoGJPx
LTC : LTFa17pSvvoe3aU5jbmfcmEpo1xuGa9XeA
知識跟八卦一樣,越多人知道越有價值;知識最好的備份方法,散播!
藍色小惡魔(林永傑): 臉書
----------------------------------------
[編輯文章 1 次, 最後修改: jieh 於 2016/7/27 下午 01:10:24]
[2016/7/27 下午 01:08:36] 友善列印   [返迴此篇文章頂端 ]  回到頂端 
[顯示可以列印的版本]