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

SQL Server 資料庫崩潰災難恢復完整手冊:從附加檔案到緊急模式修復

     編輯:關於SqlServer

理想情況:資料與記錄檔完好

直接 SP_ATTACH_DB 掛載檔案,或停機複製所有檔案(含 master)回原路徑。推薦前者。

有備份:標準還原流程

  1. 還原最新完整備份(WITH NORECOVERY)。
  2. 依序還原差異備份、交易記錄備份。
  3. 若作用中記錄檔可讀,尾部記錄備份並還原,達到崩潰前時間點。

最棘手:無備份、無可用記錄檔(常見於儲存子系統故障)

僅剩 .mdf 可用,嘗試以下階梯方案:

階梯 1:SP_ATTACH_SINGLE_FILE_DB

僅附加資料檔。若資料庫剛好執行過 CHECKPOINT,可能成功;機率低但成本最小,優先嘗試。

階梯 2:緊急模式重建記錄檔

  1. 啟用系統表更新:SP_CONFIGURE 'ALLOW UPDATES', 1; RECONFIGURE WITH OVERRIDE;
  2. 設定緊急模式:UPDATE SYSDATABASES SET STATUS = 32768 WHERE NAME = 'DBName';
  3. 重啟 SQL Server,系統自動建立新記錄檔。
  4. 單一使用者模式:SP_DBOPTION 'DBName', 'single user', 'true';
  5. 完整性檢查:DBCC CHECKDB('DBName');
  6. 若無嚴重錯誤,恢復狀態:UPDATE SYSDATABASES SET STATUS = 28 WHERE NAME = 'DBName';(或 SP_RESETSTATUS)
  7. 關閉系統表更新:SP_CONFIGURE 'ALLOW UPDATES', 0; RECONFIGURE WITH OVERRIDE;

階梯 3:深度修復

  • DBCC CHECKDB('DBName', REPAIR_ALLOW_DATA_LOSS) 為最後手段,接受資料遺失。
  • 逐表 DBCC CHECKTABLE(從 SYSOBJECTS 篩選 OBJECTPROPERTY(id,'IsTable')=1)。
  • 嘗試 SELECT INTO 複製乾淨資料到新表。

階梯 4:重建輔助物件

重建所有索引(DBCC DBREINDEX)、檢視、預存程序、觸發器。

總結

災難恢復核心在於「備份策略」與「練習演練」。無備份時,緊急模式 + DBCC 為最後防線,但必接受交易遺失與潛在資料損壞風險。

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