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

SQL Server 僅有 MDF 檔案時的資料庫還原與修復完整流程

     編輯:關於SqlServer

正常情況:同時擁有 MDF 與 LDF

-- 卸離資料庫
sp_detach_db 'MyDB';
-- 附加資料庫(需指定兩個檔案)
sp_attach_db 'MyDB',
  'C:\Data\MyDB.mdf',
  'C:\Data\MyDB_log.ldf';

或使用企業管理器「所有工作 → 附加資料庫」選取 MDF 檔案。

棘手情況:只有 MDF 檔案

情況 A:MDF 來自同一伺服器(較簡單)

sp_attach_single_file_db 'MyDB', 'C:\Data\MyDB.mdf';

系統會自動重建日誌檔,但會出現警告訊息。

情況 B:MDF 來自不同伺服器(需手動修復)

  1. 建立同名空資料庫 MyDB(企業管理器或 CREATE DATABASE)。
  2. 停止 SQL Server 服務。
  3. 刪除新建資料庫的 MyDB_log.ldf,用備份的 MyDB.mdf 覆蓋原資料檔。
  4. 啟動 SQL Server 服務,資料庫狀態變為「置疑」。
  5. 允許直接更新系統表:
USE master;
GO
sp_configure 'allow updates', 1;
RECONFIGURE WITH OVERRIDE;
GO
  1. 將資料庫設為緊急修復模式:
UPDATE sysdatabases SET status = -32768 WHERE dbid = DB_ID('MyDB');
  1. 重建日誌檔:
DBCC REBUILD_LOG('MyDB', 'C:\Data\MyDB_log.ldf');
  1. 驗證一致性(可略):DBCC CHECKDB('MyDB')。
  2. 設回正常模式:sp_dboption 'MyDB', 'dbo use only', 'false'。
  3. 關閉系統表直接更新:sp_configure 'allow updates', 0; RECONFIGURE WITH OVERRIDE;。

單一使用者模式執行 DBCC 的兩種方式

-- 方式 1:sp_dboption
sp_dboption 'MyDB', 'single user', true;
-- 方式 2:ALTER DATABASE
ALTER DATABASE MyDB SET SINGLE_USER;
-- 執行完畢後改回 MULTI_USER

關鍵提醒

  • 操作系統表極度危險,務必於完成後立即關閉 allow updates。
  • 若 DBCC REBUILD_LOG 報錯「無法獨佔鎖定」,請關閉所有連線(含企業管理器視窗)。
  • 修復後務必執行 DBCC CHECKDB 確認資料完整性。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved