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

SQL Server 擴展存儲過程實現跨機器遠程備份與還原

     編輯:關於SqlServer

利用 SQL Server 擴展存儲過程 xp_cmdshell 配合 Windows net share / net use 命令,可在無需專業備份軟件的情況下,實現數據庫從主服務器直接備份到遠程機器磁盤,並支持遠程還原。本文以實戰案例演示全流程操作。

環境準備

項目值
主服務器實例mainserver
目標數據庫msdb
遠程機器名david
遠程用戶/密碼zf / 123
域名domain
遠程備份目錄E:\test

四步走操作流程

步驟 1:建立遠程共享資料夾

在遠程機器(david)執行:

net share test=E:\test

或調用 API NetShareAdd。此步驟將本地目錄發布為網絡共享 \\david\test。

步驟 2:建立主服務器到遠程共享的信任連接

在主服務器(mainserver)查詢分析器執行:

EXEC master..xp_cmdshell 'net use \\david\test 123 /user:domain\zf'
  • xp_cmdshell:以系統命令行方式執行字符串,需 sysadmin 權限。
  • net use:映射網絡驅動器,建立持久連接。

步驟 3:執行遠程備份 / 還原

備份:

BACKUP DATABASE msdb TO DISK='\\david\test\msdb.bak'

還原:

RESTORE DATABASE msdb FROM DISK='\\david\test\msdb.bak'

備份文件直接寫入遠程共享路徑,無需本地落地再傳輸。

步驟 4:清理共享連接(安全收尾)

-- 刪除主服務器映射連接
EXEC master..xp_cmdshell 'net use \\david\test /delete'

-- 刪除遠程機器共享
net share test /delete

實戰輸出示例

已處理 1376 頁,屬於數據庫 'msdb' 文件 'MSDBData' (文件 1)。
已處理 1 頁,屬於數據庫 'msdb' 文件 'MSDBLog' (文件 1)。
BACKUP DATABASE 成功處理 1377 頁,耗時 3.653 秒 (3.086 MB/秒)。

⚠️ 關鍵安全警示

  1. 權限門檻:xp_cmdshell 僅限 sysadmin 角色調用,權限極高。
  2. 攻擊面:若被惡意利用,可執行任意系統命令(格式化磁盤、創建用戶、植入木馬等)。
  3. 最佳實踐:
    • 生產環境禁用 xp_cmdshell(sp_configure 'xp_cmdshell', 0; RECONFIGURE)。
    • 若必須使用,封裝為簽名存儲過程,僅授權特定低權限用戶執行該過程。
    • 備份網絡路徑採用專用備份賬號,最小權限原則,僅具備目標共享寫入權限。
    • 啟用審計,記錄所有 xp_cmdshell 調用日志。

現代替代方案(推薦)

  • 維護計劃 / SQL Agent 作業:備份至本地,再由專門文件同步工具(Robocopy、rsync、Azure Blob、S3)異步推送至遠端。
  • Always On 可用性組 / 日志傳送:企業級高可用與異地災備方案。
  • PowerShell + SMO / dbatools:腳本化備份與異地複製,可控性更強。

本文方案適用於臨時、一次性、無高級版授權的輕量級跨機備份場景;生產核心業務請採用正規備份架構。

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