手動備份既繁瑣又易忘,善用 SQL Server Agent 作業 即可建立全自動、可監控、支援動態檔名的備份機制。
sa。Transact-SQL 指令碼master(或目標 DB)BACKUP DATABASE [YourDB] TO DISK = N'F:\Backup\YourDB.bak'
WITH NOINIT, NOUNLOAD, NAME = N'DailyBackup', NOSKIP, STATS = 10, NOFORMAT;
修改步驟指令為動態 SQL:
DECLARE @FileName NVARCHAR(200);
SET @FileName = N'F:\Backup\YourDB_' + CONVERT(CHAR(8), GETDATE(), 112) + N'.bak';
PRINT @FileName;
BACKUP DATABASE [YourDB] TO DISK = @FileName
WITH NOINIT, NOUNLOAD, NAME = N'DailyBackup', NOSKIP, STATS = 10, NOFORMAT;
產生檔名如 YourDB_20240506.bak,便於保留多日歷史備份。
同一作業新增第二步驟(PowerShell / xp_cmdshell 需啟用):
-- PowerShell 方式(需 SQL Server 2008+ / xp_cmdshell 啟用)
EXEC xp_cmdshell 'powershell -command "Get-ChildItem F:\Backup\YourDB_*.bak | Where-Object {$_.LastWriteTime -lt (Get-Date).AddDays(-7)} | Remove-Item -Force"';
或建立獨立維護計畫/作業執行清理,避免備份步驟失敗影響清理。
RESTORE VERIFYONLY FROM DISK = '...' 驗證備份檔可用性。| 現象 | 原因 | 對策 |
|---|---|---|
| 作業不執行 | Agent 服務未啟動 | 服務設為自動並啟動 |
| 備份失敗「存取被拒」 | SQL 服務帳號無資料夾寫入權限 | 授予服務帳號修改權限 |
| 磁碟空間不足 | 未清理舊備份 | 加入清理步驟或啟用磁碟配額監控 |
| 動態檔名報錯 | 路徑含單引號/特殊字元 | 使用雙引號包裹或參數化 |
建立完成後,資料庫備份將全自動化,DBA 僅需定期抽查歷程與還原演練即可高枕無憂。