一個SQL SERVER數據庫會處於很多種狀態,例如 ONLINE 、RESTORING 、RECOVERING 、RECOVERY_PENDING 、SUSPECT、EMERGENCY 、OFFLINE等等。
一、下圖主要反映了數據庫的主要狀態之間的切換
二、各種狀態的簡單介紹
1、ONLINE (在線)
這種狀態下,數據庫可以被普通用戶訪問,可以被查詢和修改。
2、RESTORING (正在還原)
數據庫在還原狀態下
3、RECOVERING (正在恢復)
(1)、Recovering主要處理3件事情:
[1]、分析要做的工作:就是在事務日志文件中,找到那些事務要重做,那些事務要回滾 [2]、Redo:將已經提交的但是沒有寫入數據文件的事務,做前滾 [3]、undo:對沒有提交的事務做回滾
(2)、以下幾個動作會讓數據庫進入Recovering:
[1]、創建數據庫 [2]、Alter Online,上線數據庫 [3]、RESTORE WITH RECONVERY:恢復數據庫 [4]、DatabaseStartup,數據庫啟動,如果數據庫設置了自動關閉,就會在用戶第一次訪問的時候做這個動作。
(3)、此時如果遇到問題就進入RECOVERY_PENDING。如果正常就會變成ONLINE。
4、RECOVERY_PENDING(等待恢復)
(1)、如果數據庫在做恢復的時候不能正常打開所有的數據庫文件,數據庫會進入RECOVERY PENDING狀態。
(2)、這種情況下,最可能的原因是丟失數據文件或日志文件。
(3)、解決辦法:用ALTER ONLINE再恢復一次,或者使用備份恢復
5、SUSPECT (置疑)
(1)、當數據庫做恢復的時候由於數據文件或者日志文件里的損壞而失敗,數據庫會進入SUSPECT狀態。
(2)、解決方法:
[1]、再做一次ALTER ONLINE ,讓SQLSERVER再做一次恢復
[2]、放棄當前數據庫,還原備份
[3]、將數據庫狀態設置為EMERGENCY,繼續嘗試修復數據庫
6、EMERGENCY (緊急)
(1)、緊急模式。
(2)、這個狀態下,SQLSERVER對沒有完成恢復的數據庫開放一個只讀窗口,供管理員在沒有備份的情況下盡可能地挽救數據。
7、OFFLINE (脫機)
(1)、數據庫處於離線狀態,這時候數據庫也不能被訪問。
(2)、可以使用ALTER ONLINE命令,讓數據庫開始恢復,從而進入ONLINE狀態。