首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

使用 FORFILES 指令自動清理 SQL Server 備份檔案

     編輯:關於SqlServer

資料庫備份檔案日積月累會佔滿磁碟,需定期清理舊備份。除維護計畫外,可利用 Windows 內建 FORFILES 指令搭配 xp_cmdshell 在 T-SQL 中直接執行刪除,靈活且無需外部排程工具。

FORFILES 參數與變數速查

常用參數

參數說明
/P搜尋路徑
/M檔案搜尋遮罩 (預設 *.*)
/S遞迴搜尋子目錄
/C對每個符合檔案執行的命令,需雙引號括住,預設 "cmd /c echo @file"
/D依最後修改日期篩選:+dd/MM/yyyy (含當日之後) 或 -N (N 天前)

可用變數 (在 /C 命令中使用)

變數說明
@FILE完整檔名
@FNAME不含副檔名檔名
@EXT副檔名
@PATH絕對路徑
@RELPATH相對路徑
@ISDIR是否為目錄 (TRUE/FALSE)
@FSIZE檔案大小 (Bytes)
@FDATE最後修改日期
@FTIME最後修改時間

實用刪除範例 (在 T-SQL 中執行)

所有範例均使用 /Q (安靜模式) 與 /F (強制刪除唯讀檔)。

範例 1:刪除指定日期後的 .sql 檔

EXEC xp_cmdshell 'FORFILES /P C:\BACKUP /S /M *.sql /D +10/18/2008 /C "CMD /C DEL /Q /F @FILE"'

範例 2:刪除 30 天前的 .sql 檔

EXEC xp_cmdshell 'FORFILES /P C:\BACKUP /S /M *.sql /D -30 /C "CMD /C DEL /Q /F @FILE"'

範例 3:刪除 30 天前且檔名以 F_ 開頭的 .sql 檔

EXEC xp_cmdshell 'FORFILES /P C:\BACKUP /S /M F_*.sql /D -30 /C "CMD /C DEL /Q /F @FILE"'

進階應用建議

  • 建立預存程序封裝:將路徑、天數、檔案模式參數化,方便維護計畫呼叫。
  • 記錄刪除日誌:在 /C 命令中加入 ECHO @FILE @FDATE @FTIME >> C:\Logs\BackupCleanup.log 留存稽核軌跡。
  • 搭配備份類型命名:如 DBName_Full_*.bak、DBName_Diff_*.bak、DBName_Log_*.trn,可針對不同備份類型設定不同保留天數。
  • 安全性注意:xp_cmdshell 預設停用,啟用時需嚴格限制執行權限 (僅 sysadmin),並審計用法。

替代方案比較

FORFILES 方案適合「不想額外部署腳本檔、需在 T-SQL 內動態決定清理條件」的情境。建議搭配 Agent 作業定期執行,並保留刪除日誌供稽核。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
方案優點缺點
維護計畫清理任務GUI 設定、內建、支援子計畫彈性較低、難以針對複雜命名規則
PowerShell 腳本 + Agent 作業功能強大、物件導向、易除錯需額外撰寫/部署 .ps1 檔
FORFILES + xp_cmdshell零部署、純 T-SQL 可控、參數靈活依賴 xp_cmdshell、錯誤處理較弱