SQLSERVER 運維日記 資料庫狀態

2021-07-30 22:22:35 字數 1315 閱讀 7194

新年伊始,小夥伴是不是還處於假期綜合症的狀態。我們在日常運維資料庫的時候,會時常檢視資料庫的狀態,檢查資料庫是否正常執行。對於這些狀態的熟悉對於我們處理資料庫無法訪問的

問題非常重要。當資料庫突然變成乙個你沒有見到過的狀態時,你就會非常慌亂,手足無措。這裡給小夥伴普及下資料庫的各個狀態。已經他們是怎麼轉換的

前兩天在處理乙個客戶問題,突然某個資料庫無法訪問了。資料庫下面的表也無法檢視。從ssms介面上看資料庫是正常的狀態(就是資料庫名字後面沒有顯示特別的狀態)。檢視

sys.databases 檢視狀態列,發現是online。此時其他資料庫是正常的,就這個庫有問題。肯定是資料庫狀態不對。 那麼問題出在**呢? 仔細觀察發現這個問題的資料庫 collation_name 是null 值。

原來問題在這,

剛剛聯機的資料庫不一定馬上能接受連線。 要確定資料庫何時可以接受連線,可以查詢 sys.databases 的 collation_name 列或 databasepropertyex 的 collation 屬性。 在資料庫排序規則返回非 null 值之後,資料庫就可以接受連線了。

於是用命令把資料庫設定為離線,然後馬上聯機,再檢視sys.databases 的 collation_name 列 變成了非null值。此時資料庫恢復正常。

資料庫有很多狀態。他們是如何在這些狀態之間進行切換的呢?下面這個圖非常清晰的標示了各個狀態的切換。在我剛學習資料庫的時候,這個圖給了我很大的幫助,

讓我對資料庫各個狀態的轉換有了很清楚的認識。

資料庫可正常執行

restoring (正在還原)

資料庫正在還原,當我們還原資料庫使用norecovery 模式時,資料庫就會變成該狀態

recovering (正在恢復)

資料庫啟動,資料庫建立,alter online,restore with recoery 時,會經過這個狀態,進行redo,undo等操作。此時如果遇到問題就進入recovery_pending。如果正常就會變成online。

recovery_pending(等待恢復)

資料庫在還原時遇到跟資源相關的錯誤,表明還原程序被掛起,資料庫不能開始資料庫的資料和日誌的還原程序,這種情況下,最可能的原因是丟失資料檔案或日誌檔案。

suspect  (置疑)

資料庫可能損壞了

emergency (緊急)

供dba用來修復資料庫的狀態

offline (離線)

離線狀態

了解資料庫處於的狀態非常重要。我們如果還不熟悉的小夥伴可以看看。

SQL SERVER 運維日記 資料庫備份

昨天下午突然看到,爐石傳說 遊戲資料庫發生宕機並引發資料丟失事故的新聞。剛看到時,滿滿的不可思議。暴雪啊,網易啊。都是很牛叉的公司。他們出的遊戲我都是很喜歡的。當我看到,第一時間著手搶修,重啟伺服器,並嘗試資料恢復時,我的想法是他們的高可用方案呢?為什麼不馬上切換?當我看到相關備份資料庫也出現故障時...

SQL SERVER 運維日記 資料庫備份

昨天下午突然看到,爐石傳說 遊戲資料庫發生宕機並引發資料丟失事故的新聞。剛看到時,滿滿的不可思議。暴雪啊,網易啊。都是很牛叉的公司。他們出的遊戲我都是很喜歡的。當我看到,第一時間著手搶修,重啟伺服器,並嘗試資料恢復時,我的想法是他們的高可用方案呢?為什麼不馬上切換?當我看到相關備份資料庫也出現故障時...

SQL SERVER運維日記 收縮資料庫

先檢查下,有沒有可以刪除的不用的檔案,結果都是重要的或者拿不準的。先收縮下資料庫吧,點選執行。等收縮完成就可以繼續去根hr妹妹聊天了。突然 座機和手機齊鳴,小王心裡一種不祥的預感呢?好像這個場景在 見過。不會是資料庫阻塞了吧?手忙腳亂的先接起手機,因為來電顯示是某業務部門主管 小王啊,現在系統卡死了...