1.2.1 物理存储结构
物理存储结构描述了达梦数据库中的数据在操作系统中的组织和管理。典型的物理存储结构包括:用于进行功能设置的配置文件;用于记录文件分布的控制文件;用于保存用户实际数据的数据文件、REDO日志文件、归档日志文件、备份文件;用来进行问题跟踪的跟踪日志文件等,如图1-2所示。
图1-2 达梦数据库物理存储结构
1.配置文件
配置文件是达梦数据库用来设置功能选项的一些文本文件的集合。配置文件以.ini为后缀,具有固定的格式,用户可以通过修改其中的某些参数取值实现特定功能项的启用和禁用,并针对当前系统运行环境设置更优的参数值以提升系统性能。
2.控制文件
每个达梦数据库都有一个名为dm.ctl的控制文件。控制文件是一个二进制文件,记录了数据库必要的初始信息,其中主要包括:
(1)数据库名称;
(2)数据库服务器模式;
(3)数据库服务器版本;
(4)数据文件版本;
(5)表空间信息,包括表空间名、表空间物理文件路径等,记录了所有数据库中使用的表空间,并以数组的方式保存起来;
(6)控制文件校验码,校验码由数据库服务器在每次修改控制文件后计算生成,保证控制文件的合法性,防止文件被损坏及被手动修改。
3.数据文件
数据文件以.dbf为后缀,是数据库中最重要的文件类型。一个DM数据文件对应磁盘上的一个物理文件,数据文件是真实数据存储的地方,每个数据库至少有一个与之相关的数据文件。在实际应用中,数据库中通常有多个数据文件。
当达梦数据库的数据文件空间用完时,它可以自动扩展,但可以在创建数据文件时通过MAXSIZE参数限制其扩展量,当然也可以不限制。但是,数据文件的大小最终会受物理磁盘大小的限制。在实际使用时,一般不建议使用单个巨大的数据文件,为一个表空间创建多个较小的数据文件是更好的选择。
数据文件中还有两类特殊的文件:ROLL文件和TEMP文件。ROLL文件用于保存系统的回滚记录,提供事务在回滚时的信息。每个事务的回滚页在回滚段中各自挂链,页内则顺序存放回滚记录。TEMP文件是临时数据文件,主要用于存放临时结果集,用户创建的临时表也存储在TEMP文件中。
4.REDO日志文件
REDO日志文件以.log为后缀。无论何时,在达梦数据库中添加、删除、修改对象,或者改变数据,都会将 REDO 日志写入当前的 REDO 日志文件中。每个达梦数据库实例至少要有两个 REDO 日志文件,默认两个 REDO 日志文件为 DAMENG01.log、DAMENG02.log,这两个REDO日志文件循环使用。
在理想情况下,数据库系统不会用到REDO日志文件中的信息。然而现实世界总是充满了各种意外,例如,电源故障、系统故障、介质故障,或者数据库实例进程被强制终止等,当出现以上情况时,数据库缓冲区中的数据页会来不及写入数据文件。这样,在重启达梦数据库实例时,通过REDO日志文件中的信息,就可以将数据库的状态恢复到发生意外时的状态。REDO日志文件对于数据库是至关重要的。它们用于存储数据库的事务日志,以便系统在出现系统故障和介质故障时能够进行故障恢复。在达梦数据库运行过程中,任何修改数据库的操作都会产生REDO日志。例如,当一条元组插入一个表的时候,插入的结果写入REDO日志;当删除一条元组时,删除该元组的事实也被写入REDO日志,这样,当系统发生故障时,通过分析日志就可以知道在故障发生前系统做了哪些动作,并可以重做这些动作使系统恢复到发生故障之前的状态。
日志文件分为联机日志文件和归档日志文件。以上所说的REDO日志文件都是联机日志文件。在归档模式下,REDO日志文件会被连续复制到归档日志文件中,这就生成了归档日志文件。联机日志文件指的是系统当前正在使用的日志文件,在创建数据库时,联机日志文件通常被扩展至一定长度,其内容则被初始化为空;当系统运行时,联机日志文件逐渐被产生的日志所填充,对联机日志文件的写入是顺序连续的。然而,系统磁盘空间总是有限的,系统必须能够循环利用联机日志文件空间,为了做到这一点,当所有联机日志文件空间被占满时,系统需要清空一部分日志以便重用日志文件空间。为了保证被清空的日志所“保护”的数据在磁盘上是安全的,需要引入一个关键的数据库概念——检查点。当产生检查点时,系统将系统缓冲区中的日志和脏数据页都写入磁盘,以保证当前日志所“保护”的数据页都已安全写入磁盘,这样日志文件就可以被安全重用。
5.归档日志文件
归档日志文件以归档时间命名,后缀也是.log。达梦数据库可以在归档模式和非归档模式下运行。但是,只有当达梦数据库在归档模式下运行时,其在重做联机日志文件时才能生成归档日志文件。
采用归档模式会对系统的性能产生影响,然而系统在归档模式下运行会更安全。当系统发生故障时其丢失数据的可能性更小,这是因为系统一旦发生介质故障,如磁盘损坏,利用归档日志文件系统可以被恢复至发生故障前一刻,也可以还原到指定的时间点,而如果没有归档日志文件,则只能利用备份进行系统恢复。
归档日志文件还是数据守护功能的核心,数据守护中的备机就是通过REDO日志文件来完成与主机数据同步的。
6.逻辑日志文件
如果在达梦数据库上配置了复制功能,复制源就会产生逻辑日志文件。逻辑日志文件是一个流式的文件,有自己的格式,并且不在页、簇和段的管理之下。
逻辑日志文件内部存储按照复制记录的格式,一条记录紧接着一条记录,存储复制源端的各种逻辑操作,用于发送给复制目的端。
7.备份文件
备份文件以.bak为后缀,当系统正常运行时,备份文件不会发挥任何作用。备份文件也不是数据库必须有的联机文件类型之一。然而,从来没有哪个数据库系统能够保证永远正确无误地运行,当数据库出现故障时,备份文件就显得尤为重要了。
当客户利用管理工具或直接发出备份的SQL命令时,DM Server会自动进行备份,并产生一个或多个备份文件,备份文件自身包含了备份的名称、对应的数据库、备份类型和备份时间等信息。同时,系统还会自动记录备份信息及该备份文件所处的位置,但这种记录是松散的,用户可根据需要将其复制至任何地方,并不会影响系统的运行。
8.跟踪日志文件
用户在dm.ini中配置SVR_LOG和SVR_LOG_SWITCH_COUNT参数后就会打开跟踪日志文件。跟踪日志文件是一个纯文本文件,以“dm_commit_日期_时间”命名,在 DM安装目录的log子目录下生成,其内容包含系统各会话执行的SQL语句、参数信息、错误信息等。跟踪日志文件主要用于分析错误和性能问题,基于跟踪日志文件可以对系统运行状态进行分析,例如,可以挑出系统当前执行速度较慢的SQL语句,进而对其进行优化。
打开跟踪日志文件会对系统的性能有较大影响,一般在查错和调优的时候才会打开,在默认情况下系统是关闭跟踪日志文件的。
9.事件日志文件
达梦数据库系统在运行过程中,会在log子目录下产生一个“dm_实例名_日期”命名的事件日志文件。事件日志文件对达梦数据库运行的关键事件进行记录,如系统启动、系统关闭、内存申请失败、I/O错误等致命错误。事件日志文件主要用于系统在出现严重错误时查看并定位产生错误的问题。事件日志文件随着达梦数据库服务的运行一直存在。
10.数据重演文件
调用系统存储过程 SP_START_CAPTURE 和 SP_STOP_CAPTURE,可以获得数据重演文件。数据重演文件用于数据重演,存储了从抓取开始到抓取结束时达梦数据库与客户端的通信消息。使用数据重演文件,可以多次重复抓取这段时间内的数据库系统操作,为系统调试和性能调优提供了一种分析手段。