Express 版無 SQL Agent,需自行排程。目標:每日備份、保留 14 天、自動清理舊檔、記錄日誌。
BackupDB.sql:動態產生時間戳檔名,逐一備份使用者資料庫。DeleteDB.vbs:掃描備份目錄,刪除 14 天前檔案,寫入 Log.txt。Schedule.cmd:呼叫 sqlcmd 執行備份,再呼叫 cscript 執行清理。Schedule.cmd。-- BackupDB.sql 關鍵邏輯
DECLARE @dateString CHAR(12) = REPLACE(CONVERT(CHAR(8), GETDATE(), 112), '/', '')
+ REPLACE(CONVERT(CHAR(5), GETDATE(), 108), ':', '');
DECLARE @sql NVARCHAR(MAX), @dbname SYSNAME;
DECLARE cur CURSOR FOR SELECT name FROM sys.databases WHERE database_id > 4; -- 排除系統庫
OPEN cur;
FETCH NEXT FROM cur INTO @dbname;
WHILE @@FETCH_STATUS = 0 BEGIN
SET @sql = N'BACKUP DATABASE ' + QUOTENAME(@dbname) +
N' TO DISK = N''D:\SQLTEST\' + @dbname + N'_' + @dateString + N'.BAK'' WITH INIT, COMPRESSION';
EXEC (@sql);
FETCH NEXT FROM cur INTO @dbname;
END
CLOSE cur; DEALLOCATE cur;
' DeleteDB.vbs 關鍵邏輯
Set fso = CreateObject("Scripting.FileSystemObject")
Set folder = fso.GetFolder("D:\SQLTEST\")
For Each file In folder.Files
If DateDiff("d", file.DateLastModified, Now) > 14 Then
file.Delete
logFile.WriteLine "Deleted: " & file.Name
End If
Next
WITH COMPRESSION) 節省空間(Express 2008 R2+ 支援)。