10.2 系统数据库


10.2.1 显示系统数据库

  SQL Server 默认有5个系统数据库:master、model、msdb、Resource和tempdb。

  系统数据库将显示在“系统数据库”节点下。用户创建的数据库将直接显示在“数据库”节点之下。每个 SQL Server 实例可以包含一个或多个用户数据库。

wKiom1VAdX-zrJoaAAG6GnDkujk044.jpg



10.2.2  master 数据库

  master 数据库记录 SQL Server 系统的所有系统级信息。这包括实例范围的元数据(例如登录帐户)、端点、链接服务器和系统配置设置。此外,master 数据库还记录了所有其他数据库的存在、数据库文件的位置以及 SQL Server 的初始化信息。

  如果 master 数据库不可用,则 SQL Server 无法启动。

  master 数据库的 ID 始终为 1。


最佳实践:

  鉴于 master 数据库的重要性,建议始终有一个 master 数据库的有效备份。

  如果创建、修改或删除了任意数据库,或者更改了服务器或数据库的配置值,或者添加或修改了登录帐户,由于 master 的数据已经更新,请尽快备份 master 数据库。


10.2.3  model 数据库

  model 数据库是一个模板,在 SQL Server 实例上创建的所有数据库将使用这个模板。model 数据库的全部内容(包括数据库选项)都会被复制到新的数据库。

  启动期间,也可使用 model 数据库的某些设置创建新的 tempdb,因此 model 数据库必须始终存在于 SQL Server 系统中。

  model 数据库的 ID 始终为 3。


10.2.4  msdb 数据库

  SQL Server 代理使用 msdb 数据库来计划警报和作业,SSMS、Service Broker 和数据库邮件等其他功能也使用该数据库。

  例如,SQL Server 在 msdb 中的表中自动保留一份完整的联机备份与还原历史记录。这些信息包括执行备份一方的名称、备份时间和用来存储备份的设备或文件。 SSMS 利用这些信息来提出计划,以还原数据库和应用任何事务日志备份。

  msdb 也会记录有关所有数据库的备份事件,即使它们是由自定义应用程序或第三方工具创建的。例如,如果使用调用 SQL Server 管理对象 (SMO) 对象的 Microsoft Visual Basic 应用程序执行备份操作,则事件将记录在 msdb 系统表、Microsoft Windows 应用程序日志和 SQL Server 错误日志中。

  msdb 数据库的 ID 始终为 4。


10.2.5  Resource 数据库

  Resource 数据库为只读数据库,它包含了 SQL Server 中的所有系统对象。SQL Server 系统对象(例如 sys.objects)在物理上保留在 Resource 数据库中,但在逻辑上显示在每个数据库的 sys 架构中。 Resource 数据库不包含用户数据或用户元数据。

  Resource 数据库支持更为轻松快捷地升级到新的 SQL Server 版本。在早期版本的 SQL Server 中,进行升级需要删除和创建系统对象。由于 Resource 数据库文件包含所有系统对象,因此,现在仅通过将单个 Resource 数据库文件复制到本地服务器便可完成升级。

  Resource 数据库取决于 master 数据库的位置。如果移动了 master 数据库,则必须将 Resource 数据库移动到同一个位置。Resource 数据库的物理文件名为 mssqlsystemresource.mdf 和 mssqlsystemresource.ldf。 这些文件位于 <drive>:\Program Files\Microsoft SQL Server\MSSQL12.<实例 ID>\MSSQL\Binn\ 文件夹。每个 SQL Server 实例都具有一个(也是唯一的一个)关联的 mssqlsystemresource.mdf 文件,并且实例间不共享此文件。 

  SQL Server 不能备份 Resource 数据库。

  Resource 数据库的 ID 始终为 32767。如果确定需要修改 Resource 数据库,请在微软的数据库专家指导下进行。

  与 Resource 数据库相关联的其他重要值是版本号和数据库的上次更新时间。以下查询可以确定 Resource 数据库的版本号以及上次升级时间。

SELECT SERVERPROPERTY('ResourceVersion');

GO

SELECT SERVERPROPERTY('ResourceLastUpdateDateTime');

GO


10.2.6  tempdb 数据库

  tempdb 系统数据库是一个全局资源,可供连接到 SQL Server 实例的所有用户使用,并可用于保存临时表、临时变量、游标、排序的中间结果的工作表、行版本等。

  每次启动 SQL Server 时都会重新创建 tempdb,从而在系统启动时总是保持一个干净的数据库副本。

  因为每次启动 SQL Server 时都会创建 tempdb,所以 model 数据库必须始终存在于 SQL Server 系统中。

  不允许对 tempdb 进行备份和还原操作。

  tempdb 数据库的 ID 始终为 2。


10.2.7  distribution 数据库

  数据库的 ID 最小为 5。

  如果 SQL Server 实例配置为复制分发服务器,复制(Replication)管理程序将自动在 SQL Server 实例中创建一个 distribution 数据库。此数据库存储元数据、各种复制的历史记录数据以及用于事务复制的事务。由于此数据库位于“系统数据库”节点,因此不能直接删除此数据库,而是通过删除对应的分发发布服务器。



提示:

  SQL Server 2000 有一个 NorthWind 演示数据库。SQL Server 2005 及后续产品不再提供演示数据库,可以在开源网站 http://msftdbprodsamples.codeplex.com/ 下载。