DM逻辑结构
表空间
与oracle类似,达梦的表空间由一个或多个数据文件组成。在创建数据库时会自动创建5个表空间,分别为SYSTEM、ROLL(与oracle undo tablespace类似)、MAIN、TEMP、HMAIN表空间。
- SYSTEM表空间
SYSTEM 表空间存放了有关 DM 数据库的字典信息, 用户不能在 SYSTEM 表空间创建表和索引。 - ROLL表空间
该表空间用来存放事务运行过程中执行 DML 操作之前的值,从而为访问该表的其他用户提供表数据的读一致性视图。 - MAIN表空间
在创建用户时,如果没有指定默认表空间,则系统自动指定 MAIN 表空间为用户默认的表空间。 - TEMP表空间
当用户的 SQL 语句需要磁盘空间来完成某个操作时, DM 数据库会从 TEMP 表空间分配临时段。如创建索引、无法在内存中完成的排序操作、 SQL 语句中间结果集以及用户创建的临时表等都会使用到 TEMP表空间。 - HMAIN表空间
该表空间属于HTS表空间,当用户创建HUGE表时,未指定表空间的情况下,充当为默认的HTS表空间。 SYSTEM、 ROLL、 MAIN 和 TEMP 表空间查看和HMAIN表空间的查看
SELECT * FROM V$TABLESPACE;
SELECT * FROM V$HUGE_TABLESPACE;
记录 record
所谓记录,就是表在的行。在DM数据库中,除HUGE表,其他表都是在数据页中按记录存储的。记录是存储在数据页中的。由于记录不能跨页存储,这样记录的长度就受到数据页大小的限制。数据页中 还包含了页头控制信息等空间,因此 DM 规定每条记录的总长度不能超过页面大小的一半。
页 page
数据页(也叫数据块),是DM数据库中最小的存储单元。页大小可以为4KB、8KB、16KB、32KB,创建数据库时默认页大小为8KB,建议使用32KB。一旦创建完数据库,就不可更改。 页结构说明:页头包含了页类型、页地址等信息。页的中部存放数据,在数据页尾部留出一部分空间用于存放行偏移数组,行偏移数组用于标识页上的空间占用情况以便管理数据页自身的空间。
FILLFACTOR指定数据页初始化后插入数据时最大可以使用空间的百分比,该值在创建表或索引时可以指定。
簇 extent
簇是页的上级逻辑单元,由同一个数据文件中连续的16个或32个页组成。簇大小在创建数据库时指定,默认为16个数据页。
- 分配数据簇
创建表或索引时,为其数据段分配至少一个簇,同时会自动生成对应的数据空闲数据页。当DM数据库的表空间为新的簇分配空闲空间时,首先在表空间按文件大小从小到大的顺序从各个数据文件中查找可用的簇后进行分配。如果各数据文件都没有空闲簇,则在各数据文件中查找空闲空间足够的,将需要的空间先进行格式化, 然后进行分配;如果各文件的空闲空间也不够,则选一个数据文件进行扩充。 - 释放数据簇
将一个数据段对应的表/索引对象 DROP 之前,该表对应的数据段会保留至少 1 个簇不被回收到表空间中。在删除表/索引对象中的记录的时候, DM数据库通过修改数据文件中的位图来释放簇,释放后的簇被视为空闲簇,可以供其他对象使用。当用户删除了表中所有记录时, DM 数据库仍然会为该表保留 1-2 个簇供后续使用。若用户使用 DROP 语句来删除表/索引对象,则此表/索引对应的段以及段中包含的簇全部收回,并供存储于此表空间的其他模式对象使用。 对于临时表空间, DM 数据库会自动释放在执行 SQL 过程中产生的临时段,并将属于此临时段的簇空间还给临时表空间。需要注意的是,临时表空间文件在磁盘所占大小并不会因此而缩减,用户可以通过系统函数 SF_RESET_TEMP_TS 来进行磁盘空间的清理。
段 segment
段是簇的上级逻辑单元,由一组簇组成。在同一表空间中,一个段可以跨越不同的数据文件。一个簇只能来自同一数据文件。段可以分为以下几类:
- 数据段
当用户使用 CREATE 语句创建表/索引时, DM 创建相应的数据段。表/索引的存储参数 用来决定对应数据段的簇如何被分配。 - 临时段
所有的临时段都创建在临时表空间中。当处理一个查询时,经常需要为 SQL 语句的解析与执行的中间结果准备临时空间。 DM数据库会自动地分配临时段的磁盘空间。 临时段的分配和释放完全由系统自动控制,用户不能手工进行干预。 - 回滚段
DM 数据库在回滚表空间的回滚段中保存了用于恢复数据库操作的信息。
物理存储结构
配置文件dm.ini
创建数据库,就会生成dm.ini文件。是启动数据库所必须的配置文件。 dm.ini中配置的参数错误时就取默认值,若设置值小于允许最小值,则为最小值;若大于允许最大值,则为最大值。 参数属性分为三种:静态、动态和手动。 静态, 可以被动态修改, 修改后重启服务器才能生效。 动态, 可以被动态修改, 修改后即时生效。 手动, 不能被动态修改, 必须手动修改 dm.ini 参数文件,然后重启才能生效。 动态修改可以在数据库服务运行期间通过调用系统过程 SP_SET_PARA_VALUE(); SP_SET_PARA_DOUBLE_VALUE(); SP_SET_PARA_STRING_VALUE(); 修改。
控制文件
控制文件记录了数据文件必要的初始信息,主要包括以下内容
- 库名
- 数据库服务模式
- OGUID唯一标识
- 数据库服务器版本
- 数据文件版本
- 数据库的启动次数
- 最近一次启动时间
- 表空间名,物理文件路径
- 控制文件较验码
数据文件
数据文件以 dbf 为扩展名,数据文件是真实数据存储的地方,每个数据库至少有一个与之相关的数据文件。当数据文件扩展空间用完时,可以自动扩展,创建数据文件时通过MAXSIZE参数限制其扩展量。
重做日志文件
重做日志(即REDO日志),在DM中添加、删除、修改对象,或者改变数据,DM都会按照特定格式把这些结果写入到当前的重做日志文件中。至少有2个重做日志,用于循环使用。
归档日志文件
日志文件分为联机日志文件和归档日志文件。DM数据库在归档模式下,数据库会同时将重做日志文件写入联机日志文件和归档日志文件中分别进行转储。
逻辑日志文件
如果在 DM 数据库上配置了复制功能,复制源就会产生逻辑日志文件。逻辑日志文件是一个流式的文件,它有自己的格式,且不在第一章所述的页, 簇和段的管理之下。
物理逻辑日志文件
物理逻辑日志, 是按照特定的格式存储的服务器的逻辑操作, 专门用于 DBMS_LOGMNR包挖掘获取数据库系统的历史执行语句。 当开启记录物理逻辑日志的功能时, 这部分日志内容会被存储在重做日志文件中。 要开启物理逻辑日志的功能, 需要满足下面两个条件: 首先, 要设置 RLOG_APPEND_LOGIC 为 1、 2 或者 3; 其次, 通过设置参数 RLOG_IGNORE_TABLE_SET=1 或者建表(或修改表) 时指定 ADD LOGIC LOG 开 启 。 如 果 需 要 记 录 所 有 表 的 物 理 逻 辑 日 志 , 设 置 INI 参 数RLOG_IGNORE_TABLE_SET 为 1 即可;如果只需要记录某些表的物理逻辑日志,设置 INI参数RLOG_IGNORE_TABLE_SET为0,并在建表或者修改表的语法中使用ADD LOGIC LOG。
备份文件
跟踪日志文件 sqllog
在 dm.ini 中配置 SVR_LOG 和 SVR_LOG_SWITCH_COUNT 参数后就会打开跟踪日志。 跟踪日志文件是一个纯文本文件,以“dm_commit_日期_时间” 命名, 默认生成在 DM安装目录的 log 子目录下面,管理员可通过 ini 参数 SVR_LOG_FILE_PATH 设置其生成路径。
事件日志文件
M 数据库系统在运行过程中,会在 log 子目录下产生一个“dm_实例名_日期” 命名的事件日志文件。事件日志文件对 DM 数据库运行时的关键事件进行记录,如系统启动、关闭、内存申请失败、 IO 错误等一些致命错误。事件日志文件主要用于系统出现严重错误时进行查看并定位问题。事件日志文件随着 DM 数据库服务的运行一直存在。
数据重演文件
调用系统存储过程 SP_START_CAPTURE 和 SP_STOP_CAPTURE,可以获得数据重演文件。重演文件用于数据重演, 存储了从抓取开始到抓取结束时, DM 数据库与客户端的通信消息。使用数据重演文件,可以多次重复抓取这段时间内的数据库操作,为系统调试和性能调优提供了另一种分析手段。
|