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

SQL Server 擴展預存程序 xp_cmdshell 實現跨機器遠端備份與還原

     編輯:關於SqlServer

場景與架構

  • 主伺服器:mainserver (SQL Server 2000),需備份資料庫 msdb
  • 備份目標機:david (Win2K),共享資料夾 E:\test,帳號 domain\zf / 123
  • 工具:查詢分析器 + CMD,核心利用 xp_cmdshell 執行 OS 指令

四步驟實作流程

1. 建立本地共享資料夾

-- 在 SQL Server 執行
EXEC master..xp_cmdshell 'net share test=E:\test'
-- 或呼叫 NetShareAdd API

2. 建立跨機器信任連線

EXEC master..xp_cmdshell 'net use \\david\test 123 /user:domain\zf'
  • xp_cmdshell:SQL Server 擴展預存程序,以命令列方式執行 OS 指令並回傳文字輸出
  • net use:Windows 指令,建立/斷開共享資源連線

3. 執行備份到遠端共享

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

輸出範例:

已處理 1376 頁... 已處理 1 頁...
BACKUP DATABASE 成功處理 1377 頁,耗時 3.653 秒 (3.086 MB/秒)

4. 清理共享資源

EXEC master..xp_cmdshell 'net share test /delete'
-- 或呼叫 NetShareDel API

還原操作

將步驟 3 語法改為:

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

關鍵風險與防範

⚠ xp_cmdshell 安全警示
  • 僅 sysadmin 固定伺服器角色成員可呼叫
  • 屬 SQL Server 經典安全隱患,許多 DBA 選擇刪除或停用 (sp_dropextendedproc 'xp_cmdshell')
  • 若業務必須使用,請:
    ① 限制呼叫者權限(簽署憑證/模組簽名)
    ② 審計所有呼叫記錄
    ③ 考慮改用 SQL Server Agent Proxy + CmdExec 作業步驟

適用版本

SQL Server 2000 / 2005 / 2008 (需啟用「xp_cmdshell」進階選項)。

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