天天看點

SQLSERVER資料庫主要狀态及其切換路徑SQLSERVER資料庫主要狀态和切換路徑

SQLSERVER資料庫主要狀态和切換路徑

隻有在ONLINE的狀态下,資料庫才能被正常通路。

恢複是資料庫進入線上狀态的關鍵步驟。如果恢複失敗,資料庫就沒有辦法被使用!!

RECOVERING:正在恢複

資料庫修改的時候,是先寫日志,然後再修改記憶體中的資料頁。檢查點或者是LAZY WRITE的時候寫入硬碟.是以在大部分時間,都會有一些硬碟上的資料不是最新的版本。如果資料庫在這種時間點被關閉,下次SQLSERVER重新打開資料庫的時候,為了維護資料庫的一緻性,SQLSERVER必須做兩件事情:

1、重做redo

2、復原和撤銷undo/rollback

在上次資料庫被關閉的時候,可能有一些修改已經在資料頁上完成,但是事務本身沒有送出。對于這些做到一半的事務,SQLSERVER一律復原,以保證資料庫事務的一緻性。是以磁盤裡被改過的資料還要再改過來。 

做這兩件事情的過程,叫做資料庫恢複。隻有經過恢複的資料庫,才能保證是一個“一緻的”資料庫,才能被安全地通路。

從圖中可以看出,下面的動作會讓SQLSERVER決定對資料庫做恢複

 (1)CREATE:建立新資料庫

 (2)ALTER ONLINE:讓資料庫上線

 (3)RESTORE WITHRECOVERY:以RECOVERY方式恢複一個資料庫

 (4)DATABASESTARTUP:啟動資料庫,

 恢複如果能夠正常完成,那麼資料庫将進入ONLINE狀态。

 如果恢複動作因為有些資源不能通路而失敗,例如某個資料檔案或者日志檔案打不開等等,資料庫會進入RECOVERY PENDING狀态。

如果恢複因為資料檔案或者日志檔案裡的内容損壞而失敗,例如SQLSERVER要做重做,但是日志檔案裡相應的日志資訊讀不出來;

或者要做撤銷,去修改資料檔案裡的頁面,卻發現頁面裡的資料不是想象中的那樣,那麼資料庫會進入一個很有名的狀态SUSPECT(可疑)。

ONLINE:

這種狀态下,可以通路,查詢和修改。隻有一種方法能夠使資料庫進入ONLINE狀态,那就是成功地恢複。

SQLSERVER通過這種機制保證資料庫的一緻性。

一個ONLINE的資料庫在管理者發出"ALTER OFFLINE"指令後,可以進入OFFLINE狀态。在管理者發出“RESTORE”指令後,可以進入RESTORING狀态

RECOVERYPENDING:

如果資料庫在做恢複的時候不能正常打開所有的資料庫檔案,資料庫會進入RECOVERY PENDING狀态。在這個狀态下管理者有兩種選擇,

(1)用ALTER ONLINE指令使SQLSERVER做一次上線,

(2)放棄目前資料庫,還原備份。

SUSPECT:

當資料庫做恢複的時候由于資料檔案或者日志檔案裡的損壞而失敗,資料庫會進入SUSPECT狀态。在這個狀态下管理者隻有3種選擇。

(1)再做一次ALTER ONLINE ,讓SQLSERVER再做一次恢複

(2)放棄目前資料庫,還原備份

(3)将資料庫狀态設定為EMERGENCY,繼續嘗試修複資料庫

EMERGENCY:

緊急模式。這個狀态下,SQLSERVER對沒有完成恢複的資料庫開放一個隻讀視窗,供管理者在沒有備份的情況下盡可能地挽救資料。

RESTORING:

資料庫正在做恢複。在任何狀态下,管理者都能去恢複資料庫。在WITH RECOVERY的模式下,恢複資料庫的最後一步,資料庫進入RECOVERING狀态。

恢複做完後,資料庫才能線上。

OFFLINE:

資料庫離線狀态。這時候資料庫也不能被通路。管理者可以使用ALTER ONLINE指令,讓資料庫開始恢複,進而進入ONLINE狀态。

下圖主要反映了資料庫的主要狀态之間的切換路徑

SQLSERVER資料庫主要狀态及其切換路徑SQLSERVER資料庫主要狀态和切換路徑
SQLSERVER資料庫主要狀态及其切換路徑SQLSERVER資料庫主要狀态和切換路徑