SQLSERVER數據庫主要狀態和切換路徑


SQLSERVER數據庫主要狀態和切換路徑

一個SQLSERVER數據庫會處於很多種狀態,例如 ONLINE 、RESTORING 、RECOVERING 、RECOVERY_PENDING  、SUSPECT、EMERGENCY 、OFFLINE等等。

只有在ONLINE的狀態下,數據庫才能被正常訪問。

下圖主要反映了數據庫的主要狀態之間的切換路徑

 

下面說一下這些狀態:

 RECOVERING:

SQLSERVER正做數據庫修改的時候,是先寫日志,然后再修改內存中的數據頁。至於硬盤上的數據頁內容,將在檢查點或者是SQLSERVER做LAZY WRITE的時候

完成。所以在大部分時間,都會有一些硬盤上的數據不是最新的版本。如果數據庫在這種時間點被關閉,下次SQLSERVER重新打開數據庫的時候,為了維護數據庫

的一致性,SQLSERVER必須做兩件事情:

1、重做redo

2、回滾和撤銷 undo/rollback

在上次數據庫被關閉的時候,可能有一些修改已經在數據頁上完成,但是事務本身沒有提交。對於這些做到一半的事務,SQLSERVER一律回滾,以保證數據庫事務的

一致性。所以磁盤里被改過的數據還要再改過來。

 

做這兩件事情的過程,叫做數據庫恢復。只有經過恢復的數據庫,才能保證是一個“一致的”數據庫,才能被安全地訪問。

從圖中可以看出,下面的動作會讓SQLSERVER決定對數據庫做恢復

 (1)CREATE:創建新數據庫

 (2)ALTER ONLINE:讓數據庫上線

 (3)RESTORE WITH RECOVERY:以RECOVERY方式恢復一個數據庫

 (4)DATABASE STARTUP:啟動數據庫,

 恢復如果能夠正常完成,那么數據庫將進入ONLINE狀態。

 

如果恢復動作因為有些資源不能訪問而失敗,例如某個數據文件或者日志文件打不開等等,數據庫會進入RECOVERY PENDING狀態。

如果恢復因為數據文件或者日志文件里的內容損壞而失敗,例如SQLSERVER要做重做,但是日志文件里相應的日志信息讀不出來;

或者要做撤銷,去修改數據文件里的頁面,卻發現頁面里的數據不是想象中的那樣,那么數據庫會進入一個很有名的狀態:可疑(SUSPECT)。

 

ONLINE:

這種狀態下,數據庫可以被普通用戶訪問,可以被查詢和修改。只有一種方法能夠使數據庫進入ONLINE狀態,那就是成功地恢復。

SQLSERVER通過這種機制保證數據庫的一致性。

一個ONLINE的數據庫在管理員發出"ALTER OFFLINE"命令后,可以進入OFFLINE狀態。在管理員發出“RESTORE”命令后,可以進入RESTORING狀態

 

RECOVERY PENDING:

如果數據庫在做恢復的時候不能正常打開所有的數據庫文件,數據庫會進入RECOVERY PENDING狀態。在這個狀態下管理員有兩種選擇,

要不用ALTER ONLINE命令使SQLSERVER做一次上線,要不就只能放棄當前數據庫,還原備份。

 

SUSPECT:

當數據庫做恢復的時候由於數據文件或者日志文件里的損壞而失敗,數據庫會進入SUSPECT狀態。在這個狀態下管理員只有3種選擇。

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

(2)放棄當前數據庫,還原備份

(3)將數據庫狀態設置為EMERGENCY,繼續嘗試修復數據庫

 

EMERGENCY:

緊急模式。這個狀態下,SQLSERVER對沒有完成恢復的數據庫開放一個只讀窗口,供管理員在沒有備份的情況下盡可能地挽救數據。

 

RESTORING:

數據庫正在做恢復。在任何狀態下,管理員都能去恢復數據庫。在WITH RECOVERY的模式下,恢復數據庫的最后一步,數據庫進入RECOVERING狀態。

恢復做完后,數據庫才能在線。

 

OFFLINE:

數據庫離線狀態。這時候數據庫也不能被訪問。管理員可以使用ALTER ONLINE命令,讓數據庫開始恢復,從而進入ONLINE狀態。

 

從上面可以看出,恢復是數據庫進入在線狀態的關鍵步驟。如果這一步失敗,數據庫就沒有辦法被使用!!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM