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

SQL Server 2005 自動備份至遠端電腦的存儲過程實作

     編輯:SQL Server 2005

需求場景

每日自動完整備份本地資料庫,並透過網路共享複製到另一台伺服器(異地備份),可選擇是否保留本地暫存檔。

核心存儲過程代碼

USE Master;
GO
CREATE PROC [dbo].[bakup_DataBase]
AS
BEGIN
    DECLARE @strPsw VARCHAR(50), @strUsr VARCHAR(50), @strCmdShell VARCHAR(300);
    DECLARE @strDataBaseName VARCHAR(20), @FullFileName VARCHAR(200);
    DECLARE @FileFlag VARCHAR(50), @ToFileName VARCHAR(200);
    DECLARE @SQLStr VARCHAR(500), @SQLStr2 VARCHAR(500), @FlagDel VARCHAR(20);

    -- 檔名規則:YYYY-MM-DD-HH-MM-SS
    SET @FileFlag = REPLACE(REPLACE(CONVERT(CHAR(20), GETDATE(), 20), ':', ''), ' ', '-');

    -- 目標機器認證(需具備寫入共享權限的 Windows 帳號)
    SET @strUsr = 'DOMAIN\administrator';   -- 修改為實際域\用戶
    SET @strPsw = 'password';               -- 修改為實際密碼

    -- 建立網路連線
    SET @strCmdShell = 'net use \\192.168.0.22\c$ ' + @strPsw + ' /user:' + @strUsr;

    -- 要備份的資料庫
    SET @strDataBaseName = 'LilianDB';

    -- 本地暫存路徑(需 SQL Server 服務帳號有寫入權限)
    SET @FullFileName = 'E:\SqlServer自動備份文件\' + 'LilianDB_backup_' + @FileFlag + '.BAK';

    -- 遠端儲存路徑(UNC 路徑)
    SET @ToFileName = '\\192.168.0.22\D$\OneCardBak\';

    -- True=刪除本地暫存檔,False=保留
    SET @FlagDel = 'False';

    -- 複製與刪除指令
    SET @SQLStr = 'copy ' + @FullFileName + ' ' + @ToFileName;
    SET @SQLStr2 = 'del ' + @FullFileName;

    -- 1. 完整備份到本地
    BACKUP DATABASE @strDataBaseName TO DISK = @FullFileName WITH INIT;

    -- 2. 建立網路連線
    EXEC master..xp_cmdshell @strCmdShell;

    -- 3. 複製到遠端
    EXEC master..xp_cmdshell @SQLStr;

    -- 4. 選擇性刪除本地暫存檔
    IF (@FlagDel = 'True')
        EXEC master..xp_cmdshell @SQLStr2;
END;
GO

關鍵設定說明

參數說明注意事項
@strUsr / @strPsw目標機器的 Windows 認證帳號需具備遠端共享寫入權限;建議建立專用備份帳號,最小權限原則
@strCmdShellnet use 建立 IPC$ 連線若目標在同網域且 SQL 服務帳號已有權限,可省略此步
@FullFileName本地暫存完整路徑SQL Server 服務啟動帳號必須有此目錄寫入權限
@ToFileName遠端 UNC 路徑確保防火牆開放 445/139 埠,共享權限正確
xp_cmdshell執行 OS 指令需啟用:EXEC sp_configure 'xp_cmdshell', 1; RECONFIGURE;,用畢建議關閉
WITH INIT覆蓋同名備份檔配合時間戳檔名實際上不會重複,保留以防萬一

排程自動化

  1. 在 SQL Server Agent 建立作業,步驟類型選 T-SQL,命令:EXEC dbo.bakup_DataBase;
  2. 設定排程(如每日 02:00 執行)。
  3. 啟用 Agent 服務並設為自動啟動。
  4. 建議在作業屬性→通知中配置失敗時郵件通知 DBA。

安全與維護建議

  • 備份檔加密:SQL 2014+ 支援 WITH ENCRYPTION;2005 需第三方工具或透明資料庫加密 (TDE) 為 Enterprise 版專屬。
  • 定期驗證備份可還原性(RESTORE VERIFYONLY)。
  • 遠端保留策略:配合 Windows 排程或 PowerShell 清理超過 N 天的舊備份。
  • 監控磁碟空間:本地與遠端皆需預留足夠空間。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved