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

SQL Server Express 2005 自動備份實作:Windows 排程任務 + sqlcmd

     編輯:關於SqlServer

SQL Server Express 缺少 Agent 服務,無法使用維護計畫排程備份。本文提供零成本方案:Windows 排程任務 + sqlcmd + 備份預存程序,實現 Express 版自動完整/差異/記錄備份。

架構概覽

  1. Master 資料庫建立備份預存程序 sp_BackupDatabase
  2. 建立 .sql 指令檔呼叫預存程序
  3. Windows 排程任務定時執行 sqlcmd 執行指令檔

步驟 1:建立備份預存程序 (在 Master 執行)

CREATE PROCEDURE [dbo].[sp_BackupDatabase]
    @databaseName SYSNAME,
    @backupType CHAR(1)  -- F=完整, D=差異, L=記錄
AS
BEGIN
    SET NOCOUNT ON;
    DECLARE @sqlCommand NVARCHAR(1000), @dateTime NVARCHAR(20);

    SELECT @dateTime = REPLACE(CONVERT(VARCHAR, GETDATE(), 111), '/', '') +
                       REPLACE(CONVERT(VARCHAR, GETDATE(), 108), ':', '');

    IF @backupType = 'F'
        SET @sqlCommand = 'BACKUP DATABASE ' + @databaseName +
            ' TO DISK = ''C:\Backup\' + @databaseName + '_Full_' + @dateTime + '.BAK''';
    ELSE IF @backupType = 'D'
        SET @sqlCommand = 'BACKUP DATABASE ' + @databaseName +
            ' TO DISK = ''C:\Backup\' + @databaseName + '_Diff_' + @dateTime + '.BAK'' WITH DIFFERENTIAL';
    ELSE IF @backupType = 'L'
        SET @sqlCommand = 'BACKUP LOG ' + @databaseName +
            ' TO DISK = ''C:\Backup\' + @databaseName + '_Log_' + @dateTime + '.TRN''';

    EXECUTE sp_executesql @sqlCommand;
END

步驟 2:建立指令檔 Backup.sql

儲存路徑:E:\Backup\Backup.sql (可自訂)

EXEC [sp_BackupDatabase] 'YourDatabaseName', 'F';
GO
  • 完整備份:'F'
  • 差異備份:'D' (需先有完整備份)
  • 記錄備份:'L' (資料庫需為完整復原模式)

步驟 3:建立 Windows 排程任務

  1. 開啟「排程工作」精靈 (控制台 → 工作排程器)
  2. 要執行的程式:sqlcmd.exe
    路徑通常為:C:\Program Files\Microsoft SQL Server\90\Tools\Binn\sqlcmd.exe
  3. 執行頻率:每日 / 每週 / 自訂 (建議完整備份每日、記錄備份每小時)
  4. 執行身分:具備 SQL 存取權限的 Windows 帳號 (建議專用服務帳號)
  5. 完成前勾選「開啟此工作的進階屬性」
  6. 進階屬性 → 「執行」欄位修改為:
    sqlcmd -S .\SQLEXPRESS -E -i E:\Backup\Backup.sql

參數說明:

  • -S .\SQLEXPRESS:具名執行個體 (預設 Express 實例名)
  • -E:Windows 整合驗證
  • -i:輸入指令檔路徑

步驟 4:驗證與維護

  • 手動執行排程任務測試,檢查 C:\Backup\ 產生 .BAK/.TRN
  • 定期清理舊備份 (可另建清理排程,參考 FORFILES 文章)
  • 監控備份大小與耗時,異常時發送通知
  • 備份檔案建議複製至異地/雲端儲存

進階擴充

  • 多資料庫:指令檔中多行 EXEC sp_BackupDatabase ...
  • 參數化:使用 sqlcmd -v DBName="MyDB" Type="F" 搭配指令檔變數 $(DBName)
  • 錯誤處理:預存程序加入 TRY...CATCH 寫入事件日誌
  • 報表:查詢 msdb.dbo.backupset 產生備份狀態報表

結語

無 Agent 不代表無自動備份。Windows 排程任務 + sqlcmd 是 Express 版最輕量、最穩定的備份自動化方案,零授權成本、零額外軟體、完全可控。建議納入標準部署 SOP,確保每台 Express 實例上線即具備備份保護。

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