SQL Server 2012笔记分享-38:了解系统数据库

master 数据库

记录 SQL Server 实例的所有系统级信息。

master 数据库记录 SQL Server 系统的所有系统级信息。这包括实例范围的元数据(例如登录帐户)、端点、链接服务器和系统配置设置。此外,master 数据库还记录了所有其他数据库的存在、数据库文件的位置以及 SQL Server 的初始化信息。因此,如果 master 数据库不可用,则 SQL Server 无法启动。在 SQL Server 中,系统对象不再存储在 master 数据库中,而是存储在 Resource 数据库中。

下表列出了 master 数据和日志文件的初始配置值。对于不同版本的 SQL Server,这些文件的大小可能略有不同。

SQL Server 2012笔记分享-38:了解系统数据库

使用 master 数据库时,请考虑下列建议:

  1. 始终有一个 master 数据库的当前备份可用。

  2. 执行下列操作后,尽快备份 master 数据库:

  3. 创建、修改或删除任意数据库

  4. 更改服务器或数据库的配置值

  5. 修改或添加登录帐户

  6. 不要在 master 中创建用户对象。否则,必须更频繁地备份 master。

  7. 不要针对 master 数据库将 TRUSTWORTHY 选项设置为 ON。

不能在 master 数据库中执行下列操作:

  1. 添加文件或文件组。 

  2. 更改排序规则。默认排序规则为服务器排序规则。 

  3. 更改数据库所有者。master 归 dbo 所有。 

  4. 创建全文目录或全文索引。 

  5. 在数据库的系统表上创建触发器。 

  6. 删除数据库。 

  7. 从数据库中删除 guest 用户。 

  8. 启用变更数据捕获。 

  9. 参与数据库镜像。 

  10. 删除主文件组、主数据文件或日志文件。 

  11. 重命名数据库或主文件组。 

  12. 将数据库设置为 OFFLINE。 

  13. 将数据库或主文件组设置为 READ_ONLY。

   

===============================================================

msdb 数据库

用于 SQL Server 代理计划警报和作业。

msdb 数据库由 SQL Server 代理用于计划警报和作业,也可以由其他功能(如 Service Broker 和数据库邮件)使用。

SQL Server 2012笔记分享-38:了解系统数据库

不能在 msdb 数据库中执行下列操作:

  1. 更改排序规则。默认排序规则为服务器排序规则。 

  2. 删除数据库。 

  3. 从数据库中删除 guest 用户。 

  4. 启用变更数据捕获。 

  5. 参与数据库镜像。 

  6. 删除主文件组、主数据文件或日志文件。 

  7. 重命名数据库或主文件组。 

  8. 将数据库设置为 OFFLINE。 

  9. 将主文件组设置为 READ_ONLY。

===============================================================

   

model 数据库

用作 SQL Server 实例上创建的所有数据库的模板。对 model 数据库进行的修改(如数据库大小、排序规则、恢复模式和其他数据库选项)将应用于以后创建的所有数据库。

model 数据库用作在 SQL Server 实例上创建的所有数据库的模板。因为每次启动 SQL Server 时都会创建 tempdb,所以 model 数据库必须始终存在于 SQL Server 系统中。

   

model 的用法

   

当发出 CREATE DATABASE 语句时,将通过复制 model 数据库中的内容来创建数据库的第一部分,然后用空页填充新数据库的剩余部分。

如果修改 model 数据库,之后创建的所有数据库都将继承这些修改。例如,可以设置权限或数据库选项或者添加对象,例如,表、函数或存储过程。

SQL Server 2012笔记分享-38:了解系统数据库

===================================================================== 

   

Resource 数据库

一个只读数据库,包含 SQL Server 包括的系统对象。系统对象在物理上保留在 Resource 数据库中,但在逻辑上显示在每个数据库的 sys 架构中。

Resource 数据库取决于 master 数据库的位置。如果移动了 master 数据库,则必须将 Resource 数据库移动到同一个位置。

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

Resource 数据库的物理文件名为 mssqlsystemresource.mdf 和 mssqlsystemresource.ldf。这些文件位于 <驱动器>:\Program Files\Microsoft SQL Server\MSSQL10_50.<instance_name>\MSSQL\Binn\ 中。每个 SQL Server 实例都具有一个(也是唯一的一个)关联的 mssqlsystemresource.mdf 文件,并且实例间不共享此文件。

SQL Server 不能备份 Resource 数据库。通过将 mssqlsystemresource.mdf 文件作为二进制 (.EXE) 文件而不是作为数据库文件,可以执行您自己的基于文件的备份或基于磁盘的备份,但是不能使用 SQL Server 还原数据库。只能手动还原 mssqlsystemresource.mdf 的备份副本,并且必须谨慎,不要使用过时版本或可能不安全的版本覆盖当前的 Resource 数据库。

如何访问resource数据库,可以参考SQL 2012的联机文档。

=====================================================================

   

tempdb 数据库

一个工作空间,用于保存临时对象或中间结果集。

tempdb 系统数据库是一个全局资源,可供连接到 SQL Server 实例的所有用户使用,并可用于保存下列各项:

  1. 显式创建的临时用户对象,例如全局或局部临时表、临时存储过程、表变量或游标。

  2. SQL Server 数据库引擎创建的内部对象,例如,用于存储假脱机或排序的中间结果的工作表。

  3. 由使用已提交读(使用行版本控制隔离或快照隔离事务)的数据库中数据修改事务生成的行版本。

  4. 由数据修改事务为实现联机索引操作、多个活动的结果集 (MARS) 以及 AFTER 触发器等功能而生成的行版本。

tempdb 中的操作是最小日志记录操作。这将使事务产生回滚。每次启动 SQL Server 时都会重新创建 tempdb,从而在系统启动时总是保持一个干净的数据库副本。在断开联接时会自动删除临时表和存储过程,并且在系统关闭后没有活动连接。因此 tempdb 中不会有什么内容从一个 SQL Server 会话保存到另一个会话。不允许对 tempdb 进行备份和还原操作。

SQL Server 2012笔记分享-38:了解系统数据库

=====================================================================

修改系统数据

SQL Server 不支持用户直接更新系统对象(如系统表、系统存储过程和目录视图)中的信息。实际上,SQL Server 提供了一整套管理工具,用户可以使用这些工具充分管理他们的系统以及数据库中的所有用户和对象。其中包括:

  1. 管理实用工具,如 SQL Server Management Studio。

  2. SQL-SMO API。此工具使程序员获得在其应用程序中管理 SQL Server 的全部功能。

  3. Transact-SQL 脚本和存储过程。它们可以使用系统存储过程和 Transact-SQL DDL 语句。

这些工具保护应用程序不受系统对象更改的影响。例如,SQL Server 有时需要更改 SQL Server 新版本中的系统表,以支持添加到该版本中的新功能。但应用程序在发出直接引用系统表的 SELECT 语句时,通常依赖于旧的系统表格式。站点可能在重写从系统表中进行选择的应用程序之后,才能升级到 SQL Server 的新版本。SQL Server 考虑了系统存储过程、DDL 和 SQL-SMO 发布的接口,力求维持这些接口的向后兼容性。

SQL Server 不支持对系统表定义触发器,因为触发器可能会更改系统的操作。

======================================================================

本文出自 “曾垂鑫的技术专栏” 博客,谢绝转载!

SQL Server 2012笔记分享-38:了解系统数据库,布布扣,bubuko.com

SQL Server 2012笔记分享-38:了解系统数据库

上一篇:数据库范式的设计


下一篇:MySQL新旧版本ORDER BY 处理方法