首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

MS SQL Server MDF 檔案還原與修復完整指南

     編輯:關於SqlServer

前言

在 SQL Server 資料庫管理中,MDF(主資料檔)與 LDF(交易記錄檔)是核心檔案。當備份僅包含這兩個檔案時,如何快速還原成為關鍵技能。本文詳細說明正常還原流程、僅有 MDF 檔案的復原技巧,以及實務操作步驟,適用於 SQL Server 7.0、2000 及更新版本。

一、標準備份與還原流程

1. 卸離與附加資料庫

正常情況下,備份資料庫需先將其從執行中伺服器卸離,或直接停止 SQL Server 服務,再複製 MDF 與 LDF 兩個檔案。

  • 卸離指令: sp_detach_db '資料庫名稱'
  • 附加指令: sp_attach_db '資料庫名稱', 'MDF完整路徑', 'LDF完整路徑'
  • 單一檔案附加: sp_attach_single_file_db '資料庫名稱', 'MDF完整路徑'

2. 實務範例

假設資料庫 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 檔案的進階復原技術

若僅備份 MDF,復原難度大增。依據檔案來源不同,分為兩種情況:

情況 A:MDF 來自目前伺服器(較樂觀)

嘗試 sp_attach_single_file_db,系統會提示「裝置啟動錯誤」並自動建立新 LDF,資料庫可能正常上線。

情況 B:MDF 來自其他電腦(較棘手)

常出現錯誤訊息:
伺服器: 訊息 1813,層級 16,狀態 2,行 1
無法開啟新資料庫 'test'。CREATE DATABASE 將終止。
裝置啟動錯誤。實體檔案名 'd:\test_log.LDF' 可能有誤。

完整復原步驟(適用於 SQL Server 2000/2005)

  1. 建立同名空資料庫: 在 Enterprise Manager 建立 test 資料庫。
  2. 停止 SQL Server 服務。
  3. 替換檔案: 刪除新建資料庫的 test_log.ldf,用備份的 test_data.mdf 覆蓋 test_data.mdf。
  4. 啟動服務: 資料庫狀態顯示為「置疑」。
  5. 允許直接修改系統目錄:
    在 Enterprise Manager 伺服器屬性勾選「允許對系統目錄直接修改」,或執行:
    USE master
    GO
    sp_configure 'allow updates', 1
    GO
    RECONFIGURE WITH OVERRIDE
    GO
  6. 設定緊急修復模式:
    UPDATE sysdatabases SET status = -32768 WHERE dbid = DB_ID('test')
    
    資料庫進入「唯讀、置疑、離線、緊急模式」,僅可見系統資料表。
  7. 重建交易記錄檔:
    DBCC REBUILD_LOG('test', 'C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_log.ldf')
    
    若出現「無法排他鎖定資料庫」,請關閉所有連線(含 Enterprise Manager)後重試。
    成功訊息會警告:「資料庫 'test' 的記錄已重建。已失去交易一致性。應執行 DBCC CHECKDB 驗證實體一致性。」
  8. 驗證資料庫一致性(建議執行):
    DBCC CHECKDB('test')
    
    預期結果:CHECKDB 發現了 0 個配置錯誤和 0 個一致性錯誤。
  9. 恢復正常模式:
    sp_dboption 'test', 'dbo use only', 'false'
    
  10. 關閉系統目錄直接修改:
    sp_configure 'allow updates', 0
    GO
    RECONFIGURE WITH OVERRIDE
    GO
    

三、注意事項與最佳實務

  • 僅有 MDF 復原屬於「緊急搶救」,會導致交易記錄遺失,資料一致性無法保證。
  • 生產環境務必實施完整備份策略(完整備份 + 差異備份 + 交易記錄備份)。
  • 復原後務必執行 DBCC CHECKDB 並檢查應用層資料完整性。
  • SQL Server 2005 之後版本建議使用 CREATE DATABASE ... FOR ATTACH_REBUILD_LOG 簡化流程。

結語

掌握 MDF/LDF 檔案層級的還原技術,是 DBA 面對災難復原的關鍵能力。平時演練、建立標準化操作手冊,才能在關鍵時刻從容應對。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved