資料庫還原速度受備份檔讀取、資料/記錄檔建立與寫入、復原 (Redo/Undo) 三階段影響。除備份加速通用的磁碟 I/O 優化外,SQL Server 2005+ 引入瞬間檔案初始化、還原模式 (NORECOVERY/STANDBY) 等關鍵機制,能大幅縮短還原視窗。
還原新資料庫時,SQL Server 必須建立資料檔 (.mdf/.ndf) 與記錄檔 (.ldf)。預設行為:
大型資料庫 (如 320 GB) 歸零階段可耗費 30 分鐘以上,進度條毫無動靜。
secpol.msc (本機安全性原則)。
| 場景 | 還原耗時 | 說明 |
|---|---|---|
| 未啟用瞬間初始化 | 5 分 05 秒 | 資料檔 + 記錄檔皆需歸零 |
| 啟用瞬間初始化 | 1 分 01 秒 | 僅記錄檔需歸零,資料檔瞬間完成 |
CREATE DATABASE test_InstantInit ON
PRIMARY (name = 'test_InstantInit', filename = 'K:\temp\test_InstantInit.mdf', size = 1GB)
LOG ON (name = 'test_InstantInit_log', filename = 'K:\temp\test_InstantInit.ldf', size = 1MB);
DROP DATABASE test_InstantInit;
若在幾秒內完成,即代表瞬間初始化已生效。
跳過歸零意味著新配置空間可能殘留舊資料。若磁碟曾存放敏感資料,新資料庫頁面未覆蓋的區塊可能被
DBCC PAGE或十六進位編輯器讀取。風險評估:僅限「已刪除資料庫的舊空間被重新配置」情境,且需具備系統管理員權限才能存取頁面原始內容。高安全環境請權衡啟用與否。
實測對比 (覆蓋還原 vs. 全新還原):
| 操作 | 耗時 | 說明 |
|---|---|---|
| 還原 1 GB 資料庫 (全新) | 0:40 | 建立新檔案,需歸零 (未啟用瞬間初始化) |
| 還原 1 GB,覆蓋既有 2 GB 同名資料庫 | 0:29 | 既有檔案較大,直接覆寫,省去部份歸零 |
| 還原 2 GB 資料庫 (全新) | 1:08 | 建立較大新檔案 |
| 還原 2 GB,覆蓋既有 1 GB 同名資料庫 | 0:56 | 既有檔案較小,需擴展並歸零新增部分 |
結論:覆蓋還原 (WITH REPLACE) 通常較快,因重用既有檔案空間。但若使用 MOVE 選項重新定位檔案,則與是否預先刪除無關,皆需建立新檔案。
| 模式 | 資料庫狀態 | 可讀性 | 適用場景 |
|---|---|---|---|
NORECOVERY |
Restoring (恢復中) | 不可讀 | 後續還原差異/記錄備份、Log Shipping 主要資料庫 |
STANDBY |
Standby / Read-Only | 可讀 | 報表伺服器、Log Shipping 次要資料庫需查詢 |
UNDO FILE,記錄未認可交易的回滾操作,以便後續續原。

-- 1. 還原完整備份
RESTORE DATABASE mydb FROM DISK = 'full.bak' WITH NORECOVERY;
-- 2. 依序還原差異/記錄備份,全程 NORECOVERY
RESTORE LOG mydb FROM DISK = 'log1.trn' WITH NORECOVERY;
RESTORE LOG mydb FROM DISK = 'log2.trn' WITH NORECOVERY;
...
-- 3. 所有記錄還原完成後,一次切換到 STANDBY 唯讀模式
RESTORE DATABASE mydb WITH STANDBY = 'G:\data\mydb\mydb_und.dat';
優勢:只建立一次回復檔,避免多次記錄備份各自建立回復檔的開銷,大幅加速多檔案還原流程。
RESTORE ... FROM DISK='file1.bak', DISK='file2.bak'...,啟用多讀取執行緒。資料庫還原加速的核心在於瞬間檔案初始化 (省去資料檔歸零) 與還原模式策略選擇 (NORECOVERY 串接多檔案,最後一次切 STANDBY)。搭配備份檔放置於高速獨立儲存、多檔案平行讀取,可將大型資料庫還原時間壓縮至原本的 1/5 甚至更低,是縮短 RTO (復原時間目標) 的關鍵技術。