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

2021-06-11 18:57:34 字數 2126 閱讀 1267

乙個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狀態。

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

乙個sqlserver資料庫會處於很多種狀態,例如 online restoring recovering recovery pending suspect emergency offline等等。只有在online的狀態下,資料庫才能被正常訪問。下圖主要反映了資料庫的主要狀態之間的切換路徑 下面說...

SQLServer收縮資料庫

以下語句用於設定資料庫定時自動收縮資料庫 use master gosp dboption testdb,autoshrink true gouse testdb gocheckpoint go 清空日誌語句 dump transaction testdb with no log 截斷事務日誌 ba...

SQL Server資料庫檢修

使用資料庫的過程中,由於斷電或其他原因,有可能導致資料庫出現一些小錯誤,比如檢索某些表特別慢,查詢不到符合條件的資料等.出現這些情況的原因,往往是因為資料庫有些損壞,或索引不完整.在access中,有個修復資料庫的功能可以解決這個問題,在sql企業管理器,沒有這個功能,要用語句來完成,下面就介紹如何...