擁有 .mdf (資料檔) 與 .ldf (記錄檔) 即可附加資料庫;若僅有 .mdf,需重建記錄檔。本文詳述正常附加、單檔修復、系統表直接修改 (緊急模式) 三層級方案。
.mdf 檔案 → 確定 (自動關聯同目錄 .ldf)-- 雙檔附加
EXEC sp_attach_db 'dbname',
'C:\Path\dbname_data.mdf',
'C:\Path\dbname_log.ldf';
-- 單檔附加 (自動建立新記錄檔)
EXEC sp_attach_single_file_db 'dbname', 'C:\Path\dbname_data.mdf';
前提:資料庫已正確分離 (sp_detach_db) 或服務已停止複製檔案。
直接 sp_attach_single_file_db,日誌會自動重建,僅提示警告:
設備啟動錯誤。物理檔名 '...Log.LDF' 可能有誤。
已建立新日誌檔 '...Log.LDF'。
直接附加報錯:Msg 1813: Could not open new database... CREATE DATABASE aborted.
CREATE DATABASE test)test_log.ldf,用待修復 test_data.mdf 覆蓋新建的 test_data.mdfUSE master;
GO
EXEC sp_configure 'allow updates', 1;
RECONFIGURE WITH OVERRIDE;
GO
UPDATE sysdatabases SET status = -32768 WHERE dbid = DB_ID('test');
-- 狀態變為: 唯讀/置疑/離線/緊急模式
DBCC REBUILD_LOG('test', 'C:\Path\test_log.ldf');
若報「無法排他鎖定」,關閉企業管理器/其他連線後重試。
DBCC CHECKDB('test');
EXEC sp_dboption 'test', 'dbo use only', 'false';
EXEC sp_configure 'allow updates', 0;
RECONFIGURE WITH OVERRIDE;
GO
REBUILD_LOG 會**破壞交易一致性**,未提交交易丟失,僅保證物理結構完整DBCC CHECKDB 驗證allow updatesCREATE DATABASE ... FOR ATTACH_REBUILD_LOG 替代手動修改系統表CREATE DATABASE test ON
(FILENAME = 'C:\Path\test_data.mdf')
FOR ATTACH_REBUILD_LOG;
單條指令完成上述所有步驟,安全且支援檔案重新定位。