此預存程序 sp_RestoreDB 可自動掃描指定資料夾下的 .bak 檔案,解析備份標頭資訊,並還原每個資料庫的最新完整備份。支援指定資料庫清單、自訂還原路徑、自動終結現有連線等功能。
| 參數 | 型別 | 預設值 | 說明 |
|---|---|---|---|
@Path | nvarchar(1000) | - | 備份檔案資料夾路徑(如 G:\) |
@DBs | nvarchar(2000) | NULL | 指定要還原的資料庫,逗號分隔(如 HR,SalesOrder);NULL 表示還原所有 |
@DefaultPath | nvarchar(2000) | NULL | 還原後資料/記錄檔存放路徑;NULL 時取系統預設路徑 |
xp_cmdshell 執行 dir /B/o:d 取得資料夾下所有 .bak 檔案(依日期排序)。RESTORE HEADERONLY 取得備份集中繼資料,存入暫存表 #BackDB。BackupType = 1)且符合 @DBs 指定的資料庫。BackupFinishDate)及其最高 Position。KILL 所有連線,再執行 RESTORE DATABASE ... WITH REPLACE。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;)。