[SQL][問題處理]重建已經損毀的 msdb 資料庫

[SQL][問題處理]重建已經損毀的 msdb 資料庫

臨時收到一個朋友傳來的訊息,詢問如何重灌 SQL Server ?! 後來細問之下,原來他們的 SQL Server msdb 因為一些硬體異常的原因,造成損毀。之前又沒有對該資料庫備份,在修復幾次都失敗的狀況下,所以才想要重灌 SQL Server。

 

其實如果只是這樣的狀況,倒是可以不必要那麼麻煩,只需要把 msdb 重建,前後差不多只要花 5mins 的時間,風險也相對小很多,因此想說把相關步驟整理一下,讓他知道該如何來處理囉 !

 

首先我們先做點手腳,先把 msdb 故意弄壞,讓他不能修復。因此當我們使用 SSMS 的時候,就可能會出現以下的畫面:

msdb01

msdb02

 

因為這個時候如果您在 SSMS 下可能無法利用  GUI 的方式來讀取錯誤紀錄檔, 因此我們用之前另外一篇文章上所介紹的方法「透過 SQL 指令讀取 Log 紀錄」,利用 sp_readerrorlog 的預存程序,查看為什麼 msdb 是無法開啟的。此時從錯誤紀錄檔中看出來,檔案是存在的,只是因為某些原因造成檔案是無法開啟的

image

 

這個時候我們就先使用 CMD 的方式來下指令進行關閉資料庫,並且指定啟動參數重新啟動 SQL Server,這裡我們指定 Trace Flag 3608,他的意思是說當我們啟動 SQL Server 的時候,如果有系統資料庫需要進行 recovering,SQL Server只還原 master 的資料庫。

image

 

而在啟動之後,我們先下指令把 msdb 的資料庫給卸離,使用 sp_detach_db 的指令。當我們透過 sqlcmd 的工具下了「sp_detach_db 'msdb'」的指令完成之後,後續可以看到我們檢察系統中的資料庫,已經不存在有 msdb 了。

msdb05

 

但因為卸離資料庫之後,並不會把實體的資料庫檔案給刪除,因此可能後續我們重建 msdb 的時候會造成失敗,因此再卸離資料庫完成之後,我們需要手動將 msdb 的實體資料檔案給刪除

image

 

這個時候我們就可以使用 SSMS 的工具來下指令,重建 msdb 的資料庫了。因此我們在 SSMS 下新增查詢,開啟在 SQL Server 安裝目錄下會有個 Install 目錄,裡面會有個 instmsdb.sql 腳本檔案,我們可以選擇該檔案載入後,並且執行該腳本。

image

 

此時應該只需要不到 1mins 的時間,就可以完成資料庫的建立了

image

 

此時我們就可以順利的重新啟動 SQL Server 和 SQL Agent,完成一項簡單任務了。

image

 

後記 : 這個方法通常是用在 msdb 內沒有重要資料,且沒有備份的狀況下來使用,因此如果有 msdb 的資料庫,或者是可以修復的狀況下,就不用這樣的方式來進行了。