文章目录
学了许久数据库的知识了,到今天我才了解到五个系统数据库是什么。在SQL sever系统中,系统运行时会用到的相关信息,如系统对象的组态设置等,都是以系统的形式存在,而存放这些系统信息的数据库成为系统数据库。成功安装SQL sever后,系统会自动建立master、model、msdb、tempdb及resource五个系统数据库。
一、master数据库
顾名思义,master是“主人,主管”的意思,数据库系统中少了它可不行。
master数据库是SQL sever系统中最重要的数据库,它记录SQL sever系统的所有系统级信息,这包括实例范围的元数据(例如登录帐户)、端点、链接服务器和系统配置设置,不过系统对象不在master数据库中,而在resource数据库中。master数据库记录了所有其他数据库的存在、数据库的文件的位置;
- 有关master数据库的限制有:
- master数据库不可用,则SQLServer实例就无法启动;
- 不能给master数据库添加文件或文件组,不能更改master数据库的排序规则,默认是实例的排序规则;
- 不能删除master数据库,不能删除guest用户;
- 不能在master数据库创建触发器,不能启动CDC(数据变更捕获),不能参与数据库镜像,不能设置为READ_ONLY(只读),不能设置为OFFLINE(脱机);
- 不能更改数据库所有者,master的所有者是sa;
- 不能创建全文目录或全文索引;
- 不能删除主文件组、主数据文件或日志文件;
- 不能重命名数据库或主文件组;
master数据库的物理属性
下表列出了SQL Server数据库托管实例的master数据和日志文件的初始配置值。 对于不同版本的SQL Server,这些文件的大小可能略有不同。
文件 | 逻辑名称 | 物理名称 | 文件增长 |
---|---|---|---|
主数据 | master | master.mdf | 以10%的速度自动增长到磁盘充满为止 |
日志 | mastlog | mastlog.ldf | 以10%的速度自动增长到最大2TB |
数据库选项
下表列出了SQL Server数据库托管实例的 master 数据库中部分数据库选项的默认值,以及该选项是否可以修改。
数据库选项 | 默认值 | 是否可修改 |
---|---|---|
ALLOW_SNAPSHOT_ISOLATION | ON | 否 |
ANSI_NULL_DEFAULT | OFF | 是 |
ANSI_NULLS | OFF | 是 |
ANSI_PADDING | OFF | 是 |
ANSI_WARNINGS | OFF | 是 |
ARITHABORT | OFF | 是 |
AUTO_CLOSE | OFF | 否 |
AUTO_CREATE_STATISTICS | ON | 是 |
AUTO_SHRINK | OFF | 否 |
AUTO_UPDATE_STATISTICS | ON | 是 |
AUTO_UPDATE_STATISTICS_ASYNC | OFF | 是 |
CHANGE_TRACKING | OFF | 否 |
CONCAT_NULL_YIELDS_NULL | OFF | 是 |
CURSOR_CLOSE_ON_COMMIT | OFF | 是 |
以下省略一万字……太多选项了,没有一一列举出来,毕竟作者就算写出来了也记不住,哈哈哈。若有感兴趣的在这里- >master数据库可以看到每个数据库选项。
二、model数据库
model数据库用作在SQL Server实例上创建的所有数据库的模板。
因为每次启动时都会创建tempdb SQL Server ,所以model数据库必须始终存在于SQL Server系统中。 model数据库的全部内容(包括数据库选项)都会被复制到新的数据库。 启动期间,也可使用model数据库的某些设置创建新的tempdb,因此model数据库必须始终存在于SQL Server系统中。
- 关于model数据库的说明有:
- model数据库是一个模板数据库,在create database时,将通过复制model数据库中的内容来创建数据库的第一部分,然后用空页填充新数据库的剩余部分;
- model数据库必须存在,model数据库的全部内容都会被复制到新数据库中,例如设置的权限、数据库选项、表、函数、存储过程等等;
- model数据库的数据和日志文件默认初始大小为8MB;
- 每次系统重启创建的tempdb数据库的模板都来自于model;
- 关于model数据库的限制有十个不能(每一点前面都省略了一个不能):
- 添加文件或文件组;
- 更改排序规则。默认排序规则为服务器排序规则;
- 更改数据库所有者,model的所有者是sa;
- 删除model数据库;
- 从model数据库中删除guest用户;
- 启用变更数据捕获;
- 参与数据库镜像;
- 删除主文件夹、主数据文件或日志文件,重命名数据库或主文件组;
- 将数据库设置为OFFLINE(脱机),将主文件组设置为READ_ONLY(只读);
- 使用 WITH ENCRYPTION 选项创建过程、视图或触发器。 加密密钥与在其中创建对象的数据库绑定在一起。 在 model 数据库中创建的加密对象只能用于 model中。
model的物理属性
下表列出了 model 数据和日志文件的初始配置值。
文件 | 逻辑名称 | 物理名称 | 文件增长 |
---|---|---|---|
主数据 | modeldev | model.mdf | 以64MB的速度自动增长到磁盘充满为止 |
日志 | modellog | modellog.ldf | 以64MB的速度自动增长到最大2TB |
关于model数据库的选项的默认值及该选项是否可以修改,感兴趣的可以戳这- >model数据库
三、msdb数据库
msdb数据库是代理服务数据库,为其报警、任务调度和记录操作员的操作提供存储空间。SQL Server Management Studio(是一个用于访问、配置、管理和开发SQL sever的所有组件的一个集成环境)、Service Broker和数据库邮件等其他功能也使用该数据库。
例如,SQL Server在msdb中的表中自动保留一份完整的联机备份和还原历史记录。 这些信息包括执行备份一方的名称、备份时间和用来存储备份的设备或文件。
SQL Server Management Studio使用这些信息来提出计划,还原数据库和应用任何事务日志备份。 将会记录有关所有数据库的备份事件,即使它们是由自定义应用程序或第三方工具创建的。
默认情况下msdb使用简单模式。
- 关于msdb的限制有七个不能(每一点前面都省略了不能):
- 更改排序规则。 默认排序规则为服务器排序规则;
- 删除数据库;
- 从数据库中删除 guest 用户;
- 启用变更数据捕获;
- 参与数据库镜像;
- 删除主文件组、主数据文件或日志文件,重命名数据库或主文件组;
- 将数据库设置为OFFLINE,将主文件组设置为READ_ONLY。
msdb的物理属性
下表列出了 msdb 数据和日志文件的初始配置值。 对于不同版本的 SQL Server 数据库引擎,这些文件的大小可能略有不同。
文件 | 逻辑名称 | 物理名称 | 文件增长 |
---|---|---|---|
主数据 | MSDBDATA | MADBDATA.mdf | 以10%的速度自动增长到磁盘充满为止 |
日志 | MSDBLOG | MSDBLOG.ldf | 以10%的速度自动增长到最大2TB |
同样,关于msdb数据库的选项的默认值及该选项是否可以修改,感兴趣的可以看看- >msdb数据库
四、tempdb数据库
这个概念在作者前面的文章- >三级数据库知识点学习(一)提到过。它是一个临时数据库,是一个全局资源,可供连接到SQL sever实例或SQL数据库的所有用户使用。
tempdb用于保留:
- 显式创建的临时用户对象,例如:全局或局部临时表及索引、临时存储过程、表变量、表值函数返回的表或游标。
- 由数据库引擎创建的内部对象。其中包括:
- 用于储存假脱机、游标、排序和临时大型对象 (LOB) 存储的中间结果的工作表。
- 用于哈希联接或哈希聚合操作的工作文件。
- 用于创建或重新生成索引等操作(如果指定了SORT_IN_TEMPDB)的中间排序结果,或者某些GROUP BY、ORDER BY或UNION查询的中间排序结果。
- 版本存储区。是数据页的集合,它包含支持使用行版本控制的功能所需的数据行。 共有两个版本存储区:公用版本存储区和联机索引生成版本存储区。 版本存储区包含:
- 由使用已提交读(使用行版本控制隔离或快照隔离事务)的数据库中数据修改事务生成的行版本。
- 由数据修改事务为实现联机索引操作、多个活动的结果集 (MARS) 以及AFTER触发器等功能而生成的行版本。
关于tempdb的限制:
不能对 TempDB 数据库执行以下操作:
- 添加文件组;
- 备份或还原数据库;
- 更改排序规则。 默认排序规则为服务器排序规则;
- 更改数据库所有者。 TempDB 的所有者是 sa;
- 创建数据库快照;
- 删除数据库;
- 从数据库中删除 guest 用户;
- 启用变更数据捕获,参与数据库镜像;
- 删除主文件组、主数据文件或日志文件,重命名数据库或主文件组;
- 运行 DBCC CHECKALLOC,运行 DBCC CHECKCATALOG
- 将数据库设置为 OFFLINE,将数据库或主文件组设置为 READ_ONLY。
tempdb的物理属性
下表列出了 SQL Server 中 TempDB 数据和日志文件的初始配置值(基于模型数据库的默认设置)。 对于不同版本的 SQL Server,这些文件的大小可能略有不同。
文件 | 逻辑名称 | 物理名称 | 初始大小 | 文件增长 |
---|---|---|---|---|
主数据 | tempdev | tempdb.mdf | 8MB | 以64MB的速度自动增长知道磁盘已满 |
次要数据文件* | temp# | tempdb_mssql_#.ndf | 8MB | 以64MB的速度自动增长知道磁盘已满 |
日志 | templog | templog.ldf | 8MB | 以 64 MB 的速度自动增长直到达到上限 2 TB |
五、resource数据库
resource数据库是一个只读数据库,它包含了SQL Server中的所有系统对象,默认是隐藏的,在SSMS里看不到这个数据库。SQL Server系统对象(如 sys.objects)在物理上保留在Resource数据库中,但在逻辑上却显示在每个数据库的 sys 架构中。Resource数据库不包含用户数据或用户元数据。
- resource的物理属性
Resource 数据库的物理文件名为mssqlsystemresource.mdf和mssqlsystemresource.ldf。 - 备份和还原resource数据库
SQL Server 不能备份 Resource 数据库。 通过将mssqlsystemresource.mdf文件作为二进制文件而不是作为数据库文件,可以执行您自己的基于文件的备份或基于磁盘的备份,但是不能使用SQL Server还原所做的备份。 只能手动还原mssqlsystemresource.mdf的备份副本,并且必须谨慎,不要使用过时版本或可能不安全的版本覆盖当前的Resource数据库。 - 访问resource数据库
Resource 数据库仅应由 Microsoft 客户支持服务部门 (CSS) 的专家修改或在其指导下进行修改。 Resource 数据库的 ID 始终为 32767。 与 Resource 数据库相关联的其他重要值是版本号和数据库的上次更新时间。
若要确定resource数据库的版本号,命令为
SELECT SERVERPROPERTY(‘ResourceVersion’);
若要确定resource数据库的上次升级时间,命令为
SELECT SERVERPROPERTY(‘ResourceLastUpdateDateTime’);
若要访问系统对象的SQL定义,命令为
SELECT OBJECT_DEFINITION(OBJECT_ID(‘sys.objects’));
(PS:创作不易,四千多字,我在学校写一篇论文都没这么多。不过也不算创作吧,就是把自己所知道的,所查找到的资料进行一个整理,希望对大家有所帮助~)