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

SQL Server 資料庫損毀修復實戰:以備份 MDF 重建資料庫

     編輯:關於SqlServer

資料庫損毀是 DBA 最惡夢。本文提供以備份 .mdf 檔案重建資料庫的標準修復流程,適用於無完整備份、僅有資料檔案的緊急情境。

修復步驟

  1. 取得備份 .mdf:確保擁有乾淨的資料檔案備份
  2. 建立同名空資料庫:
    • 企業管理器 / SSMS 新增資料庫,名稱與原資料庫相同
    • 關鍵:預設邏輯檔名會加 _data (如 abc_data.mdf),必須移除 _data 後綴,否則後續取代失敗
  3. 停止 SQL Server 服務,刪除新建資料庫的 .mdf 與 .ldf,用備份 .mdf 取代 (不需 .ldf)
  4. 啟動 SQL Server,在伺服器屬性啟用 「允許直接修改系統目錄」 (Allow updates to system catalog)
  5. 設定資料庫為緊急模式:
    sp_configure 'allow updates', 1;
    RECONFIGURE WITH OVERRIDE;
    UPDATE sysdatabases SET status = 32768 WHERE name = '資料庫名';
  6. 重建記錄檔 (.ldf):
    DBCC REBUILD_LOG ('資料庫名', '完整路徑\資料庫名_Log.LDF');

    路徑建議使用 SQL 資料目錄 (如 C:\Program Files\Microsoft SQL Server\MSSQL\Data\),系統會自動建立 LDF

  7. 恢復正常模式:
    UPDATE sysdatabases SET status = 0 WHERE name = '資料庫名';
  8. 關閉「允許直接修改系統目錄」:
    sp_configure 'allow updates', 0;
    RECONFIGURE WITH OVERRIDE;
  9. 驗證資料庫完整性:
    DBCC CHECKDB ('資料庫名');

    無錯誤即修復成功

關鍵提醒

  • 僅適用於舊版 SQL Server (2000/2005):新版 (2008+) sysdatabases 為檢視不可直接更新,allow updates 選項已移除
  • 新版修復請使用 CREATE DATABASE ... FOR ATTACH_REBUILD_LOG 或 DBCC CHECKDB (REPAIR_ALLOW_DATA_LOSS)
  • 修復前務必再備份一次損毀的 .mdf,防止操作失誤導致永久遺失
  • 緊急模式 (status=32768) 僅允許單一使用者存取,修復期間勿開放應用連線

現代替代方案 (SQL Server 2008+)

-- 1. 嘗試附加並重建記錄檔
CREATE DATABASE [DBName] ON (FILENAME = '路徑\DBName.mdf') FOR ATTACH_REBUILD_LOG;

-- 2. 若失敗,進入緊急模式修復
ALTER DATABASE [DBName] SET EMERGENCY;
ALTER DATABASE [DBName] SET SINGLE_USER;
DBCC CHECKDB ([DBName], REPAIR_ALLOW_DATA_LOSS);  -- 最後手段,可能遺失資料
ALTER DATABASE [DBName] SET MULTI_USER;

現代流程不需手動修改系統表,更安全且支援線上操作。

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