GUI:SSMS → 右鍵資料庫 → 工作 → 還原 → 資料庫 → 選取備份裝置/檔案。
T-SQL:
RESTORE DATABASE TestDB
FROM DISK = 'C:\Backup\TestDB.bak'
WITH REPLACE, -- 覆寫現有資料庫
MOVE 'TestDB_Data' TO 'C:\Data\TestDB.mdf',
MOVE 'TestDB_Log' TO 'C:\Log\TestDB.ldf',
STATS = 5; -- 顯示進度
情境:伺服器損壞但資料/記錄檔完好,新伺服器快速掛載。
-- 老式 (已棄用但仍支援)
EXEC sp_attach_db @dbname = 'PubDB',
@filename1 = 'C:\Data\PubDB.mdf',
@filename2 = 'C:\Data\PubDB_log.ldf';
-- 新式 (SQL Server 2005+ 推薦)
CREATE DATABASE PubDB ON
(FILENAME = 'C:\Data\PubDB.mdf'),
(FILENAME = 'C:\Data\PubDB_log.ldf')
FOR ATTACH;
風險:若資料庫關閉不正常 (Dirty Shutdown),附加可能失敗或進入 SUSPECT 狀態。
EXEC sp_attach_single_file_db @dbname = 'PubDB',
@physname = 'C:\Data\PubDB.mdf';
SQL Server 會自動重建記錄檔 (預設 1MB,位於原路徑或預設資料目錄)。注意:未提交的交易將遺失,資料庫可能不一致。
ALTER DATABASE CorruptDB SET EMERGENCY;
ALTER DATABASE CorruptDB SET SINGLE_USER;
DBCC CHECKDB('CorruptDB', REPAIR_ALLOW_DATA_LOSS) WITH ALL_ERRORMSGS;
ALTER DATABASE CorruptDB SET MULTI_USER;
最後手段,可能造成資料遺失,務必先複製 MDF/LDF 備份。
| 情境 | 推薦方法 | RPO/RTO |
|---|---|---|
| 定期備份完整、需求點還原 | RESTORE DATABASE | RPO=備份頻率, RTO=還原耗時 |
| 伺服器遷移、硬體升級、檔案完整 | CREATE DATABASE ... FOR ATTACH | RPO=0 (無資料遺失), RTO=秒級 |
| 只有 MDF、LDF 遺失/損壞 | sp_attach_single_file_db | RPO>0 (未提交交易遺失) |
| 資料庫損壞、無備份 | EMERGENCY + REPAIR_ALLOW_DATA_LOSS | RPO=未知, 風險極高 |