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

SQL Server 2000 資料庫標記為可疑且備份損壞:MDF 檔案附加失敗的緊急恢復實戰

     編輯:關於SqlServer

故障現場

  • 資料庫狀態:可疑
  • 備份檔:損壞/不可用
  • 嘗試附加 MDF:失敗,錯誤 1813 / 設備啟動錯誤 (LDF 路徑錯誤)

緊急恢復流程 (僅限非系統資料庫)

  1. 建立同名空資料庫: 企業管理員或 CREATE DATABASE Test,記錄邏輯檔名 (通常為 `Test_Data`、`Test_Log`)。
  2. 停止 SQL Server 服務 (MSSQLSERVER)。
  3. 替換檔案: 刪除新建資料庫的 LDF;用受損資料庫的 MDF 覆蓋新建的 MDF。
  4. 啟動 SQL Server 服務。資料庫將呈現「可疑/唯讀/離線/緊急模式」。
  5. 允許直接修改系統表:
    USE master; GO
    EXEC sp_configure 'allow updates', 1; RECONFIGURE WITH OVERRIDE; GO
    
  6. 設定緊急模式:
    UPDATE sysdatabases SET status = -32768 WHERE dbid = DB_ID('Test'); GO
    

    此時可在企業管理員看到系統表,但使用者表不可見。

  7. 重建記錄檔 (核心步驟):
    DBCC REBUILD_LOG('Test', 'C:\Program Files\Microsoft SQL Server\MSSQL\Data\Test_Log.ldf'); GO
    

    若報錯 5030 (無法獨佔鎖定),關閉所有連線 (含企業管理員瀏覽該庫) 後重試。

  8. 驗證一致性 (建議):
    DBCC CHECKDB('Test'); GO
    
  9. 恢復正常模式:
    EXEC sp_dboption 'Test', 'dbo use only', 'false'; GO
    
  10. 關閉系統表直接修改:
    EXEC sp_configure 'allow updates', 0; RECONFIGURE WITH OVERRIDE; GO
    

關鍵風險提示

  • 資料可能遺失: `REBUILD_LOG` 會捨棄未寫入資料檔的交易,資料庫處於交易不一致狀態。
  • 僅限緊急救援: 有可用備份時務必優先還原備份,此流程為最後手段。
  • SQL 2005+ 異動: `sp_configure 'allow updates'` 已移除,緊急模式改用 `ALTER DATABASE ... SET EMERGENCY`,重建日誌改用 `DBCC CHECKDB ... REPAIR_ALLOW_DATA_LOSS`。

現代版本 (SQL 2005+) 對應指令

-- 1. 緊急模式
ALTER DATABASE Test SET EMERGENCY; GO
-- 2. 單一使用者模式修復
ALTER DATABASE Test SET SINGLE_USER; GO
DBCC CHECKDB('Test', REPAIR_ALLOW_DATA_LOSS) WITH TABLOCK; GO
-- 3. 恢復多用戶
ALTER DATABASE Test SET MULTI_USER; GO
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved