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

SQL Server MDF 檔案掛載還原完整操作指南

     編輯:關於SqlServer

適用情境與前置條件

當僅擁有資料庫資料檔 (.mdf) 而無日誌檔 (.ldf) 或完整備份 (.bak) 時,可透過「建立空資料庫 → 替換 MDF → 重建日誌」流程將資料掛載回 SQL Server。本文適用於 SQL Server 2000/2005/2008/2012 等版本(指令相容)。

⚠ 風險提示:此屬緊急搶救手段,重建日誌會導致交易一致性遺失,執行前請務必備份原始 MDF 檔案,生產環境建議優先嘗試 RESTORE DATABASE 或 DBCC CHECKDB (REPAIR_ALLOW_DATA_LOSS)。

10 步驟完整流程

步驟 1:建立空白掛載用資料庫

USE master;
GO
CREATE DATABASE MHDYF2005
ON (NAME = 'MHDYF2005_data', FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL\Data\MHDYF2005_data.mdf')
LOG ON (NAME = 'MHDYF2005_log', FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL\Data\MHDYF2005_log.ldf');
GO

步驟 2:停止 SQL Server 服務

透過「服務」管理工具 (services.msc) 或 SQL Server Configuration Manager 停止對應執行個體服務。

步驟 3:替換資料檔

  • 刪除步驟 1 建立的 MHDYF2005_log.ldf。
  • 將待還原的 yu1.mdf 複製並覆蓋為 MHDYF2005_data.mdf。

步驟 4:啟動服務,資料庫進入「置疑」狀態

重新啟動 SQL Server 服務。在 SSMS/企業管理員中重新整理,資料庫 MHDYF2005 狀態顯示為 Suspect (置疑)。此時切勿對該資料庫執行任何操作。

步驟 5:允許直接修改系統目錄

USE master;
GO
sp_configure 'allow updates', 1;
RECONFIGURE WITH OVERRIDE;
GO

或在企業管理員 → 伺服器屬性 → 「安全性」頁籤勾選「允許直接修改系統目錄」。

步驟 6:設定資料庫為緊急修復模式

UPDATE sysdatabases SET status = -32768 WHERE dbid = DB_ID('MHDYF2005');
GO

執行後資料庫進入 Emergency Mode (緊急模式),僅可讀取系統表,使用者表不可見。

步驟 7:重建日誌檔 (核心指令)

DBCC REBUILD_LOG('MHDYF2005', 'C:\Program Files\Microsoft SQL Server\MSSQL\Data\MHDYF2005_log.ldf');
GO

常見錯誤:Msg 5030: 無法排他鎖定資料庫 → 原因通常是 SSMS/企業管理員正開啟該資料庫物件,關閉所有連線視窗後重試。

成功訊息:警告: 資料庫 'MHDYF2005' 的日誌已重建。已失去事務的一致性。應執行 DBCC CHECKDB 以驗證物理一致性...

此時資料庫狀態轉為 DBO Use Only (僅限 DBO 使用),可存取使用者資料表。

步驟 8:驗證資料庫一致性 (建議執行)

DBCC CHECKDB('MHDYF2005');
GO

預期結果:CHECKDB 發現了 0 個配置錯誤和 0 個一致性錯誤。

步驟 9:設定資料庫回正常多使用者模式

EXEC sp_dboption 'MHDYF2005', 'dbo use only', 'false';
GO

步驟 10:關閉系統目錄直接修改 (安全收尾)

sp_configure 'allow updates', 0;
RECONFIGURE WITH OVERRIDE;
GO

後續建議作業

  1. 立即執行 完整備份,建立可靠復原點。
  2. 執行 DBCC CHECKDB WITH DATA_PURITY 深度掃描資料純度。
  3. 檢查應用程式功能,確認業務邏輯無異常。
  4. 若資料量大、業務關鍵,建議尋求專業 DBA 協助評估資料完整性。

常見問題彙整

問題原因與對策
REBUILD_LOG 失敗:無法排他鎖定有其他連線正在使用該資料庫 → 關閉所有 SSMS/查詢視窗、停止應用服務、或設定 SINGLE_USER 模式後重試。
重建後資料遺失/不一致重建日誌會丟棄未提交交易 → 僅作為最後手段,優先尋找完整備份/交易日誌備份進行時間點還原。
SQL Server 2012+ 版本指令相容,但建議改用 CREATE DATABASE ... FOR ATTACH_REBUILD_LOG 語法更簡潔。

結語

MDF 掛載還原是 DBA 武器庫中的「急救刀」,雖能在無備份時搶救資料,但伴隨交易一致性風險。平時建立完整備份策略(完整+差異+交易日誌)、定期演練還原、啟用頁面驗證與資料庫郵件警示,才是資料安全的根本之道。

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