一.概述 在前面講過"sql server 備份與恢復系列"都是集中在用戶資料庫上。sql server還維護著一組系統資料庫,這些系統資料庫對於伺服器實例的運行至關重要。在每次進行系統更新後必須備份多個系統資料庫。必須備份的系統資料庫包括:msdb,master,model。如果使用了複製,還要備 ...
一.概述
在前面講過"sql server 備份與恢復系列"都是集中在用戶資料庫上。sql server還維護著一組系統資料庫,這些系統資料庫對於伺服器實例的運行至關重要。在每次進行系統更新後必須備份多個系統資料庫。必須備份的系統資料庫包括:msdb,master,model。如果使用了複製,還要備份distribution庫。備份以防止系統故障時,用於還原恢復。
1.master資料庫介紹
master資料庫記錄著所有系統級信息,如登錄賬戶,系統配置,端點和憑據,以及訪問其他資料庫伺服器需要的信息。還有記錄實例啟動時需要的初始化信息,其它資料庫主文件位置,master是sql server啟動時第一個打開的資料庫,如果master庫有問題,整個sql server無法正常啟動。
master資料庫不大,建議經常做完整資料庫備份。如果因為master庫損壞無法啟動伺服器實例,又沒有備份,則必須重建。 重建後會刪除並重新創建msdb庫,導致丟失所有計劃信息以及備份和還原歷史記錄。sql server也被重裝過一樣。用戶記錄丟失,資料庫要再次附加,任務計劃要重建。是一件很折騰的過程。
恢復master資料庫使用的還是restore指令。還原master資料庫後,sql server實例將自動停止。因為master記錄了所有資料庫主文件地址,通過這些地址尋找這些資料庫。如果將master資料庫恢復到一臺新的伺服器上,難免文件地址會發生變化,這時找不到地址,就需要使用單用戶模式啟動sql server,將master資料庫里的信息修改成新的地址。
如果要啟動單用戶模式,首先停止所有sql server服務(伺服器實例本身除外),並停止所有sql server實用工具。否則單用戶啟動後它們占用了這個用戶連接,管理員反而連接不進去了。
2.model資料庫
當創建用戶資料庫時,model資料庫是sql server使用的模板。不推薦對該庫對任務修改。雖然該庫內容一般不發生變化,但sql server在啟動時候,需要使用model庫的某些設置創建新的tempdb。如果沒有tempdb ,實例無法啟動。
3. msdb資料庫
msdb存儲了計劃信息,備份和還原歷史記錄信息等。預設情況下,msdb資料庫使用簡單恢復模式。如果在恢復用戶資料庫時使用msdb資料庫中的備份與還原歷史記錄信息,建議對msdb資料庫使用完整恢復模式,並建議將msdb資料庫事務日誌放置在容錯存儲設備中。
4. tempdb資料庫和資源資料庫
sql server還有二個系統資料庫比較特別,是tempdb和資源資料庫Resource Database。缺了這兩個資料庫, sqlserver無法啟動,但它們又不能做資料庫備份。tempdb系統資料庫是一個全局資源,可供連接到sqlserver實例的所有用戶使用。每次啟動sqlserver,會重建tempdb庫,保持一個乾凈的副本。會話連接斷開後,會自動刪除該會話的臨時表。因此tempdb不會有什麼內容需要在伺服器關閉的時候保存下來。tempdb不用備份和還原操作,保護好model資料庫就能保證在下次啟動時,得到一個好的tempdb資料庫。
Resource 資料庫是一個只讀資料庫,它包含了sql server中的所有系統對象。例如sys.objects。Resource 資料庫從來不做修改,所以sql server理論上不用備份Resource 資料庫。考慮到物理磁損壞,可以做基於文件的備份或基於磁碟的備份。
二. 系統資料庫備份策略
-- 查看系統資料庫預設的恢復模式 SELECT name, recovery_model_desc FROM sys.databases
系統資料庫 | 說明 | 是否支持備份 | 恢復模式 | 註釋 |
master | 記錄sqlserver系統的所有系統級 信息的資料庫 |
支持 | 簡單 | 必須經常備份,定期備份計劃,大量更新後補充備份。 |
model | 為所有資料庫創建的模板 | 支持 | 用戶可配置 | 根據需要創建完整資料庫備份,由於資料庫較小且 很少改動,因此不必備份日誌。 |
msdb | sqlserver代理用來安排警報和作業 以及記錄操作員信息的資料庫。msdb 資料庫還包含歷史記錄表,例如備份和 還原歷史記錄表 |
支持 | 簡單 (預設值) |
更新時備份msdb資料庫。 |
Resource | 所有系統對象副本的只讀資料庫 | 不支持 | 不能備份Resource資料庫。 | |
tempdb | 用於保存臨時或中間集的工作空間, 啟動實例時會重新創建此庫,關閉服務 時永久刪除tempdb資料庫中所有數據 |
不支持 | 簡單 | 無法備份tempdb資料庫。 |
distribution |
複製分發伺服器時才存在此資料庫。 |
支持 | 簡單 | 根據具體的複製配置決定。 |