.mdf(資料檔)與 .ldf(記錄檔)。本文深入探討此法及其還原變體。sp_detach_db 'db_name'sp_attach_db 'db_name', 'mdf_path', 'ldf_path'sp_attach_single_file_db 'db_name', 'mdf_path'-- 卸離
sp_detach_db 'test';
-- 附加(指定雙檔)
sp_attach_db 'test',
'C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_data.mdf',
'C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_log.ldf';
-- 僅附加 MDF(自動建立新 LDF)
sp_attach_single_file_db 'test', 'C:\...\test_data.mdf';
關鍵:備份時必須同時取得 .mdf 與 .ldf,否則屬於災難恢復場景。
適用場景:僅備份了 MDF、或從他機複製 MDF 無 LDF、正常附加報錯(裝置啟動錯誤、無法開啟資料庫)。
CREATE DATABASE),作為容器。ldf,用目標 mdf 覆蓋新資料庫的 mdf。USE master; GO
sp_configure 'allow updates', 1; GO
RECONFIGURE WITH OVERRIDE; GO
UPDATE sysdatabases SET status = -32768 WHERE dbid = DB_ID('test');
資料庫進入「唯讀/置疑/離線/緊急」模式,僅可見系統表。DBCC REBUILD_LOG('test', 'C:\...\test_log.ldf');
若報「無法獨佔鎖定」,關閉所有連線(含 EM 開啟的系統表)重試。成功訊息含「日誌已重建、交易一致性遺失、請執行 DBCC CHECKDB」。DBCC CHECKDB('test'),預期 0 配置錯誤、0 一致性錯誤。sp_dboption 'test', 'dbo use only', 'false'。sp_configure 'allow updates', 0; GO
RECONFIGURE WITH OVERRIDE; GO
sysadmin 權限,操作風險高,務必在測試環境演練。REBUILD_LOG 會丟失未提交交易,資料可能不一致,驗證極重要。CREATE DATABASE ... FOR ATTACH_REBUILD_LOG 替代手動緊急模式流程。