KB-Inside SQL 2005 Maintenance Cleanup Task

之前我有介紹過在SQL 2005的維護計劃中,若要清除過期檔案得另外加設Maintenance Cleanup Task

後來接到網友回應,提到資料庫備份到獨立子目錄時(Create a sub-directory for each database)的清理問題,由於原先也沒深入研究過,就順勢剖析了一下Maintenance Cleanup Task的原理。

下圖是Maintenance Cleanup Task的設定畫面,如果你備份時選取了Create a sub-directory for each database,在此就要加選"Include first-level subfolders"。

勾選後,SQL 2005會逐一清查X:\Backup下的各個子目錄,尋找其中過期的bak檔加以刪除。

我們可以用Process Monitor證明這一點! 下圖中,橘色區是選取"Include first-level subfolder"的情形,sqlserver會逐一檢查X:\Backup下的msdb, master, model(搜索範圍甚至到了由其他程式建立的Mail資料夾,不過我測試的結果,它會識別備份檔的命名規則,不致濫殺無辜)的*.bak,下方黃色區則可看出sqlserver只檢查了X:\Backup\*.bak。測試的結果

Maintenance Cleanup Task的設定畫面中,有個View T-SQL,按下後可以發現清理工作其實是由一隻文件沒記載的Stored Procedure所執行的:

EXECUTE master.dbo.xp_delete_file 0,N'X:\Backup',N'bak',N'07/13/2007 08:00:00',1

Include first-level subfolders選項會決定後方是否加上參數1。知道了原理,我們還可以衍生一些花式用法,例如: 只保留八小時的檔案之類的,哈!

歡迎推文分享:
Published 13 July 2007 11:22 AM 由 Jeffrey
Filed under: ,
Views: 9,720



意見

# HKC said on 15 July, 2007 06:43 PM

太感謝你了...:P

你的看法呢?

(必要的) 
(必要的) 
(選擇性的)
(必要的) 
(提醒: 因快取機制,您的留言幾分鐘後才會顯示在網站,請耐心稍候)

5 + 3 =

搜尋

Go

<July 2007>
SunMonTueWedThuFriSat
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234
 
RSS
創用 CC 授權條款
【廣告】
twMVC
最新回應

Tags 分類檢視
關於作者

一個醉心技術又酷愛分享的Coding魔人,十年的IT職場生涯,寫過系統、管過專案, 也帶過團隊,最後還是無怨無悔地選擇了技術鑽研這條路,近年來則以做一個"有為的中年人"自許。

文章典藏
其他功能

這個部落格


Syndication