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

SQL Server 2005 自動還原資料夾下最新備份的預存程序

     編輯:關於SqlServer

功能說明

此預存程序 sp_RestoreDB 可自動掃描指定資料夾下的 .bak 檔案,解析備份標頭資訊,並還原每個資料庫的最新完整備份。支援指定資料庫清單、自訂還原路徑、自動終結現有連線等功能。

參數說明

參數型別預設值說明
@Pathnvarchar(1000)-備份檔案資料夾路徑(如 G:\)
@DBsnvarchar(2000)NULL指定要還原的資料庫,逗號分隔(如 HR,SalesOrder);NULL 表示還原所有
@DefaultPathnvarchar(2000)NULL還原後資料/記錄檔存放路徑;NULL 時取系統預設路徑

核心邏輯

  1. 使用 xp_cmdshell 執行 dir /B/o:d 取得資料夾下所有 .bak 檔案(依日期排序)。
  2. 對每個備份檔執行 RESTORE HEADERONLY 取得備份集中繼資料,存入暫存表 #BackDB。
  3. 過濾:僅保留完整備份(BackupType = 1)且符合 @DBs 指定的資料庫。
  4. 每個資料庫僅保留最新一筆備份(最大 BackupFinishDate)及其最高 Position。
  5. 若目標資料庫已存在,先 KILL 所有連線,再執行 RESTORE DATABASE ... WITH REPLACE。
  6. 若資料庫不存在,改用 RESTORE FILELISTONLY 取得邏輯檔名,搭配 MOVE 子句還原至 @DefaultPath。

完整程式碼

USE Master
GO
IF OBJECT_ID('sp_RestoreDB') IS NOT NULL
    DROP PROCEDURE sp_RestoreDB
GO

CREATE PROCEDURE sp_RestoreDB
(
    @Path nvarchar(1000),
    @DBs nvarchar(2000) = NULL,
    @DefaultPath nvarchar(2000) = NULL
)
AS
BEGIN
    SET NOCOUNT ON;
    -- 參數驗證、路徑檢查、暫存表建立略...
    -- 動態 SQL 建構 RESTORE HEADERONLY / FILELISTONLY / DATABASE
    -- 詳細程式碼請參考原始內容
END
GO

-- 呼叫範例
-- EXEC sp_RestoreDB @Path = 'G:\'
-- EXEC sp_RestoreDB @Path = 'G:\', @DBs = 'HR,OChart'
-- EXEC sp_RestoreDB @Path = 'G:\', @DBs = 'HR,OChart', @DefaultPath = 'C:\'

注意事項

  • 需啟用 xp_cmdshell(sp_configure 'show advanced options',1; RECONFIGURE; sp_configure 'xp_cmdshell',1; RECONFIGURE;)。
  • 服務帳戶需具備備份資料夾讀取權限。
  • 僅處理完整備份,差異/記錄備份不在本程序範圍內。
  • 還原前會強制中斷現有連線,請謹慎在生產環境使用。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved