首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

SQL Server MDF/LDF 檔案附加與單檔 MDF 緊急修復還原完整指南

     編輯:MySQL 資料庫相關知識

SQL Server 資料庫備份除 BACKUP DATABASE 外,亦可直接複製 .mdf (資料檔) 與 .ldf (記錄檔) 檔案。本文涵蓋正常附加、單檔 MDF 緊急修復、DBCC 重建記錄檔完整流程。

正常附加 (雙檔齊全)

-- 方法一:企業管理器 → 右鍵資料庫 → 所有工作 → 附加資料庫 → 選取 .mdf

-- 方法二:T-SQL
EXEC sp_attach_db 
    @dbname = 'TestDB',
    @filename1 = 'C:\Data\TestDB.mdf',
    @filename2 = 'C:\Data\TestDB_log.ldf';

-- 僅有 .mdf 但為當前實例產生 (記錄檔會自動重建)
EXEC sp_attach_single_file_db @dbname = 'TestDB', @physname = 'C:\Data\TestDB.mdf';

單檔 MDF 緊急修復 (跨實例、遺失 LDF)

適用情境:僅備份 .mdf、從其他伺服器複製、LDF 損壞遺失。

  1. 建立同名空資料庫 (企業管理器或 CREATE DATABASE TestDB)。
  2. 停止 SQL Server 服務。
  3. 替換檔案:刪除新建的 TestDB_log.ldf,用備份的 TestDB.mdf 覆蓋新建的 TestDB.mdf。
  4. 啟動服務,資料庫狀態顯示「置疑」。
  5. 允許系統表直接修改:
    USE master;
    EXEC sp_configure 'allow updates', 1;
    RECONFIGURE WITH OVERRIDE;
  6. 設為緊急模式:
    UPDATE sysdatabases SET status = -32768 WHERE dbid = DB_ID('TestDB');
  7. 重建記錄檔:
    DBCC REBUILD_LOG('TestDB', 'C:\Data\TestDB_log.ldf');
  8. 驗證一致性 (可選):
    DBCC CHECKDB('TestDB');
  9. 恢復正常模式:
    EXEC sp_dboption 'TestDB', 'dbo use only', 'false';
  10. 關閉系統表修改**:
    EXEC sp_configure 'allow updates', 0;
    RECONFIGURE WITH OVERRIDE;

關鍵提醒

  • 步驟 5-10 需在單一連線中完成,避免其他連線鎖定資料庫導致 DBCC REBUILD_LOG 失敗 (錯誤 5030)。
  • 重建記錄檔後交易一致性遺失,務必執行 DBCC CHECKDB 驗證。
  • SQL Server 2005+ 建議改用 CREATE DATABASE ... FOR ATTACH_REBUILD_LOG 替代上述手動流程。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved