資料庫狀態

2021-09-12 00:05:43 字數 2398 閱讀 2483

--

查詢db狀態

select databasepropertyex('

adventureworks2016

','status')

select state_desc from sys.databases where name=

'adventureworks2016'--

更改db狀態

alter

database adventureworks2016 set

offline

alter

database adventureworks2016 set

online

alter

database adventureworks2016 set

emergency

alter

database adventureworks2016 set

single_user

--有時候得先殺該db所有程序才能恢復多使用者

alter

database adventureworks2016 set multi_user

sql server在做資料庫修改時,是先寫日誌,然後在修改記憶體中的資料頁。至於硬碟上的資料頁內容,將在檢查點(checkpoint)或者是sql server在做lazy write的時候更新。所以在大部分時候,有一些硬碟上的資料頁面裡的資料不是最新的版本。也就是說,硬碟上的資料和實際完成的修改,並不「一致」。如果資料庫在這個時間點被關閉,下次sql server重新開啟資料庫的時候,為了維護資料庫的一致性,必須完成三件事。

1.分析要做的工作:sql server會去分析事物日誌檔案,找到要重做和回滾的事務。

2.redo(重做):sql server會將已經提交,但是還沒有來得及在硬碟上完成的修改重新做一遍。

3.rollback&undo(撤銷和回滾):在上次資料庫被關閉時,可能有一些修改已經在資料頁面上完成,但是事務本身沒有被提交。對於這些做到一半的事務,sql server一律全部回滾,以保證資料庫的一致性。所以磁碟裡被改過的資料還要再被改回來。

做這三件事的過程,被稱為「資料庫恢復」(recovery)。只有經過恢復的資料庫,才能保證是乙個「一致性」資料庫,才能夠被安全的訪問。

下面的動作會讓sql server決定對資料庫做恢復。

(1)create:

(2)alter  online:

(3)rrestore with recovery:以recovery的方式恢復乙個資料庫

(4)database startup:開啟資料庫。只要資料庫模式不是設的自動關閉(auto close),sql server會在服務啟動的時候自動開啟每乙個資料庫。如果乙個使用者資料庫設成自動關閉,會在第乙個使用者訪問資料庫的時候做這個動作。

恢復如果能夠正常完成,那麼資料庫將進入online狀態。

恢復動作如果因為有些資源不能訪問而失敗,例如某個資料檔案或者日誌檔案打不開等,資料庫會進入recovery pending模式。

恢復動作因為資料檔案或日誌檔案裡的內容有損壞被失敗,例如sql server要重做事務修改,但是日誌檔案裡相應的日誌資訊讀不出來;或者要撤銷事務,修改資料檔案的頁面時卻發現頁面裡的資料長得不是想象的那個樣子,那麼資料庫就會進入乙個有名的狀態;質疑(suspect)

在這種狀態下,資料庫可以被普通使用者訪問,可以被查詢和修改。只有一種方法能夠使得資料庫進入online狀態,那就是已經成功的完成了資料庫恢復。sql server通過這種機制保證資料庫的一致性。

乙個online的資料庫在管理員發出「alter offfline」指令後,可以進入offline狀態。在管理員發出「restore」指令後,可以進入resotring狀態。

如果資料庫在做恢復的時候不能正確開啟所有的資料庫檔案,資料庫會進入recovery pending的狀態。在這個狀態下管理員有2種選擇:一種是解決資料庫檔案不能正確開啟問題,然後用alter online指令命令sql server在做一次恢復;或者放棄當前的資料庫,還原備份。

當資料庫做恢復的時候由於資料庫檔案或者日誌檔案裡的損壞而失敗,資料庫會進入suspect狀態。在這個狀態下管理員只有3中選擇。

(1)在做一次alter online,命令sql server在做一次恢復。

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

(3)將資料庫狀態設成emergency,繼續嘗試修復資料庫。

緊急模式。在這個模式下,sql server對沒有完成恢復的資料庫開放乙個唯讀得視窗,供管理員在沒有備份的情況下盡可能地挽救資料。

資料庫離線狀態。這是資料庫也不能被訪問。管理員可以發出alter online命令,讓資料開始恢復,從而進入online狀態。

posted @

2019-03-05 13:52

jinweichang 閱讀(

...)

編輯收藏

資料庫訂單狀態

order info 表 剛下完訂單 order status 0 shipping status 0 pay status 0 取消order status 2 shipping status 0 pay status 0 確認order status 1 shipping status 0 pa...

SQL Server資料庫狀態和檔案狀態

資料庫狀態 database states 查詢資料庫的當前狀態 1 查詢所有資料庫的狀態 通過sys.databases目錄檢視的state desc列 user master goselect state desc name from sys.databases go 2 查詢指定資料庫的狀態,...

檢視Oracle資料庫狀態

show sga set wrap off set linesize 400 檢視正在執行的後台程序 select from v bgprocess select from v bgprocess where paddr 00 檢視資料庫的物理組成 檔案情況 select from v contro...