DM8:达梦数据库数据文件与日志文件介绍
- 环境介绍
- 1 表空间中的数据文件
- 1.1 表空间
- 1.2 数据文件
- 1.3 系统自带的表空间
- 1.3.1 SYSTEM 表空间
- 1.3.2 ROLL 表空间
- 1.3.3 TEMP 表空间
- 1.3.4 MAIN 表空间
- 1.3.5 用户自定义表空间
- 1.3.6 DM数据库的表空间和数据文件分布
- 2 日志文件
- 2.1 重做日志(REDO删除后数据库无法启动)
- 2.2 归档日志
- 2.3 LSN 介 绍
- 2.3.1 FILE_LSN
- 2.3.2 APPLY_LSN
- 2.3.3 RPKG_LSN
- 3 包序号介绍
- 3.1 检查点
- 3.1.1 完全检查点
- 3.1.2 部 分 检 查 点
环境介绍
- 数据库软件是一套数据管理系统的集合,数据最终会存储到操作系统的物理文件中,还有相关的日志文件;
1 表空间中的数据文件
1.1 表空间
- DM 数据库的表空间是一个逻辑概念,其目的主要是为了方便数据库的管理,数据库的所有对象在逻辑上都存放在某个表空间中,而物理上都存储在所属表空间的数据文件中。一个表空间由一个或多个数据文件组成。
1.2 数据文件
- 数据文件是数据库中最重要的文件类型,是真实数据存储的地方。
DM 中数据文件的扩展名为.DBF,分为系统默认生成的数据文件和用户自己创建的数据文件两类。 - 需要注意的是,HUGE 数据文件不同于一般数据文件,其扩展名为.DTA。DM 数据库中的表空间可以分为普通表空间和混合表空间。
普通表空间不能存储 HUGE表,而混合表空间可以同时存储普通(非 HUGE)表和 HUGE 表,其中 HUGE 数据文件存储在混合表空间定义中指定的 HUGE 数据文件路径下。可以通过为普通表空间添加 HUGE 数据文件路径将其升级为混合表空间。
1.3 系统自带的表空间
-
在创建 DM 数据库时,系统会自动创建 4 个表空间:SYSTEM 表空间、ROLL 表空间、MAIN表空间和TEMP表空间。DM自动为这几个自动创建的表空间分别生成默认的数据文件:
SYSTEM.DBF、ROLL.DBF、MAIN.DBF 和 TEMP.DBF。 -
另外,DM 还会自动创建一个 HMAIN目录,并将其路径作为 MAIN 表空间的 HUGE 数据文件路径,因此 MAIN 表空间为混合表空间。
-
用户也可以创建自己的表空间,由用户创建的表空间统称为用户自定义表空间,在创建自定义表空间时需要为表空间指定数据文件。
因此,DM 中的表空间有以下几类:
1.3.1 SYSTEM 表空间
- 存放了 DM 数据库全局字典信息和全局系统数据,是 DM 数据库能够正常运行的必要前提,默认对应数据文件 SYSTEM.DBF。
CREATE TABLE 等 DDL 操作会修改 SYSTEM 表空间数据。
1.3.2 ROLL 表空间
- 存放 DM 数据库运行过程中产生的所有回滚记录。DM 中几乎所有的数据库修改操作都会生成回滚记录,并保存在 ROLL 表空间的数据文件中。ROLL 表空间是数据库全局对象,不论修改哪一个表空间,生成的回滚记录都是写入 ROLL 表空间,该表空间由系统自动维护,默认数据文件为 ROLL.DBF。
1.3.3 TEMP 表空间
- 存放临时表数据以及数据库运行过程中产生的临时数据。在数据库运行过程中,SORT、HASH JOIN 等操作都可能会生成临时结果集,它们作为临时数据存放在 TEMP 表空间中。
TEMP 表空间是数据库全局对象,由系统自动维护。若数据库重启,保存在 TEMP 表空间中的所有数据都会丢失。TEMP 表空间的默认数据文件为 TEMP.DBF。
DM 的物理备份还原不支持:TEMP 表空间。
1.3.4 MAIN 表空间
MAIN 表空间为混合表空间。在创建用户时,如果没有指定默认表空间,
系统自动指定MAIN 表空间为用户默认的表空间。MAIN 表空间的默认数据文件为 MAIN.DBF,默认 HUGE数据文件路径为 HMAIN 目录所在路径。
1.3.5 用户自定义表空间
即用户通过创建表空间相关操作生成的表空间。
点击跳转,查看配置步骤
1.3.6 DM数据库的表空间和数据文件分布
2 日志文件
2.1 重做日志(REDO删除后数据库无法启动)
- 重做日志,又叫 REDO 日志,忠实记录了所有物理页的修改,基本信息包括操作类型、表空间号、文件号、页号、页内偏移、实际数据等。数据库中 INSERT、DELETE、UPDATE等 DML 操作以及 CREATE TABLE 等 DDL 操作最终都会转化为对某些数据文件、某些数据页的修改。因此,在系统故障重启时,通过重做 REDO 日志,可以将数据库恢复到故障时的状态。
- DM 数据库默认包含两个扩展名为 log 的日志文件,用来保存 REDO 日志,称为联机重做日志文件。这两个文件循环使用。任何数据页从内存缓冲区写入磁盘之前,必须保证其对应的 REDO 日志已经写入到联机日志文件。
- REDO 日志包(RLOG_PKG)是 DM 数据库保存 REDO 日志的数据单元,一个日志包内可保存一个或多个 PTX 产生的 REDO 日志。日志包具有自描述的特性,日志包大小不固定,采用固定包头和可变包头结合的方式,包头记录日志的控制信息,包括类型、长度、包序号、LSN 信息、产生日志的节点号、加密压缩信息、日志并行数等内容。
- 日志包生成时按照序号连续递增,相邻日志包的 LSN 顺序是总体递增的,但是在 DMDSC集群环境下不一定连续。如果未开启并行日志,RLOG_PKG 包内日志的 LSN 是递增的。如果开启并行日志,一个 RLOG_PKG 包内包含多路并行产生的日志,每一路并行日志的 LSN是递增的,但是各路之间的 LSN 并不能保证 LSN 有序,因此并行日志包内 LSN 具有局部有序,整体无序的特点。
2.2 归档日志
- DM 数据库可以在归档和非归档两种模式下运行,归档模式的具体配置点击跳转到归档配置。DM 支持多种归档方式。系统在归档模式下运行会更安全,当出现介质故障,如磁盘损坏导致数据文件丢失、异常时,利用归档日志,系统可以恢复至故障发生的前一刻。因此,为了保证归档日志文件和数据文件不同时出现问题,建议将归档目录与数据文件配置、保存到不同的物理磁盘上。除了表备份还原,其他的联机备份与还原必须运行在归档模式下。
- DM 数据库定义了多种归档方式,包括本地归档、实时归档、即时归档、异步归档和远程归档,其中本地归档和远程归档与备份还原密切相关。写入本地归档日志文件,或者通过 MAL 系统发送到远程归档的目标实例,写入目标实例的远程归档日志文件中。
- Primary/Normal 模式库归档日志文件的命名规则是:
- ARCH_NAME_DB_MAGIC[SEQNO]_日期时间.log。
- 其中 ARCH_NAME 是在 dmarch.ini中配置的 LOCAL/REMOTE 归档名称,DB_MAGIC 是生成日志的数据库魔数,SEQNO 代表DSC 节点号,日期时间是归档日志文件的创建时间。
- 比如:ARCHIVE_LOCAL1_0x567891[0]_2018-05-30_10-35-34.log。
- Standby 模式库(备库)归档日志文件的命名规则是:
- STANDBY_ARCHIVE_DB_MAGIC[SEQNO]_日期时间.log 。
- 其中,STANDBY_ARCHIVE表示备库生成的归档日志文件;DB_MAGIC 是生成日志的数据库(主库)魔数;SEQNO 代表主库对应的 DSC 节点号;日期时间是归档日志文件的创建时间。
- 比如:STANDBY_ARCHIVE_0x123456[0]_2018-05-30_10-35-34.log 。由于STANDBY_ARCHIVE 用于表示备库生成的归档日志,因此,不允许将归档名称配置为STANDBY_ARCHIVE。
2.3 LSN 介 绍
- LSN(Log Sequence Number)是由系统自动维护的 Bigint 类型数值,具有自动递增、全局唯一特性,每一个 LSN 值代表着 DM 系统内部产生的一个物理事务。物理事务(Physical Transaction,简称 PTX)是数据库内部一系列修改物理数据页操作的集合,与数据库管理系统中事务(Transaction)概念相对应,具有原子性、有序性、无法撤销等特性。
DM 数 据 库 中 与 LSN 相 关 的 信 息 , 可 以 通 过 查 询
V$RLOG 和V$RAPPLY_PARALLEL_INFO 表来获取。
DM 主要包括以下几种类型的
LSN:CUR_LSN 是系统已经分配的最大 LSN 值。
物理事务提交时,系统会为其分配一个唯一的 LSN 值,
大小等于 CUR_LSN + 1,然后再修改 CUR_LSN=CUR_LSN+1。
FLUSH_LSN 是已经发起日志刷盘请求,
但还没有真正写入联机 REDO 日志文件的最大 LSN 值。
2.3.1 FILE_LSN
- FILE_LSN 是已经写入联机 REDO 日志文件的最大 LSN 值。每次将 REDO 日志包 RLOG_PKG 写入联机 REDO 日志文件后,都要修改 FILE_LSN 值。 CKPT_LSN 是检查点 LSN,所有 LSN <= CKPT_LSN 的物理事务修改的数据页,都已经从 Buffer 缓冲区写入磁盘,CKPT_LSN 由检查点线程负责调整。
- 数据库故障重启时,CKPT_LSN 之前的 REDO 日志不需要重做,只需要从 CKPT_LSN+1开始重做 REDO 日志,就可以将系统恢复到故障前状态。并且,在联机重做日志文件中,LSN值<=CKPT_LSN 的 REDO 日志都可以被覆盖。
2.3.2 APPLY_LSN
- APPLY_LSN是数据库还原恢复后已经写入联机 REDO 日志文件的日志包的原始最大 LSN 值,APPLY_LSN 取自源库的原始日志包中的最大 LSN 值。DSC 集群的每一个节点独立维护 APPLY_LSN。
2.3.3 RPKG_LSN
- RPKG_LSN是数据库还原恢复后已经重演日志的最大 LSN。DSC 集群的每一个节点独立维护 RPKG_LSN。
3 包序号介绍
- 每个 RLOG_PKG 都有对应的序号属性,称之为包序号(PKG SEQNO),日志包生成时按照序号连续递增。包序号包括本地包序号(LSEQ)和全局包序号(GSEQ),本地包序号是节点内唯一、连续递增的值,用于校验联机日志连续性;全局包序号由数据守护集群的主备库共同维护,具有全局唯一、连续、递增的特性,用于校验归档日志的连续性。
DM 数 据 库 中 与 全 局 包 序 号 相 关 的 信 息 ,
可 以 通 过 查 询 V$RLOG 和V$RAPPLY_PARALLEL_INFO 表来获取。
数据库端主要包括以下几种类型的全局包序号:
CUR_SEQ 是系统已经分配的最大全局包序号。RLOG_PKG 写入联机日志文件前,系统会为其分配一个唯一的全局包序号。
FILE_SEQ 是已经写入联机 REDO 日志文件的最大全局包序号。每次将 REDO 日志包 RLOG_PKG 写入联机 REDO 日志文件后,都要修改 FILE_SEQ 值。
APPLY_SEQ 是数据库还原恢复后已经写入联机 REDO 日志文件的原始最大全局包序号,APPLY_SEQ 取自源库的原始日志包的包序号。DSC 集群的每一个节点独立维护APPLY_SEQ。
RPKG_SEQ 是数据库还原恢复后已经重演日志的最大全局包序号。DSC 集群的每一个节点独立维护 RPKG_SEQ。
3.1 检查点
- DM 数据库运行过程中,用户的所有操作都在内存中进行。每修改一条记录都必须先把记录所在的数据页加载到 BUFFER 缓冲区中,然后进行修改。事务运行时,会把生成的 REDO日志保留在 REDO 日志包 RLOG_PKG 中,每条日志记录对应一个 LSN,当事务提交或 REDO日志包满或执行检查点时会进行日志刷盘。
- 检查点(checkpoint)是一个数据库事件,它的功能是按照数据页的修改顺序,依次将 BUFFER 缓冲区中的脏页写入磁盘,并在这个过程中动态调整 CKPT_LSN 值,释放日志空间。
- DM 的检查点分为两种:完全检查点和部分检查点:
3.1.1 完全检查点
- 会将内存缓冲区中的所有脏页写入磁盘,并调整 CKPT_LSN,在数据库正常关闭时会产生一个完全检查点。
3.1.2 部 分 检 查 点
-
根 据 dm.ini 配 置 文 件 中 的 参 数 CKPT_FLUSH_RATE 和CKPT_FLUSH_PAGES,确定每次检查点刷脏页的数量。执行部分检查点的过程中,DDL/DML操作都可以正常执行,DM 系统中绝大多数情况下触发的都是部分检查点。
-
数据库运行过程中产生的待写入日志首先写入 REDO 日志包 RLOG_PKG,当日志刷盘时一起写入联机日志文件中。在联机日志文件中,可以覆盖写入 REDO 日志的文件长度为可用日志空间;不能被覆盖的 REDO 日志,系统故障重启需要重做的 REDO 日志为有效日志,有效日志的 LSN 取值范围是(CKPT_LSN,FILE_LSN]。
-
下图说明了联机日志文件、REDO 日志包 RLOG_PKG 以及相关各 LSN 之间的关系。