資料庫還原是 DBA 的核心技能之一。本文整理三種主流還原策略,涵蓋正規備份還原、資料庫分離/附掛、以及單一 MDF 檔案緊急掛載,並提供 T-SQL 指令速查。
透過完整備份(Full Backup)搭配差異/記錄備份,可實現時間點還原(Point-in-Time Recovery),資料一致性最高。
RESTORE DATABASE [TestDB]
FROM DISK = N'C:\Backup\TestDB_Full.bak'
WITH REPLACE, STATS = 5,
MOVE N'TestDB' TO N'C:\Data\TestDB.mdf',
MOVE N'TestDB_log' TO N'C:\Log\TestDB_log.ldf';
提示:若需還原至特定時間點,請在 WITH 子句加入 STOPAT = 'YYYY-MM-DD HH:MM:SS' 並依序套用記錄備份。
適用於資料庫已正確分離,或將資料庫檔案複製至新伺服器的情境。
EXEC sp_attach_db
@dbname = N'Pubs',
@filename1 = N'C:\MSSQL7\Data\pubs.mdf',
@filename2 = N'C:\MSSQL7\Data\pubs_log.ldf';
風險提示:實務上偶見掛載後資料庫變為 READ_ONLY,需額外執行 ALTER DATABASE [Pubs] SET READ_WRITE 修正。
當遺失 LDF 記錄檔,或只有單一 MDF 檔案時的救命稻草。SQL Server 會自動重建空的記錄檔。
EXEC sp_attach_single_file_db
@dbname = N'Pubs',
@physname = N'C:\MSSQL7\Data\pubs.mdf';
適用場景:硬碟故障只救回 MDF、未做備份的緊急搶救。注意:未提交的交易將遺失,資料一致性較低,務必在掛載後立即 DBCC CHECKDB 驗證。
| 方案 | 前置條件 | 資料完整性 | 操作複雜度 |
|---|---|---|---|
| 備份還原 | 完整備份檔案 | 最高(可時間點還原) | 中 |
| sp_attach_db | MDF + LDF 完整 | 高(分離時一致) | 低 |
| sp_attach_single_file_db | 僅 MDF | 中低(遺失未提交交易) | 最低 |