当前位置:首页 > 问答 > 正文

SQL Server系统数据库那些基础东西,简单说说让你快速了解

当我们安装好SQL Server之后,打开SQL Server Management Studio (SSMS),在“对象资源管理器”里展开数据库节点,你会立刻看到几个名字前面带着“master”、“model”、“msdb”、“tempdb”的数据库,这些就是SQL Server的系统数据库,它们是整个数据库引擎的基石,缺一不可,没有它们,你的SQL Server就启动不了,或者没法正常工作。

下面我就一个一个地简单说说它们是干嘛的。

第一个,也是最重要的:master数据库。

你可以把它想象成SQL Server的“总指挥部”或者“大脑”,它记录了所有关于SQL Server系统的核心信息,这些信息包括:

  • 所有的登录账号(就是谁能连接这个服务器)。
  • 所有的服务器配置设置(比如服务器用了多少内存、一些功能开关)。
  • 所有其他数据库的存在位置和初始信息(比如你新建了一个叫“MyDatabase”的数据库,master数据库里就会记下一笔:“哦,有一个数据库叫MyDatabase,它的文件放在C盘某某文件夹下”)。
  • 还有系统运行的一些关键信息。

正因为master数据库如此重要,所以一旦它损坏了,整个SQL Server实例很可能就无法启动,定期备份master数据库是一个非常重要的好习惯,微软官方文档也强调,不要在master数据库里创建用户自己的表或数据,就让它安安静静地做它的“总指挥部”就好。

SQL Server系统数据库那些基础东西,简单说说让你快速了解

第二个,model数据库。

这个名字起得很形象,它就是“模板”或“模型”的意思,你可以把它理解成一个空数据库的“模具”或者“蓝图纸”,当你使用CREATE DATABASE语句创建一个新数据库时(无论是在图形界面点鼠标还是写代码),SQL Server实际上做了一件什么事呢?它就是拿这个model数据库作为模板,复制一份,然后把新数据库的名字改成你起的那个名字。

model数据库里有什么,你新建的数据库默认就有什么,如果你希望在每一个新创建的数据库里都预先放一个叫“AuditLog”的表,用来记录操作日志,那么你就可以在model数据库里先创建好这个表,以后每次新建数据库,这个“AuditLog”表就会自动出现在新数据库里了,根据微软的说明,对model数据库的修改要小心,因为会影响到所有后续创建的数据库。

第三个,msdb数据库。

SQL Server系统数据库那些基础东西,简单说说让你快速了解

这个数据库是SQL Server代理服务的“大管家”,SQL Server代理是干嘛的?它就像是SQL Server的“自动任务调度器”,那些需要定期自动执行的任务,

  • 每天凌晨1点自动备份数据库。
  • 每周一早上清理一些历史数据。
  • 当数据库出现某种错误时自动发邮件通知管理员。

这些任务的计划、历史记录、操作员(通知人)信息等等,全都存储在msdb数据库里,如果你要用到SQL Server的自动化功能,msdb数据库就至关重要,同样,也需要定期备份它。

第四个,tempdb数据库。

这是一个非常特殊的“临时工”数据库,它的生命周期很短,每次SQL Server服务重启时,tempdb都会被删除然后重新创建一个全新的、干干净净的tempdb,它就像一个公共的“草稿纸”或“临时工作区”。

SQL Server系统数据库那些基础东西,简单说说让你快速了解

哪些东西会用到这张“草稿纸”呢?非常多:

  • 当你查询语句里用了ORDER BY、GROUP BY时,中间可能会产生一些临时结果,就放在这里。
  • 当你创建临时表(名字以#或##开头的表)时,这些表就存放在tempdb里。
  • 数据库引擎自己进行一些复杂操作时,也需要用这块空间来做中间计算。

因为所有用户和系统进程都可能用到它,所以tempdb的性能非常重要,如果tempdb变得很慢或者空间不足,可能会拖慢整个服务器的速度,管理和优化tempdb是数据库管理员的一项重要工作,根据SQL Server的架构,tempdb是全局唯一的,所有连接到这个实例的数据库都共享同一个tempdb。

还有一个值得提的:resource数据库。

这个数据库在SSMS的图形界面里是看不到的,因为它是一个只读的、隐藏的数据库,它里面存放了SQL Server所有的系统对象(比如sys.tables、sys.databases这些系统视图的定义),它的存在主要是为了方便升级和快速修复,当微软发布补丁或服务包时,只需要替换这个resource数据库的文件,就能更新所有系统对象的定义,而不需要去动每一个用户数据库,我们平常基本不会直接操作它,但知道它的存在有助于理解SQL Server的更新机制。

这五个系统数据库各司其职:

  • master是大脑,记录核心信息。
  • model是模板,决定新数据库的初始样子。
  • msdb是管家,管理自动化作业。
  • tempdb是草稿纸,提供临时存储空间。
  • resource是隐藏的工具箱,存储系统代码。

理解了它们的基本作用,你就能明白为什么不能随意删除或修改它们,也知道了当数据库出现某些问题时,应该从哪个系统数据库去考虑和排查,这些都是SQL Server最基本、最核心的组成部分。 参考和整合自微软官方文档关于SQL Server系统数据库的普遍性描述和定义。)