在 SQL Server 資料庫管理中,MDF(主資料檔)與 LDF(交易記錄檔)是核心檔案。當備份僅包含這兩個檔案時,如何快速還原成為關鍵技能。本文詳細說明正常還原流程、僅有 MDF 檔案的復原技巧,以及實務操作步驟,適用於 SQL Server 7.0、2000 及更新版本。
正常情況下,備份資料庫需先將其從執行中伺服器卸離,或直接停止 SQL Server 服務,再複製 MDF 與 LDF 兩個檔案。
sp_detach_db '資料庫名稱'sp_attach_db '資料庫名稱', 'MDF完整路徑', 'LDF完整路徑'sp_attach_single_file_db '資料庫名稱', 'MDF完整路徑'假設資料庫 test,資料檔 test_data.mdf,記錄檔 test_log.ldf:
-- 卸離
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:\Program Files\Microsoft SQL Server\MSSQL\Data\test_data.mdf'
關鍵點: 必須同時備份 MDF 與 LDF 才能確保交易一致性完整還原。
若僅備份 MDF,復原難度大增。依據檔案來源不同,分為兩種情況:
嘗試 sp_attach_single_file_db,系統會提示「裝置啟動錯誤」並自動建立新 LDF,資料庫可能正常上線。
常出現錯誤訊息:
伺服器: 訊息 1813,層級 16,狀態 2,行 1
無法開啟新資料庫 'test'。CREATE DATABASE 將終止。
裝置啟動錯誤。實體檔案名 'd:\test_log.LDF' 可能有誤。
test 資料庫。test_log.ldf,用備份的 test_data.mdf 覆蓋 test_data.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:\Program Files\Microsoft SQL Server\MSSQL\Data\test_log.ldf')
若出現「無法排他鎖定資料庫」,請關閉所有連線(含 Enterprise Manager)後重試。DBCC CHECKDB('test')
預期結果:CHECKDB 發現了 0 個配置錯誤和 0 個一致性錯誤。sp_dboption 'test', 'dbo use only', 'false'
sp_configure 'allow updates', 0
GO
RECONFIGURE WITH OVERRIDE
GO
DBCC CHECKDB 並檢查應用層資料完整性。CREATE DATABASE ... FOR ATTACH_REBUILD_LOG 簡化流程。掌握 MDF/LDF 檔案層級的還原技術,是 DBA 面對災難復原的關鍵能力。平時演練、建立標準化操作手冊,才能在關鍵時刻從容應對。