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