Sql-Server

是否可以從損壞的 .mdf 文件中恢復數據庫?

  • July 31, 2019

我知道問題的答案可能會有所不同,具體取決於每個.mdf文件中的確切內容 - 如果有其他方法可以解決這個問題,請僅尋求建議。

所以,我從數據庫管理員那裡收到了一些壞消息。昨晚發生了這樣的事情(這是我從他那裡得到的唯一資訊):

  1. 驅動器發生故障
  2. 驅動器已更換,但在重建過程中再次失敗..又一次
  3. 它是新驅動器,因此已移至機箱上的其他驅動器插槽
  4. 執行上述操作時,我錯誤地拉出了記憶體驅動器,該驅動器又鎖定了具有記憶體保護的任何卷
  5. 重新插入記憶體驅動器後,驅動器活動恢復(驅動器進入“鎖定”狀態)

似乎上述步驟會導致.mdf文件損壞並且無法正常工作。因此,我們開始為force attached他們創建新的 SQL 實例,步驟如下:

  1. 創建新數據庫
  2. 刪除其文件
  3. 添加損壞的.mdf文件ldf並使用以下腳本恢復它們:
USE master GO
ALTER DATABASE [] MODIFY FILE(NAME='', FILENAME= '') 
ALTER DATABASE [] MODIFY FILE(NAME='', FILENAME= '') 
GO

ALTER DATABASE [] SET ONLINE 
GO
DBCC TRACEON(3604) 
GO
ALTER DATABASE [] SET EMERGENCY 
GO

ALTER DATABASE [] SET SINGLE_USER 
GO
DBCC CHECKDB('[]', REPAIR_ALLOW_DATA_LOSS) 
WITH ALL_ERRORMSGS 
GO

ALTER DATABASE [] SET MULTI_USER 
GO

他還告訴我,Repair errors are different per database有些database根本無法修復。

那麼,我在這裡還有其他選擇嗎,或者我需要檢查每個數據庫的上述情況,並將一些數據(如果可能)移動到手動從舊副本恢復的數據庫中?

如果是我?

從軌道上對其進行核彈並從備份中恢復。

停止任何依賴此數據庫的程序並從您最近的備份中恢復。

穩定後,您可以進行學術練習,嘗試修復盡可能多的腐敗媒體,只要您有足夠的精力和預算來忍受。假設您對該媒體的上游和下游依賴關係有深入的了解,您可能能夠在邏輯上修復恢復您在上次穩定備份結束和中斷之間的時間內失去的一些數據。

引用自:https://dba.stackexchange.com/questions/244187