搜尋本站文章

2010-12-10

認識「維護清除工作」所使用的 xp_delete_file;「Maintenance Tasks」

在 SQL Server 2005 版本上提供了「維護計畫(Maintenance Plan)」,其中所使用的「維護清除工作(Maintenance Tasks)」,具備以下的功能:
移除與維護計劃相關的舊檔案 (包括維護計劃和資料庫備份檔案所建立的文字報表)。

請參考下圖所示:





經過測試 xp_delete_file 這個擴充預存程序,目前可以支援刪除的附檔名,例如:bak、trn、log 等。
此外,可能是為了安全起見,此 xp_delete_file 擴充預存程序可能會檢查檔案的檔頭資訊,確認是否為維護計劃所產生的相關舊檔案。
如果你是自行將某個檔案的附檔名,改為 bak,好像也是無法利用此程式來刪除之。

請參考以下的範例程式碼:
--01 範例說明:
EXECUTE master.dbo.xp_delete_file 
 0, -- 0 表示:刪除[備份檔案]。1 表示刪除[維護計畫文字報表]
 N'\\NAS02\dbbackup\sql2008', -- 主要目錄的完整路徑
 N'trn', -- 刪除檔案的副檔名,僅需副檔名即可,例如:bak,若是要全刪除資料夾內的檔案,填入: * 。
 N'12/12/2010 13:29:51', -- 刪除早於下列時限的檔案
 1 -- 1 表示:要包含第一層的子資料夾,若是沒寫,就不會包含第一層的子資料夾。

--02 刪除指定資料夾內的備份檔案
EXECUTE master.dbo.xp_delete_file 1, N'C:\myAdmin\Device', N'bak'


或許會有朋友詢問,為何不使用 xp_cmdshell 擴充預存程序呢?
可能的原因是:在某些環境上,系統設定不可以使用此擴充預存程序。


根據預設,xp_cmdshell 選項會在新安裝上「停用」,而且可以使用以原則為基礎的管理或執行 sp_configure 系統預存程序來啟用。


使用這個 xp_delete_file 這個擴充預存程序,或許可以解決部份問題。


在 SQL Server 2005 版本上,此「維護清除工作」之功能是有 Bug的,請升級到 SQL Server 2005 Service Pack 2 來修正。


參考資料:
xp_delete_file
http://sqlblog.com/blogs/andy_leonard/archive/2009/03/11/xp-delete-file.aspx

清除工作不會刪除資料庫維護計劃報表,在您安裝 SQL Server 2005 Service Pack 2
http://support.microsoft.com/kb/938085

xp_cmdshell 選項
http://msdn.microsoft.com/zh-tw/library/ms190693.aspx