[SQL]在 SQL Agent 裡面執行 Powershell,取代效果不佳的維護清除工作

利用 Powershell 的腳本來取代維護計畫裡面的「維護清除工作」

今天一個朋友傳來一個訊息,表示在他的 SQL Server 2008 上面,當在維護計畫裡面使用「維護清除工作」的時候,總是要花費非常長的時間,且很多時候沒有正常刪除所需要的檔案,導致當備份檔案過多的時候,造成磁碟空間的不足。

因此剛好人在外面,沒有辦法及時支援來解決這個問題,因此就想到了利用 PowerShell 來解決。為什麼要這樣做呢 ? 首先是當我們使用「維護清除工作」的時候,他會去檢查目錄下的相關檔案,並且去判斷檔頭的資訊 ( 可參考德瑞克老師的文章 - 認識「維護清除工作」所使用的 xp_delete_file;「Maintenance Tasks」) ,因此當目錄下檔案有非常多的時候,檢查起來就耗費不少時間,所以就想說直接拿 Powershell 來處理,因為在處理的時候會非常的快速且方便。

首先我先按照需求寫了一個 Powershell 的腳本,將這個腳本命名為 DeleteOldFiles.ps1

$limit = (Get-Date).AddDays(-7)
$path  = "C:\Demo\Test"

Get-ChildItem -Path $path -Force | Where-Object { !$_.PSIsContainer -and $_.CreationTime -lt $limit } | Remove-Item -Force

接下來我將原本維護計畫所產生的 Job ,在裡面新增一個新的步驟,而在這個步驟裡面,則是利用 Powershell 去執行剛剛那個腳本

這樣就可以用這個來取代原本執行計畫裡面的維護清除工作,順利的解決問題囉。


PS1. 有朋友詢問如果電腦不能執行 Powershell 該怎麼辦呢 ?! 如果真的這樣的話,那或許可以參考以下的指令,用 dos 的方式來處理

forfiles /P D:\Demo\TEST /S /M *.* /D -7 -C "cmd /c del @path"