[SQL SERVER][Maintain]挽救毀損資料庫

[SQL SERVER][Maintain]挽救毀損資料庫

這篇我會模擬如何挽救無法開啟的資料庫(交易紀錄檔毀損),

當然,我知道你不會希望有這一天的到來。

 

clip_image002

資料庫正常狀態。

 

突然有天災難發生了

 

clip_image002[5]

錯誤訊息。

 

clip_image002[7]

資料庫狀態。

 

開工了

一、將該資料庫離線並備份相關實體檔案(mdf,ndf,ldf)

alter database ricodemo set offline

 

 

 

clip_image002[9]

備份相關實體檔案(mdf,ldf)完成後,就可以刪除毀損的交易紀錄檔。

但如果是mdf掛點的話,可能就得透過其他第三方軟體來修復,

我看一些國外論壇說ApexSQL好像不錯用,我個人是沒用過該軟體,

但討論中也是有人無法順利復原並修復MDF的情況發生。

 

Note:

當資料庫為復原中(RECOVERY_PENDING),不建議卸載(detach)資料庫(只要設定離線就好了),

因為只要一經卸載,在大部分情況下無法在附加(attach)回 SQL 執行個體(Instance),

而且也喪失讓SQL Server自動重建(Rebuild)交易紀錄檔的機會(當你設定online)。

 

二、設定資料庫為Emegrency Mode and Single_User

alter database ricodemo set emergency
alter database ricodemo set single_user

參考ALTER DATABASE SET 選項 (Transact-SQL)

 

三、利用DBCC CHECKDB with Repair_Allow_Data_lose嘗試修復邏輯錯誤

dbcc checkdb(ricodemo,repair_allow_data_loss)
with no_infomsgs,all_errormsgs
clip_image002[11]

這裡會將會遺失checkpoint時間點後所有資料。

 

四、確認資料庫狀態和資料並改回Multi_User

alter database ricodemo set multi_user
image 

clip_image002[13]

搞定收工。

 

參考

CREATE DATABASE (Transact-SQL)

sp_attach_db (Transact-SQL)