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

SQL Server 僅有 MDF 檔案時的資料庫恢復完整步驟

     編輯:MySQL 資料庫相關知識

僅備份 MDF 檔案(無 LDF)時,恢復難度較高。本文提供從簡單到進階的完整恢復流程,含企業管理員與 T-SQL 兩種操作方式。

正常情況:同時有 MDF + LDF

-- 卸離
EXEC sp_detach_db 'DBName'
GO

-- 附加(雙檔案)
EXEC sp_attach_db 'DBName', '路徑\Data.mdf', '路徑\Log.ldf'
GO

-- 或單一檔案附加(自動重建記錄檔)
EXEC sp_attach_single_file_db 'DBName', '路徑\Data.mdf'
GO

僅有 MDF 且來自其他伺服器:進階恢復流程

步驟 1:建立同名空資料庫

在 SSMS 或企業管理員建立同名資料庫(如 test),記下檔案路徑。

步驟 2:停止服務、替換檔案

  1. 停止 SQL Server 服務
  2. 刪除新建資料庫的 test_log.ldf
  3. 用備份的 test_data.mdf 覆蓋新建的 test_data.mdf
  4. 啟動 SQL Server 服務

此時資料庫狀態會顯示「置疑」。

步驟 3:啟用系統表更新、進入緊急模式

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

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

狀態變為「唯讀、置疑、離線、緊急模式」,僅能看到系統表。

步驟 4:重建記錄檔

DBCC REBUILD_LOG('test', '路徑\test_log.ldf')
GO

⚠️ 若報錯「無法排他鎖定」,關閉 SSMS 物件瀏覽器或其他連線後重試。

成功訊息:警告: 資料庫 'test' 的記錄已重建。已失去交易的一致性...

步驟 5:驗證一致性(可選但建議)

DBCC CHECKDB('test')
GO

步驟 6:恢復正常模式

EXEC sp_dboption 'test', 'dbo use only', 'false'
GO

步驟 7:關閉系統表更新權限

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

關鍵提醒

  • ✅ 備份時**務必同時備份 MDF 與 LDF**
  • ✅ sp_attach_single_file_db 適用於同伺服器、剛卸離的資料庫
  • ✅ 跨伺服器、僅有 MDF 必須走「建立空庫→替換檔案→緊急模式→重建記錄檔」流程
  • ⚠️ 重建記錄檔後交易一致性遺失,需 DBCC CHECKDB 深度掃描
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved