系統庫-關于SQL Server Model Database探究
概述
在前幾篇文章中我們先后介紹了SQL Server 的系統庫master、resource、msdb,今天我們探討一下另一個系統數據庫-Model 數據庫一些特征。顧名思義,model 數據庫用作在 SQL Server 實例中創建新數據庫的模型。這意味著當我們創建一個新數據庫時,這個新數據庫是通過復制模型數據庫形成的。
特征
1、新數據庫文件的初始大小繼承自模型數據庫
新數據庫的初始數據庫文件大小和自動增長選項與模型數據庫相同。讓我們用一個例子來探討一下。
在 SQL Server Management Studio (SSMS) 中,我們右鍵單擊模型數據庫并選擇 “屬性”。
在“文件”頁面,我們可以看到模型數據庫文件的相關信息。
現在,我們將更改數據和日志文件的大小以及自動增長選項,然后單擊“確定”。
之后,如果打開新建數據庫創建窗口,我們可以看到文件的默認大小和自動增長選項與為模型數據庫設置的相同。
因此,新的數據庫文件將默認使用模型數據庫中的大小和自動增長選項。
2、新建數據庫的恢復模型與model數據庫的恢復模型相同
新數據庫的恢復模型也繼承自模型數據庫。在下面的示例中,我們可以看到模型數據庫處于完全 恢復模型中:
我們將恢復模式從Full更改為Bulk-logged。此外,我們將更改兼容性級別和自動收縮選項。然后,我們單擊“確定” 以保存這些更改。
之后,如果我們打開 New Database 創建窗口,我們可以看到所有這些更改都應用于新數據庫。
因此,正如我們所見,在創建新數據庫時,數據庫恢復模型和其他數據庫選項都是從模型數據庫中復制而來的。
3、在model數據庫中創建的數據庫對象將存在于新創建的數據庫中
如果我們在模型數據庫中創建數據庫對象,這些對象將出現在該實例中的任何新數據庫中。
模型數據庫的這一特性可用于為新數據庫創建預定義模板。例如,如果需要在所有新數據庫中包含一些特殊對象,則可以將這些對象添加到模型數據庫中,而不是每次創建新數據庫后都創建它們。在這些情況下,建議對模型數據庫進行備份,以便在數據庫出現問題時恢復模型數據庫的修改版本。
4、在模型數據庫中創建的對象也出現在tempDB中
新數據庫不僅繼承了在模型數據庫中創建的對象,而且這些對象在創建時也存在于 TempDB 中。
首先,我們可以看到,在我們的實例中,TempDB 中沒有用戶定義的表和存儲過程。
由于我們已經在模型數據庫中添加了一個表和存儲過程,讓我們重新啟動實例。重新啟動后,我們可以在“表”和“存儲過程”下看到模型數據庫中定義的對象。
這是因為每次啟動 SQL Server 實例時,都會重新創建 TempDB 數據庫。因此,作為一個新創建的數據庫,它繼承了model數據庫中創建的對象。
5、模型數據庫必須始終存在于 SQL Server 上
如果模型數據庫不可用,則無法啟動 SQL Server 實例。這是因為當實例啟動時,它會重新創建 TempDB 數據庫,而模型數據庫是該發生所必需的。
讓我們重現這種情況。我們停止 SQL Server 并將模型數據庫數據文件移動到另一個位置。然后,如果我們嘗試啟動實例,我們將收到以下錯誤消息。
如果我們查看 ERRORLOG 文件,我們可以看到 SQL Server 無法啟動的原因是模型數據庫不可用。
因此,模型數據庫在每個 SQL Server 實例中都是必需的。
結論
綜上所述,模型數據庫被用作在實例中創建新數據庫的模板。這意味著實例中新創建的數據庫會繼承模型數據庫的選項、恢復模型、數據文件初始大小等。也可以在模型數據庫中創建數據庫對象,例如表,這些對象將出現在實例中創建的任何新數據庫中。TempDB 數據庫還繼承了模型數據庫的一些設置,因此模型數據庫必須存在才能啟動 SQL Server。