SQL日志太大?教你一鍵清理
最近數(shù)據(jù)倉庫時(shí)不時(shí)爆磁盤空間不足,導(dǎo)致定時(shí)任務(wù)執(zhí)行失敗,這可了得,要知道定時(shí)任務(wù)執(zhí)行的可是每天的業(yè)務(wù)數(shù)據(jù)。
仔細(xì)檢查,發(fā)現(xiàn)是日志文件爆滿,這是咋回事呢?
原來數(shù)據(jù)倉庫中,每天的定時(shí)任務(wù)需要從其他系統(tǒng)里面抽取數(shù)據(jù)過來,導(dǎo)致數(shù)據(jù)文件和日志文件的磁盤空間都增長的飛快。
數(shù)據(jù)不能清理,但是日志文件是可以清理的,說干就干。
測試環(huán)境
SQL Server 2017
操作步驟
1. 將恢復(fù)模式改成“簡單”右鍵要清理的數(shù)據(jù)庫名 - 屬性,切換到選項(xiàng),將恢復(fù)模式修改為簡單,如下圖1,然后點(diǎn)確定。
圖1
2、收縮日志
還是右鍵要清理的數(shù)據(jù)庫名—任務(wù)—收縮—文件,按如圖2進(jìn)行設(shè)置,設(shè)置完后點(diǎn)確定即可
圖2
這樣日志就收縮到1M了,是不是很簡單?
但是如果遇到了需要經(jīng)常清理日志怎么辦?難道每次都要來這樣設(shè)置一遍嗎?就沒有什么辦法讓它自動(dòng)完成?
答案肯定是有的!下面才是真正的一鍵清理。
這里我們要濃重介紹SQL Server的代理功能了
SQL Server 代理
SQL Server代理功能主要是用來完成一些定時(shí)任務(wù)的,說白了就是你寫好命令,配置好執(zhí)行的頻率和時(shí)間,它就可以按時(shí)執(zhí)行你寫好的命令。
下面我們將圖1和圖2中的操作使用命令的形式做一個(gè)定時(shí)任務(wù)。
1、新建作業(yè)
如下圖3,我們右鍵作業(yè)—新建作業(yè)即可開始新建一個(gè)作業(yè)了
圖3
2、命名作業(yè)
給你的作業(yè)命名,這個(gè)可以隨便起,能識(shí)別就行
3、新建步驟
點(diǎn)擊左側(cè)的菜單欄,選擇步驟—右側(cè)底部點(diǎn)擊新建...—在彈出的窗口中做如下配置:
如果你的數(shù)據(jù)庫名跟我的不一樣,可以套用下面的命令:
USE [master]
GO
ALTER DATABASE 要清理的數(shù)據(jù)庫名稱 SET RECOVERY SIMPLE WITH NO_WAIT
GO
--將數(shù)據(jù)庫設(shè)置為簡單模式
ALTER DATABASE 要清理的數(shù)據(jù)庫名稱 SET RECOVERY SIMPLE
GO
USE 要清理的數(shù)據(jù)庫名稱
GO
--將數(shù)據(jù)庫的日志收縮為2M
DBCC SHRINKFILE (N'要清理的數(shù)據(jù)庫名稱_log' , 2, TRUNCATEONLY)
GO
USE [master]
GO
ALTER DATABASE 要清理的數(shù)據(jù)庫名稱 SET RECOVERY FULL WITH NO_WAIT
GO
--將數(shù)據(jù)庫恢復(fù)為完整模式
ALTER DATABASE 要清理的數(shù)據(jù)庫名稱 SET RECOVERY FULL
GO
(提示:可以左右滑動(dòng)代碼)
然后點(diǎn)確定即可。
4、新建計(jì)劃
回到新建作業(yè)窗口,點(diǎn)擊左側(cè)菜單里的計(jì)劃—點(diǎn)擊右邊底部的新建...—在彈出的窗口中做如下配置:
上面的作業(yè)計(jì)劃就是你要執(zhí)行上面命令的頻率和具體日期和時(shí)間,上面我們設(shè)置的是每隔1周,在星期日的上午1點(diǎn)執(zhí)行該命令。
這樣一個(gè)定時(shí)清理日志的任務(wù)就完成了。
建好后會(huì)存在你的作業(yè)里面
你也可以隨時(shí)手動(dòng)執(zhí)行上面的作用,只需要右鍵作業(yè)名——作業(yè)開始步驟...,然后就開始執(zhí)行了,如下圖:
這是已經(jīng)執(zhí)行完成的界面。
如果下次需要清理了,一鍵搞定。