• SQL Server整体架构(2)——数据库


    1.2. 数据库

    数据库,由服务器上的一组磁盘文件组成,用于存储数据库相关的各种管理信息和用户数据,以保证数据库正常运转和用户数据的存储,数据库及其文件可以独立于实例而存在。

    1.2.1. SQL Server数据库逻辑结构

    直到Oracle 11g为止,Oracle是唯一一个每个实例只对应一个数据库的常用关系库,而这点随着Oracle 12c中CDB/PDB特性的产生而发生了改变,这使得Oracle从此结束了自己在关系库中特立独行的逻辑结构,当然,Oracle 12c中CDB/PDB特性并不是强制的,只是多个选项而已。

    因此,SQL Server数据库的逻辑结构与Oracle 11g及其之前版本外的其他数据库一样,一个实例拥有多个数据库,直到SQL Server 2012版本,每个实例可以拥有最多32767个数据库,每个数据库可以拥有数十亿个对象,而其存储容量最大可达EB级。现实中,从未见过也不可能出现拥有如此多数据库的实例,也没见过单个数据库达到如此大的规模。一个SQL Server实例总会包含以下数据库。

    1)Master:该数据库包含用于跟踪整个实例安装及随后被创建数据库的系统表。虽然其他数据库都有包含自己对象信息的系统字典,但Master的系统字典主要用于跟踪整个系统范围内的信息,例如:配置,端点,登录,数据库,数据文件使用,连接服务器等。Master数据库对整个数据库系统来说非常重要,确认每次对实例进行上述更改后都要进行妥善备份。

    2)Model:该数据库只是个模板数据库。每当用户创建一个数据库时,SQL Server就会拷贝该数据库作为该新数据库的基础。用户可以修改该数据库的属性,以便用户今后创建的新数据库都会继承和具备这些属性。

    3)Tempdb:该数据库用作一个工作空间。该数据库是SQL Server每次重启时,重新创建而不需要恢复的数据库。该数据库主要用于存储用户定义的临时表数据,查询处理期间产生的排序等中间结果,以及用于维护快照隔离和其他操作的行版本数据。因为SQL Server每次重启都会重新创建该数据库,因此,用户在其中创建的对象及其授权等一切信息都会随着SQL Server的重启而消失的无影无踪。

    4)Msdb:该数据库主要用于SQL Server代理及其相关服务。这些服务主要用于调度类似备份和复制等任务,以及用于为SQL Server提供队列和可靠信息的服务代理(Service Broker)。此外,该数据库中的对象还用于作业(Jobs)、告警(Alerts)、日志传输(Log Shipping)、策略(Policies)、数据库邮件(Database Mails)及损坏数据页的恢复。当并不需要该数据库支持的这些活动时,可以忽略该数据库,但建议不要随便更改和删除它。

    5)Resource Database(mssqlsystemresource):该数据库是不为用户所见的隐藏数据库,微软创建该数据库的目的是为了快速而安全的升级。SQL Server的系统可执行对象(例如:系统存储过程和函数等)都存放于该数据库中。用户无法通过常规方法看到、访问和修改该数据库,但通过一些非常规方法也可以对该数据库进行查看、访问和修改,但不建议这么做,这里仅对该数据库做一简要介绍,不再赘述。

    以上五个数据库为SQL Server必不可少的系统数据库,每次安装,都会默认安装和创建这些数据库。

    除了上述几个系统数据库,用户可以按照自己的需求创建多个数据库,用于存储和管理用户对象和数据。

    ​​​​​​​1.2.2. SQL Server相关文件

    SQL Server相关文件主要分为数据库文件和其他文件。

    数据库文件就是操作系统文件,仅就数据库文件来说,每个SQL Server数据库至少要包含两个操作系统文件,它们分别用于存储用户数据和事务日志。SQL Server 2012数据库目前可以包含三种数据库文件。

    1)主数据文件(Primary Data Files):每个数据库必须有且只能有一个主数据文件,除了存储数据库的启动信息和跟踪该数据库中的所有其他文件,还用于存储用户数据。一般来说,数据库的主数据文件扩展名为.mdf。创建数据库时,主数据文件总是被包含在主文件组中且第一个被列出来,除了主数据文件,主文件组还可以包含其他数据文件。

    2)次级数据文件(Secondary Data Files):每个数据库可以有零到多个次级数据文件,一般来说,数据库的次级数据文件扩展名为.ndf。创建数据库时,次级文件可以被包含在主文件组或用户创建的其他文件组中。

    3)日志文件(Log Files):每个数据库至少有一个日志文件,用于存储恢复该数据库中的事务所需要的信息,一般来说,数据库的日志文件的扩展名为.ldf。

    可以通过查询目录视图sys.data_files获取当前数据库中上述三种数据库文件。

    Select ... from sys.database_files where ...;

    此外,SQL Server数据库和实例中还涉及如下几种文件。

    4)文件流/文件表数据文件(Filestream/Filetable Data Files)和全文数据文件(Full-text Data Files):两类数据文件分别与大对象数据及全文索引数据存储相关,此处不再详述,感兴趣的读者可以查阅相关文档。

    除了以上几类数据库相关的数据文件外,还有如下SQL Server系统整体相关的文件。

    5)报错日志文件(Error Log Files):该文件用于存储SQL Server系统范围内的事件或信息,例如:任务或操作完成情况,实例启停,内核信息,系统级的报错信息等。该文件默认位置为“C:\Program Files\Microsoft SQL Server\MSSQL11.SQL12\MSSQL\Log\ERRORLOG”(笔者测试环境:SQL Server 2012 for Windows,根据具体安装和配置可能不同),也可以通过如下命令发现该文件的具体位置。

    use master

    go

    xp_readerrorlog 0,1,N'Logging SQL Server messages in file',null,null,null,N'asc'

    go

    一般来说,SQL Server会保留最近6个错误日志文件。从功能来讲,该报错日志文件和Oracle的告警日志文件相似。

    6)导出文件(Dump Files):当在报错日志文件中发现一个例外发生时,也应该发现一个扩展名为.mdmp的导出文件,该文件一般与报错日志文件位于同一目录下,当然,也可以位于其他不同位置。该文件主要用于帮助微软工程师确定例外发生的原因。该文件与Oracle中的导出文件(Dump Files)或跟踪文件(Trace Files)功能相似。

    此外,与Oracle中参数文件和控制文件功能相对应的,SQL Server中也有相关机制实现,然而,微软对这些机制和细节选择了尽量封装和屏蔽,这里我们也不再详述,感兴趣的读者可以自行查阅相关文档。

    SQL Server数据库整体架构具体如图1-2-1所示。

    图 1-2-1 SQL Server数据库整体架构示意图

  • 相关阅读:
    JS性能优化之函数唯一标识以及自记忆函数
    2022年python国际化课程上机考试三题解
    Shell脚本中文英文多语言国际化和命令行批处理(bash sh cmd bat)中定义函数的简单写法
    api安全测试的学习
    Effective Java 第二版第11章 序列化
    使用Portainer图形化工具轻松管理远程Docker环境并实现远程访问
    用户管理命令
    SSM学习——bean实例化(2)
    【C++基础】6. 常量
    太硬核!用大数据技术预测足球胜率
  • 原文地址:https://blog.csdn.net/LHDZ_BJ/article/details/128117628