資料庫損壞、記錄檔遺失、無法正常啟動,僅剩 MDF 主資料檔案,需強制掛載並修復資料。
USE master;
GO
ALTER DATABASE dbname SET EMERGENCY;
GO
緊急模式下資料庫僅供系統管理員讀取,不執行復原,可讀取損壞資料庫的資料。
-- 建議使用 ALTER DATABASE(SQL 2005 標準語法)
ALTER DATABASE dbname SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
-- 舊版相容語法(不建議)
-- EXEC sp_dboption 'dbname', 'single user', 'true';
限制僅允許一個連線,避免修復過程中其他連線干擾。
-- 允許資料遺失的修復(最高強度,可能遺失資料)
DBCC CHECKDB ('dbname', REPAIR_ALLOW_DATA_LOSS) WITH NO_INFOMSGS, ALL_ERRORMSGS;
GO
-- 較溫和修復:重建索引(不允許資料遺失)
-- DBCC CHECKDB ('dbname', REPAIR_REBUILD);
GO
-- 僅快速檢查(不修復)
-- DBCC CHECKDB ('dbname', REPAIR_FAST);
| 選項 | 用途 | 風險 |
|---|---|---|
| REPAIR_FAST | 快速修復,僅處理輕微一致性問題 | 低 |
| REPAIR_REBUILD | 重建索引、修復非叢集索引 | 低,不遺失資料 |
| REPAIR_ALLOW_DATA_LOSS | 刪除損壞頁、重建資料結構 | 高,可能遺失資料,最後手段 |
DBCC CHECKDB ('dbname') WITH NO_INFOMSGS, ALL_ERRORMSGS;
GO
確認無錯誤訊息輸出,表示修復完成。
ALTER DATABASE dbname SET MULTI_USER;
GO
ALTER DATABASE dbname SET ONLINE;
GO
DBCC REBUILD_LOG('dbname', 'log_path') 重建記錄檔。EMERGENCY 模式搭配 DBCC CHECKDB REPAIR_ALLOW_DATA_LOSS 重建記錄檔結構。sp_dboption,SQL 2005 建議統一用 ALTER DATABASE。ALTER DATABASE dbname SET PAGE_VERIFY CHECKSUM 提早偵測 I/O 層損壞。DBCC CHECKDB 排程檢查(建議每週)。