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

SQL Server 簡易自動備份腳本:依星期三區分檔名的每日備份範例

     編輯:關於SqlServer

前言

針對單一資料庫、簡單備份需求,不需完整框架時,一段精簡的 T-SQL 腳本搭配 SQL Server Agent 作業即可實現自動化。本文提供一個範例:週三完整備份、其他日子覆蓋式每日備份,展示動態檔名、備份選項與部署方式。

完整腳本


DECLARE @FileName VARCHAR(240);

-- 1. 依星期決定檔名
IF DATENAME(WEEKDAY, GETDATE()) = N'星期三'
    SELECT @FileName = N'Db_星期三.bak';
ELSE
    SELECT @FileName = N'DbAutoBack.bak';

-- 2. 組合完整路徑
SET @FileName = N'E:\DbBackUp\' + @FileName;

-- 3. 執行備份
BACKUP DATABASE CC3
TO DISK = @FileName
WITH FORMAT;  -- 覆蓋現有媒體集,建立新備份組

關鍵點解析

元素 說明
DATENAME(WEEKDAY, GETDATE()) 回傳當地語言的星期名稱 (如 '星期三', 'Wednesday')。注意:受 SET LANGUAGE / 伺服器預設語言影響,跨語言環境建議改用 DATEPART(WEEKDAY, GETDATE()) = 4 (依 DATEFIRST 設定,預設週日=1,週三=4)。
動態檔名 週三產生 Db_星期三.bak (可作為週末離場備份保留),其他日覆蓋 DbAutoBack.bak (每日最新)。
WITH FORMAT 建立新媒體集,覆蓋舊備份標頭。不加 FORMAT 時預設 NOINIT 追加至現有媒體集,導致單一 .bak 檔包含多個備份組,還原需指定 FILE = n。
備份目錄 E:\DbBackUp\ 必須預先建立,SQL Server 服務帳戶需具備寫入權限 (NTFS Modify)。

部署為 Agent 作業

  1. SSMS → SQL Server Agent → 作業 → 新增作業。
  2. 一般:名稱 每日自動備份_CC3、擁有者 sa、類別 資料庫維護。
  3. 步驟:新增 → 類型 Transact-SQL 指令碼、資料庫 master、命令貼上上述腳本。
  4. 排程:新增 → 類型 週期性、頻率 每日、每天 1 次、啟用日期、每日頻率 發生一次 時間 02:00:00 (離峰時段)。
  5. 通知/進階:可設定失敗寄信給 DBA。

進階擴充建議


-- 加入壓縮、校驗和、統計資料 (SQL 2008+)
BACKUP DATABASE CC3
TO DISK = @FileName
WITH FORMAT, COMPRESSION, CHECKSUM, STATS = 10;

-- 加入日期時間戳記,避免覆蓋 (保留多天)
DECLARE @FileName VARCHAR(260) = 'E:\DbBackUp\CC3_' + CONVERT(VARCHAR, GETDATE(), 112) + '_' + REPLACE(CONVERT(VARCHAR, GETDATE(), 108), ':', '') + '.bak';
BACKUP DATABASE CC3 TO DISK = @FileName WITH COMPRESSION, CHECKSUM;

-- 結合清理舊檔 (需啟用 xp_cmdshell 或用維護計畫/PowerShell)
-- EXEC xp_cmdshell 'forfiles /p "E:\DbBackUp" /m "CC3_*.bak" /d -7 /c "cmd /c del @path"';

結語

簡單腳本 + Agent 作業 = 低成本可靠自動備份。核心在於:動態檔名區分保留策略、WITH FORMAT 確保單一備份組、離峰時段排程、服務帳戶權限正確。隨著資料成長,建議遷移至參數化儲存程序框架 (參考 p_backupdb 完整版),支援多資料庫、差異/記錄備份、驗證與集中監控。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved