概述
在前几篇文章中我们先后介绍了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。