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

SQL Server 2005 自動備份腳本:單一最新版本覆蓋模式

     編輯:SQL Server 2005

本文提供一個 SQL Server 2005 自動備份腳本,採「永遠只保留最新一份」覆蓋模式,適用於測試環境、開發機、或備份儲存空間有限的場景。腳本包含:截斷記錄檔、收縮資料庫、動態路徑建構、備份裝置管理、完整備份執行。

腳本完整程式碼

DECLARE @DBName VARCHAR(200);
SET @DBName = 'ReportServer$SQL2005';  -- 修改為目標資料庫名稱

-- 1. 截斷交易記錄檔 (簡單復原模式下等同 CHECKPOINT)
DUMP TRANSACTION @DBName WITH NO_LOG;
-- 注意:SQL 2008+ 已移除 DUMP TRANSACTION,改用 ALTER DATABASE ... SET RECOVERY SIMPLE + CHECKPOINT

-- 2. 收縮資料庫釋放空間
DBCC SHRINKDATABASE (@DBName, TRUNCATEONLY);

-- 3. 設定備份路徑參數
USE master;
DECLARE @Version VARCHAR(20), @BasePath VARCHAR(200), @BakPath VARCHAR(200);
SET @BasePath = 'F:\tmp';                    -- 備份根目錄 (需 SQL 服務帳戶寫入權限)
SET @Version = 'V6.1';                       -- 版本子目錄
SET @BakPath = @BasePath + '\' + @Version + '\Db.Bak';  -- 完整備份檔路徑

-- 4. 管理備份裝置 (存在則刪除實體檔與邏輯裝置)
IF EXISTS (SELECT * FROM sys.backup_devices WHERE name = 'CTOS_DB_Bak')
BEGIN
    EXEC sp_dropdevice 'CTOS_DB_Bak';
    
    -- 刪除實體備份檔 (需啟用 xp_cmdshell)
    DECLARE @tmpcmd VARCHAR(100);
    SET @tmpcmd = 'del ' + @BakPath;
    EXEC sp_configure 'show advanced options', 1; RECONFIGURE;
    EXEC sp_configure 'xp_cmdshell', 1; RECONFIGURE;
    EXEC master..xp_cmdshell @tmpcmd;
    EXEC sp_configure 'xp_cmdshell', 0; RECONFIGURE;
    EXEC sp_configure 'show advanced options', 0; RECONFIGURE;
END

-- 5. 建立備份裝置並執行完整備份
EXEC sp_addumpdevice 'disk', 'CTOS_DB_Bak', @BakPath;
BACKUP DATABASE @DBName TO CTOS_DB_Bak;

關鍵參數說明

參數用途修改建議
@DBName目標資料庫名稱必修改
@BasePath備份根目錄確保磁碟空間、SQL 服務帳戶有寫入權限
@Version版本子目錄可改為日期格式 CONVERT(VARCHAR(10), GETDATE(), 112) 實現每日保留

排程部署方式

  1. 另存為 AutoBackup.sql
  2. SQL Server Agent → 作業 → 新增作業
    • 步驟:類型 Transact-SQL 指令碼,資料庫 master,命令輸入腳本內容
    • 排程:每日/每週/自訂
    • 通知:失敗寄信給 DBA
  3. 或使用 sqlcmd -S . -i AutoBackup.sql 搭配 Windows 排程器

進階改良方向 (生產環境建議)

  • 每日保留多份:檔名加入日期 Db_YYYYMMDD.bak,配合清理舊檔邏輯
  • 差異/記錄備份:完整備份 + 定時差異備份 + 高頻記錄備份 (RPO/RTO 需求)
  • 壓縮備份:SQL 2008+ WITH COMPRESSION,2005 需第三方工具
  • 加密備份:SQL 2014+ WITH ENCRYPTION
  • 驗證備份:RESTORE VERIFYONLY FROM DISK = ...
  • 異地複製:備份完成後複製至遠端/雲端儲存
  • 監控告警:備份失敗、耗時異常、檔案大小異常觸發告警

版本相容性注意

指令SQL 2005SQL 2008+
DUMP TRANSACTION ... NO_LOG支援已移除,改用 ALTER DATABASE ... SET RECOVERY SIMPLE; CHECKPOINT;
sp_addumpdevice支援支援 (但建議直接 BACKUP TO DISK=...)
xp_cmdshell預設關閉預設關閉

安全性提醒

  • xp_cmdshell 極高風險,僅在受控環境短暫啟用,用畢立即關閉
  • 生產環境建議改用 BACKUP DATABASE ... TO DISK = @path WITH INIT, FORMAT 直接指定檔案路徑,無需備份裝置與 xp_cmdshell
  • 備份檔含敏感資料,檔案層級需加密 (EFS/BitLocker/第三方)

現代化寫法參考 (SQL 2008+ 推薦)

DECLARE @DBName SYSNAME = 'MyDB';
DECLARE @Path NVARCHAR(500) = 'F:\Backup\MyDB_' + CONVERT(CHAR(8), GETDATE(), 112) + '.bak';

BACKUP DATABASE @DBName 
TO DISK = @Path 
WITH INIT, COMPRESSION, CHECKSUM, STATS = 10;
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved