背景 新年伊始,小伙伴是不是還處於假期綜合症的狀態。我們在日常運維資料庫的時候,會時常查看資料庫的狀態,檢查資料庫是否正常運行。對於這些狀態的熟悉對於我們處理資料庫無法訪問的 問題非常重要。當資料庫突然變成一個你沒有見到過的狀態時,你就會非常慌亂,手足無措。這裡給小伙伴普及下資料庫的各個狀態。已經他 ...
背景
新年伊始,小伙伴是不是還處於假期綜合症的狀態。我們在日常運維資料庫的時候,會時常查看資料庫的狀態,檢查資料庫是否正常運行。對於這些狀態的熟悉對於我們處理資料庫無法訪問的
問題非常重要。當資料庫突然變成一個你沒有見到過的狀態時,你就會非常慌亂,手足無措。這裡給小伙伴普及下資料庫的各個狀態。已經他們是怎麼轉換的
案例
前兩天在處理一個客戶問題,突然某個資料庫無法訪問了。資料庫下麵的表也無法查看。從SSMS界面上看資料庫是正常的狀態(就是資料庫名字後面沒有顯示特別的狀態)。查看
SYS.DATABASES 查看狀態列,發現是ONLINE。此時其他資料庫是正常的,就這個庫有問題。肯定是資料庫狀態不對。 那麼問題出在哪裡呢? 仔細觀察發現這個問題的資料庫 collation_name 是null 值。
原來問題在這,
剛剛聯機的資料庫不一定馬上能接受連接。 要確定資料庫何時可以接受連接,可以查詢 sys.databases 的 collation_name 列或 DATABASEPROPERTYEX 的 Collation 屬性。 在資料庫排序規則返回非 Null 值之後,資料庫就可以接受連接了。
於是用命令把資料庫設置為離線,然後馬上聯機,再查看sys.databases 的 collation_name 列 變成了非null值。此時資料庫恢復正常。
狀態的轉換
資料庫有很多狀態。他們是如何在這些狀態之間進行切換的呢?下麵這個圖非常清晰的標示了各個狀態的切換。在我剛學習資料庫的時候,這個圖給了我很大的幫助,
讓我對資料庫各個狀態的轉換有了很清楚的認識。
ONLINE (線上)
資料庫可正常運行
RESTORING (正在還原)
資料庫正在還原,當我們還原資料庫使用NORECOVERY 模式時,資料庫就會變成該狀態
RECOVERING (正在恢復)
資料庫啟動,資料庫創建,ALTER ONLINE,RESTORE WITH RECOERY 時,會經過這個狀態,進行REDO,UNDO等操作。此時如果遇到問題就進入RECOVERY_PENDING。如果正常就會變成ONLINE。
RECOVERY_PENDING(等待恢復)
資料庫在還原時遇到跟資源相關的錯誤,表明還原進程被掛起,資料庫不能開始資料庫的數據和日誌的還原進程,這種情況下,最可能的原因是丟失數據文件或日誌文件。
SUSPECT (置疑)
資料庫可能損壞了
EMERGENCY (緊急)
供DBA用來修複資料庫的狀態
OFFLINE (離線)
離線狀態
總結
瞭解資料庫處於的狀態非常重要。我們如果還不熟悉的小伙伴可以看看。