[SQL SERVER][Maintain]挽救毀損資料庫
這篇我會模擬如何挽救無法開啟的資料庫(交易紀錄檔毀損),
當然,我知道你不會希望有這一天的到來。
資料庫正常狀態。
突然有天災難發生了
錯誤訊息。
資料庫狀態。
開工了
一、將該資料庫離線並備份相關實體檔案(mdf,ndf,ldf)
alter database ricodemo set offline
備份相關實體檔案(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
這裡會將會遺失checkpoint時間點後所有資料。
四、確認資料庫狀態和資料並改回Multi_User
alter database ricodemo set multi_user
搞定收工。
參考
CREATE DATABASE (Transact-SQL)
sp_attach_db (Transact-SQL)