檢查數據庫的狀態
數據庫的狀態有:online、offline、restoring、recovering、suspect、emergency、recovery pending
|
可能導致恢復掛起的原因
如果處於recovery pending狀態了,就表示恢復過程失敗了。但數據庫未必已經損壞。
原因會有很多種,比如:
1.由於硬件、電池等故障,sqlserver宕機了。當數據庫非正常關閉時,一個或多個活躍事務還未完成,但是事務日誌被刪除了
2.磁盤空間、內存不足了,這種情況下,數據庫無法啓動恢復過程
3.日誌文件損壞了
4.數據文件損壞了
如何修復?
在修復之前,要確保你有備份存在。
最好的方式就就是先查看錯誤日誌。
方法1:將數據庫狀態設置為online
·要保證有足夠的磁盤空間用户恢復
·將數據庫狀態設置為online
·執行CheckDB(不加repair選項)
|
如果上面的命令成功運行,沒有任何警告,數據庫就不需要做任何修復
方法2:重建日誌文件(緊急模式)
如果錯誤日誌顯示是由於日誌文件丟失而導致的,比如刪除、重命名或損壞:
·將數據庫置於緊急模式下
·分離數據庫(將其offline)
·重新附加(將其online)
|
系統會自動移除損壞的日誌並重建一個。
方法3:使用DBCC CHECKDB初始化(加上repair選項)
repair選項,一般不建議使用,只是作為實在沒有辦法時的選擇。有多個repair級別,先從repair_rebuild級別開始,這樣不會丟失數據:
·將數據庫置於單用户模式
·執行DBCC CHECKDB(帶上repair_rebuild選項)
·將數據庫設置成online和多用户模式
|
|
如果修復沒有成功,再將級別設置成REPAIR_ALLOW_DATA_LOSS:顧名思義,這種級別會有數據丟失
·將數據庫置於緊急模式
·執行DBCC CHECKDB(帶上repair_allow_data_loss選項)
·將數據庫設置成online和多用户模式
|