萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

SQL Server MDF/LDF 檔案附加與單檔修復完整操作手冊

擁有 .mdf (資料檔) 與 .ldf (記錄檔) 即可附加資料庫;若僅有 .mdf,需重建記錄檔。本文詳述正常附加、單檔修復、系統表直接修改 (緊急模式) 三層級方案。

一、正常附加 (雙檔齊全)

方法 1:企業管理器圖形介面

  1. 右鍵資料庫節點 → 「所有工作」 → 「附加資料庫」
  2. 選擇 .mdf 檔案 → 確定 (自動關聯同目錄 .ldf)

方法 2:系統預存程序

-- 雙檔附加
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) 或服務已停止複製檔案。

二、僅有 MDF 檔案的修復 (兩種情境)

情境 A:MDF 來自當前實例 (幸運情況)

直接 sp_attach_single_file_db,日誌會自動重建,僅提示警告:

設備啟動錯誤。物理檔名 '...Log.LDF' 可能有誤。
已建立新日誌檔 '...Log.LDF'。

情境 B:MDF 來自其他機器/備份 (棘手情況)

直接附加報錯:Msg 1813: Could not open new database... CREATE DATABASE aborted.

修復步驟 (緊急模式重建日誌)

  1. 建立同名空資料庫 (企業管理器或 CREATE DATABASE test)
  2. 停止 SQL Server 服務
  3. 替換檔案:刪除新建的 test_log.ldf,用待修復 test_data.mdf 覆蓋新建的 test_data.mdf
  4. 啟動服務:資料庫狀態顯示「置疑」
  5. 允許系統表修改:
    USE master;
    GO
    EXEC sp_configure 'allow updates', 1;
    RECONFIGURE WITH OVERRIDE;
    GO
  6. 設為緊急模式:
    UPDATE sysdatabases SET status = -32768 WHERE dbid = DB_ID('test');
    -- 狀態變為: 唯讀/置疑/離線/緊急模式
  7. 重建日誌:
    DBCC REBUILD_LOG('test', 'C:\Path\test_log.ldf');

    若報「無法排他鎖定」,關閉企業管理器/其他連線後重試。

  8. 驗證一致性 (可選但建議):
    DBCC CHECKDB('test');
  9. 恢復正常模式:
    EXEC sp_dboption 'test', 'dbo use only', 'false';
  10. 關閉系統表修改**:
    EXEC sp_configure 'allow updates', 0;
    RECONFIGURE WITH OVERRIDE;
    GO

關鍵警示

  • REBUILD_LOG 會**破壞交易一致性**,未提交交易丟失,僅保證物理結構完整
  • 修復後**必須** DBCC CHECKDB 驗證
  • 生產環境**嚴禁**常態開啟 allow updates
  • SQL Server 2005+ 建議用 CREATE DATABASE ... FOR ATTACH_REBUILD_LOG 替代手動修改系統表

現代替代方案 (SQL 2005+)

CREATE DATABASE test ON 
    (FILENAME = 'C:\Path\test_data.mdf')
FOR ATTACH_REBUILD_LOG;

單條指令完成上述所有步驟,安全且支援檔案重新定位。

copyright © 萬盛學電腦網 all rights reserved