1. 查詢備份檔內部檔案清單 (取得邏輯名稱)
RESTORE FILELISTONLY FROM DISK = 'E:\Backup\levws.bak';
輸出欄位:LogicalName、PhysicalName、Type (D=資料/L=記錄) 等。
2. 異地還原標準腳本 (WITH MOVE、REPLACE、STATS)
USE master;
GO
RESTORE DATABASE [levws]
FROM DISK = 'E:\levws.bak'
WITH
MOVE 'levws_Data' TO 'E:\Data\levws_Data.mdf', -- 邏輯名 → 新路徑
MOVE 'levws_Log' TO 'E:\Log\levws_Log.ldf',
STATS = 10, -- 每 10% 顯示進度
REPLACE; -- 覆寫同名資料庫
GO
3. 執行結果範例
已處理 374352 頁 (資料檔),1 頁 (記錄檔)。
版本從 539 升級至 655。
RESTORE DATABASE 成功,耗時 205.7 秒 (14.2 MB/秒)。
4. 進階選項說明
NORECOVERY:保持還原中狀態,後續套用差異/記錄備份。
STANDBY = 'undo_file':唯讀待命模式,可查詢。
BLOCKSIZE、BUFFERCOUNT、MAXTRANSFERSIZE:大型資料庫效能調校。
CHECKSUM:驗證備份檔完整性。
5. 常見錯誤與對策
| 錯誤 | 原因 | 解決 |
| 邏輯名稱錯誤 | 未先執行 FILELISTONLY | 務必先查詢邏輯名稱 |
| 目標路徑不存在 | 資料夾未建立 | 預先建立資料夾、確認服務帳號權限 |
| 資料庫正在使用 | 有作用中連線 | ALTER DATABASE SET SINGLE_USER WITH ROLLBACK IMMEDIATE |
| 版本不相容 | 高版本備份還原至低版本 | 不可跨版本降級還原 |
6. 自動化還原腳本範本 (動態取得邏輯名稱)
DECLARE @bak NVARCHAR(260) = N'E:\Backup\DB.bak',
@dataPath NVARCHAR(260) = N'D:\Data\',
@logPath NVARCHAR(260) = N'L:\Log\',
@sql NVARCHAR(MAX);
-- 建立暫存表接收 FILELISTONLY
CREATE TABLE #FileList (
LogicalName NVARCHAR(128), PhysicalName NVARCHAR(260), Type CHAR(1),
FileGroupName NVARCHAR(128), Size NUMERIC(20,0), MaxSize NUMERIC(20,0),
FileId BIGINT, CreateLSN NUMERIC(25,0), DropLSN NUMERIC(25,0),
UniqueId UNIQUEIDENTIFIER, ReadOnlyLSN NUMERIC(25,0),
ReadWriteLSN NUMERIC(25,0), BackupSizeInBytes BIGINT,
SourceBlockSize INT, FileGroupId INT, LogGroupGUID UNIQUEIDENTIFIER,
DifferentialBaseLSN NUMERIC(25,0), DifferentialBaseGUID UNIQUEIDENTIFIER,
IsReadOnly BIT, IsPresent BIT, TDEThumbprint VARBINARY(32)
);
INSERT #FileList EXEC('RESTORE FILELISTONLY FROM DISK = ''' + @bak + '''');
-- 動態產生 MOVE 子句
SELECT @sql = COALESCE(@sql + ', ', 'RESTORE DATABASE [DB] FROM DISK = ''' + @bak + ''' WITH ') +
'MOVE ''' + LogicalName + ''' TO ''' +
CASE Type WHEN 'D' THEN @dataPath ELSE @logPath END +
LogicalName + CASE Type WHEN 'D' THEN '.mdf' ELSE '.ldf' END + ''''
FROM #FileList;
SET @sql += ', STATS = 10, REPLACE;';
EXEC sp_executesql @sql;
DROP TABLE #FileList;
- 上一篇文章: SQL Server 2008 資料庫引擎核心架構與高可用性方案深度解析
- 下一篇文章: SQL Server 2008 Agent 定時作業建立完整教學:從啟用服務到排程設定
Copyright ©
程式碼之家 All Rights Reserved