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

SQL Server 2005 記錄檔損毀緊急修復:從 MDF 重建資料庫完整步驟

     編輯:關於SqlServer

硬體故障、非正常關機導致交易記錄檔損毀,資料庫進入 SUSPECT 狀態,無法分離、無法以 ATTACH_REBUILD_LOG 附加。本文提供經驗證的 僅靠 MDF 檔案重建資料庫 的 10 步驟修復流程,適用於 SQL Server 2005。

損毀徵兆

  • SSMS 顯示資料庫為「置疑」狀態。
  • 事件檢視器記錄 Could not redo log record、During redoing of a logged Operation... an error occurred。
  • 無法分離資料庫;CREATE DATABASE ... FOR ATTACH_REBUILD_LOG 報錯 The log cannot be rebuilt because the database was not cleanly shut down。

修復步驟

  1. 停止 SQL Server 服務。
  2. 將損毀資料庫的 .mdf 檔案複製備份至其他位置。
  3. 啟動 SQL Server 服務。
  4. 確認備份成功後,在 SSMS 中刪除原資料庫(僅刪除中繼資料,檔案已備份)。
  5. 建立同名新資料庫(檔案路徑、名稱與原資料庫一致)。
  6. 停止 SQL Server 服務。
  7. 用備份的 .mdf 覆蓋新資料庫的 .mdf。
  8. 啟動 SQL Server 服務(資料庫將進入 EMERGENCY 模式)。
  9. 執行 ALTER DATABASE dbname SET EMERGENCY 確保單一使用者模式。
  10. 執行修復序列:
USE master;
DECLARE @databasename VARCHAR(255);
SET @databasename = '目標資料庫名稱';

EXEC sp_dboption @databasename, N'single', N'true';  -- 單一使用者
DBCC CHECKDB(@databasename, REPAIR_ALLOW_DATA_LOSS);  -- 允許資料遺失修復
DBCC CHECKDB(@databasename, REPAIR_REBUILD);          -- 重建索引等結構
EXEC sp_dboption @databasename, N'single', N'false';  -- 恢復多使用者

關鍵提醒:

  • REPAIR_ALLOW_DATA_LOSS 可能刪除損毀頁面導致資料遺失,務必先備份 MDF。
  • 此法不需 LDF 檔案,甚至 LDF 遺失也可修復。
  • 修復後務必執行 DBCC CHECKDB 驗證一致性,並檢查業務資料完整性。
  • SQL Server 2008+ 建議改用 ALTER DATABASE ... SET EMERGENCY、SET SINGLE_USER、DBCC CHECKDB ... REPAIR_ALLOW_DATA_LOSS、SET MULTI_USER 標準語法。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved