


縮小SQL SERVER日志文件
SQL server 2000 會(huì)有日志文件由于時(shí)間的積累越來越大的問題:數(shù)據(jù)庫實(shí)際大小為15M, 日志文件實(shí)際大小為625KB(導(dǎo)出的日志文件), 但日志文件實(shí)際占用空間為200MB(默認(rèn)設(shè)置是文件日志會(huì)自動(dòng)增長)。
如果想在數(shù)據(jù)庫屬性那里,直接將當(dāng)前的日志文件的存儲(chǔ)空間改小,是不行的。 解決方法:
找到下面的代碼,可以將日志文件縮小到自己想要的大小了。把代碼COPY到查詢分析器里,,然后修改其中的3個(gè)參數(shù)(數(shù)據(jù)庫名,日志文件名,和目標(biāo)日志文件的大小),運(yùn)行即可!
SET NOCOUNT ON
DECLARE @LogicalFileName sysname,
@MaxMinutes INT,
@NewSize INT
USE GFCMS -- 要操作的數(shù)據(jù)庫名
SELECT @LogicalFileName = 'GFCMS_log', -- 日志文件名
@MaxMinutes = 10, -- Limit on time allowed to wrap log.
@NewSize = 100 -- 你想設(shè)定的日志文件的大小(M),注意此大小必須小于實(shí)際文件大小
-- 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標(biāo)記為可以清除
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
詳細(xì)解釋: 關(guān)鍵的語句是:'BACKUP LOG ' + db_name() + ' WITH TRUNCATE_ONLY'和DBCC SHRINKFILE (@LogicalFileName, @NewSize) 'BACKUP LOG ' + db_name() + ' WITH TRUNCATE_ONLY':在不備份日志的情況下,刪除不活動(dòng)的日志部分,并且截?cái)嗳罩。但是,截(cái)嗖粶p小物理日志文件的大小,但減小邏輯日志文件的大小。 DBCC SHRINKFILE
收縮相關(guān)數(shù)據(jù)庫的指定數(shù)據(jù)文件或日志文件大小,即減小物理日志文件的大小。語法
DBCC SHRINKFILE
( { file_name | file_id }
{ [ , target_size ]
| [ , { EMPTYFILE | NOTRUNCATE | TRUNCATEONLY } ]
}
)
詳細(xì)的描述可以參考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
關(guān)鍵字:日志文件、數(shù)據(jù)庫、SQL SERVER
新文章:
- CentOS7下圖形配置網(wǎng)絡(luò)的方法
- CentOS 7如何添加刪除用戶
- 如何解決centos7雙系統(tǒng)后丟失windows啟動(dòng)項(xiàng)
- CentOS單網(wǎng)卡如何批量添加不同IP段
- CentOS下iconv命令的介紹
- Centos7 SSH密鑰登陸及密碼密鑰雙重驗(yàn)證詳解
- CentOS 7.1添加刪除用戶的方法
- CentOS查找/掃描局域網(wǎng)打印機(jī)IP講解
- CentOS7使用hostapd實(shí)現(xiàn)無AP模式的詳解
- su命令不能切換root的解決方法
- 解決VMware下CentOS7網(wǎng)絡(luò)重啟出錯(cuò)
- 解決Centos7雙系統(tǒng)后丟失windows啟動(dòng)項(xiàng)
- CentOS下如何避免文件覆蓋
- CentOS7和CentOS6系統(tǒng)有什么不同呢
- Centos 6.6默認(rèn)iptable規(guī)則詳解