达梦数据库的归档日志

一、概述

日志文件分为联机日志文件和归档日志文件。DM 数据库可以在归档模式和非归档模式下运行。非归档模式下,数据库会只将重做日志写入联机日志文件中进行存储;归档模式下,数据库会同时将重做日志写入联机日志文件和归档日志文件中分别进行存储。

联机日志文件指的是系统当前正在使用的日志文件。创建数据库时,联机日志文件通常被扩展至一定长度,其内容则被初始化为空,当系统运行时,该文件逐渐被产生的日志所填充。对日志文件的写入是顺序连续的。然而系统磁盘空间总是有限,系统必须能够循环利用日志文件的空间,为了做到这一点,当所有日志文件空间被占满时,系统需要清空一部分日志以便重用日志文件的空间,为了保证被清空的日志所“保护”的数据在磁盘上是安全的,这里需要引入一个关键的数据库概念——检查点。当产生检查点时,系统将系统缓冲区中的日志和脏数据页都写入磁盘,以保证当前日志所“保护”的数据页都已安全写入磁盘,这样日志文件即可被安全重用。

归档日志文件,就是在归档模式下,重做日志被连续写入到归档日志后,所生成了归档日志文件。归档日志文件以归档时间命名,扩展名默认与初始化数据库时指定的参数 RLOG_POSTFIX_NAME 一致,也可通过 INI 参数 LOG_FILE_POSTFIX_NAME 指定归档日志文件的扩展名。只有在归档模式下运行时,DM 数据库才会将重做日志写入到归档日志文件中。采用归档模式会对系统的性能产生影响,然而系统在归档模式下运行会更安全,当出现故障时其丢失数据的可能性更小,这是因为一旦出现介质故障,如磁盘损坏时,利用归档日志,系统可被恢复至故障发生的前一刻,也可以还原到指定的时间点,而如果没有归档日志文件,则只能利用备份进行恢复。

DM 服务器可以运行在两种模式下,即归档模式和非归档模式,这两种模式可以由用户进行设置,系统在归档模式下运行时,会产生归档日志文件,此时系统管理员应该事先预留出足够的磁盘空间以便存储归档日志文件。通过 dm.ini 和 dmarch.ini 可以配置归档。

归档日志包括以下五种类型:

  • 本地归档
    • 本地归档就是将 REDO 日志写入到本地归档文件。本地归档在 REDO 日志写入联机日志文件后触发,由归档线程完成本地归档动作,最多可以设置 8 个本地归档。
    • 与联机 Redo 日志文件可以被覆盖重用不同,本地归档日志文件不能被覆盖,写入其中的 Redo 日志信息会一直保留,直到用户主动删除;如果配置了归档日志空间上限,系统会自动删除最早生成的归档 Redo 日志文件,腾出空间。
  • 实时归档
    • 在写入 REDO 日志到日志文件之前,通过 MAL 系统发送 REDO 日志到远程服务器,远程服务器收到 REDO 日志后,返回确认消息。收到确认消息后,执行后续操作,发送 REDO 日志失败,或从备库返回的数据库模式不是 STANDBY,将数据库切换为 SUSPEND 状态,阻塞所有 REDO 日志的写入操作。一个主库可以配置 1~8 个实时备库。
  • 即时归档
    • 即时归档在主库将 Redo 日志写入联机 Redo 日志文件后,再通过 MAL 系统将 Redo 日志发送到备库。即时归档是读写分离集群的实现基础,与实时归档的主要区别是发送 Redo日志的时机不同。一个主库可以配置 1~8 个即时备库。
  • 异步归档
    • 在设定的时间点或者每隔设定时间,启动归档 REDO 日志发送。设置定时归档,必须确保至少有一个本地归档。系统调度线程根据设定,触发归档 REDO 日志发送事件。通过 MAL 系统,获取远程服务器的当前 LSN,生成发送归档 REDO 日志任务,加入任务队列。归档任务线程获取任务,通过 MAL 系统,发送到远程服务器。最多可以设置 8 个异步归档。
  • 远程归档
    • 远程归档(REMOTE ARCHIVE)就是将归档目录配置在远程节点上。远程归档与本地归档的主要区别是 REDO 日志写入的位置不同,本地归档将 REDO 日志写入数据库实例所在节点的磁盘,而远程归档则将 REDO 日志写入到其他数据库实例所在节点的指定归档目录。远程归档日志文件的命名规范和本地归档日志文件保持一致,都是以归档名+归档文件的创建时间进行组合命名。最多可以配置 8 个远程归档。

二、配置归档

2.1 静态配置

(1)设置DM8数据库配置文件dm.iniARCH_INI参数值为1

#configuration file
ARCH_INI = 1

(2)在与dm.ini相同目录下,新建配置文件dmarch.ini,并添加归档配置参数。配置示例如下:

#DM单机
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /data/dmarch
ARCH_FILE_SIZE = 1024
ARCH_SPACE_LIMIT = 20480

(3)重启数据库服务,使配置生效。

2.2 动态配置

SQL> alter database mount;
executed successfully
used time: 00:00:01.144. Execute id is 0.
SQL> alter database archivelog;
executed successfully
used time: 10.277(ms). Execute id is 0.
SQL> alter database add archivelog        'DEST=/data/dmarch,TYPE=LOCAL,FILE_SIZE=1024,SPACE_LIMIT=20480';
executed successfully
used time: 7.437(ms). Execute id is 0.
SQL> alter database open;
executed successfully
used time: 00:00:01.262. Execute id is 0.

2.3 检查是否生效

检查ARCH_INI参数配置是否生效

SQL> select para_name, para_value, sess_value, file_value from V$DM_INI where para_name = 'ARCH_INI';

查询结果如下:

行号        PARA_NAME PARA_VALUE SESS_VALUE FILE_VALUE
---------- --------- ---------- ---------- ----------
1          ARCH_INI  1          1          1

已用时间: 4.117(毫秒). 执行号:13307.

或者

SELECT ARCH_MODE FROM V$DATABASE;

查询结果如下:

行号     ARCH_MODE
---------- ---------
1          Y

三、dmarch.ini配置项

项目 项目意义 字段 字段意义
全局配置项 ARCH_WAIT_APPLY 备库收到 Redo 日志后,是否需要重演完成后再响应主库。 0 表示收到马上响应(高性能模式),1 表示重演完成后响应(事务一致模式)。配置为即时归档时,缺省值为 1;配置为实时归档时,缺省值为 0。 针对配置实时归档的 DMDSC 数据守护集群,不支持将 ARCH_WAIT_APPLY 配置为 1
ARCH_RESERVE_TIME 归档日志保留时间,单位分钟,取值范围 0~2147483647。只对本地归档有效。 服务器每隔 5 分钟检查是否存在超过保留时间的归档并删除。缺省为 0,表示不删除归档
ARCH_LOCAL_SHARE DMDSC 集群本地归档是否共享给远程节点作为远程归档。 注:自 V8.1.3.61 版本起废弃该参数,始终共享
ARCH_LOCAL_SHARE_CHECK 是否进行 LOCAL 归档和 REMOTE 归档路径的一致性校验。 注:自 V8.1.3.61 版本起废弃该参数,始终校验
ARCH_SEND_POLICY 主库发送 REALTIME 归档的策略,取值 0 或 1,缺省为 0。0:主库发送 REALTIME 归档后立即等待备库响应消息;1:主库发送 REALTIME 归档后不立即等待备库的响应消息,而是先将当前日志包写入联机日志文件,然后再等待备库响应消息。 当此参数配置为 1 时,日志包刷盘与等待备库响应的动作等效于并发执行,相比于配置为 0 的策略而言,能够减少主库日志刷盘线程因等待备库响应消息而阻塞的时间,降低 REALTIME 备库对主库性能的影响。 TIMELY 主备不支持此参数;DMDSC 集群中也不支持配置此参数,但允许在 DMDSC 主备中的单机库上配置此参数。 注意:如果主库将 ARCH_SEND_POLICY 配置为 1,且守护进程配置为自动接管模式,则备库自动接管可能会有集群分裂的风险,需要谨慎使用此配置方式
XMAL_HB_INTERVAL DMDPC 专用。节点间通信检测间隔。单位 S,取值范围 1~600。该参数仅在多副本集群中使用,多副本各实例需配置相同
RAFT_HB_INTERVAL DMDPC 专用。主库广播心跳消息的间隔时间。单位 MS,取值范围 5~1800。该参数仅在多副本集群中使用,多副本各实例需配置相同
RAFT_VOTE_INTERVA DMDPC 专用。选举超时时间。单位 MS,取值范围 10~60000。这个配置值需要保证至少是 RAFT_HB_interval 的 2 倍大小,确保在选举超时时间内能够收到主库的心跳消息,避免误判主库故障发起无效选举。 建议各实例配置为不同的值,以便能够快速选举出主库,配置的值越小,被选举为主库的优先级越高。该参数仅在多副本集群中使用,并且仅在开启选举开关的实例上有效
RAFT_SELF_ID DMDPC 专用。多副本节点编号,用于标识多副本 RAFT 组中不同的节点。取值范围 0~3
RAFT_LEARNER DMDPC 专用。用于标识自己是否为 LEARNER 角色。1:是,0:否。 参数缺省为 0,非 LEARNER 节点可不配置此参数
RAFT_PKG_INTERVAL DMDPC 专用。专用于多副本环境中,设置备库接收主库日志包的超时时间。当备库超过该时间还未接收到主库日志包,则备库主动断开与主库连接。单位 S,取值范围 60~36000。缺省为不配置该参数。可选参数
[ARCHIVE_LOCAL1] 本地归档配置 ARCH_TYPE 归档类型
ARCH_DEST 归档路径。需要配置在 ARCH_TYPE 之后
ARCH_FILE_SIZE 单个归档文件大小,单位 MB,取值范围 64~2048,缺省为 1024MB,即 1G
ARCH_SPACE_LIMIT 本地归档文件空间限制。当同一节点号的本地归档文件达到限制值时,系统自动删除最早生成的本地归档日志文件。0 表示无空间限制,取值范围 1024~2147483647,缺省为 0,单位 MB
ARCH_FLUSH_BUF_SIZE 归档合并刷盘缓存大小,单位 MB,取值范围 0~128。0 表示不使用归档刷盘缓存机制。缺省为 2
ARCH_HANG_FLAG 本地归档写入失败时系统是否挂起。取值范围 0~2;缺省为 1。 0:写入失败后不挂起,直接报错返回,不再尝试写入; 1:写入失败后挂起,反复尝试写入归档,直到写入成功; 2:写入失败后先删除最老的归档文件,再重新尝试写入,反复进行该过程直到归档写入成功,或者所有归档文件都已经被删除;若所有归档文件都已经被删除的情况下仍然写入失败,则直接报错返回,不再尝试写入。 需要注意的是,若当前库配置的所有本地归档 ARCH_HANG_FLAG 均为非 1 值,则写入归档失败后可能会出现归档日志缺失的情况,进而可能产生特定情况下备份还原无法正常进行等问题
ARCHIVE_REALTIME 实时归档配置 ARCH_TYPE 归档类型
ARCH_DEST 归档目标实例名。需要配置在 ARCH_TYPE 之后
WAIT_APPLY 若归档目标未配置 WAIT_APPLY,则以全局 ARCH_WAIT_APPLY 为准;若某一个归档目标配置了 WAIT_APPLY,则对应归档目标是否是事务一致由配置的 WAIT_APPLY 为准。 取值:0:表示高性能模式;1:表示事务一致模式
ARCH_STANDBY_APPLY 是否根据归档目标重演情况确定自身本地归档可删除。取值 0:否;1:是。默认值为 0
ARCHIVE_ASYNC 异步归档配置 ARCH_TYPE 归档类型
ARCH_DEST 归档目标实例名。需要配置在 ARCH_TYPE 之后
ARCH_TIMER_NAME 定时器名称。需要配置在 ARCH_TYPE 之后
ARCH_SEND_DELAY 指定源库到异步备库的归档延时发送时间,单位分钟,取值范围 0~1440,缺省为 0,表示不启用归档延时发送功能。 注:仅在异步归档类型中支持此配置项,其他归档类型不支持。如果源库是 DSC 集群,建议用户配置时保证各节点上配置的值是一致的,并保证各节点所在机器的时钟一致,避免控制节点发生切换后计算出的归档延迟发送时间不一致
ARCH_STANDBY_APPLY 是否根据归档目标重演情况确定自身本地归档可删除。取值:0:否;1:是。默认值为 0
ARCHIVE_SYNC 同步归档配置 ARCH_TYPE 归档类型
ARCH_DEST 归档目标实例名。需要配置在 ARCH_TYPE 之后
ARCH_RECOVER_TIME 主库向同步备库发起异步恢复的时间间隔,单位秒,取值范围 1~86400,缺省为 1,表示主库每隔 1 秒检查一次同步备库的归档状态,若为 INVALID 且和同步备库通信正常,则发起异步恢复。 注:仅在同步归档类型中支持配置此项,其他归档类型不支持
ARCH_STANDBY_APPLY 是否根据归档目标重演情况确定自身本地归档可删除。取值:0:否;1:是。默认值为 0
ARCHIVE_TIMELY 即时归档配置 ARCH_TYPE 归档类型
ARCH_DEST 归档目标实例名。需要配置在 ARCH_TYPE 之后
WAIT_APPLY 若归档目标未配置 WAIT_APPLY,则以全局 ARCH_WAIT_APPLY 为准;若某一个归档目标配置了 WAIT_APPLY,则对应归档目标是否是事务一致由配置的 WAIT_APPLY 为准。 取值:0:表示高性能模式;1:表示事务一致模式
ARCH_STANDBY_APPLY 是否根据归档目标重演情况确定自身本地归档可删除。取值:0:否;1:是。默认值为 0
[ARCHIVE_RAFT1] RAFT归档配置 ARCH_TYPE 归档类型。ARCH_TYPE 支持配置为 RAFT 和 LEARNER。其中 LEARNER 归档仅在动态增删节点时使用
ARCH_DEST 归档目标实例名。需要配置在 ARCH_TYPE 之后
ARCH_DEST_ID 归档目标多副本节点编号,用于标识多副本 RAFT 组中不同的节点。取值范围 0~31
ARCH_STANDBY_APPLY 是否根据归档目标重演情况确定自身本地归档可删除。取值:0:否;1:是。默认值为 0
REMOTE 远程归档配置 ARCH_TYPE 归档类型
ARCH_DEST 归档目标实例名。需要配置在 ARCH_TYPE 之后
ARCH_INCOMING_PATH 指定远程归档目标 ARCH_DEST 的本地归档日志文件存放路径。需要配置在 ARCH_TYPE 之后
ARCH_RECV_PATH 修复故障节点归档,直接将联机日志检查点偏移后的所有有效日志拷贝一份写入本地路径

四、进阶

根据数据库日志查看归档量

(1)查看某个月每天的归档量

cat dm_DMSERVER_202509.log | grep 'rafil_file_create' | grep 'success'| awk '{print $1}'| sort | uniq -c

(2)查看某月某天每个小时的归档量

cat dm_DMSERVER_202509.log | grep 'rafil_file_create' | grep 'success' | grep '2025-09-24' | awk '{split($2, time, ":"); print time[1]}' | sort | uniq -c

(3)详细版

cat dm_DMSERVER_202509.log | grep 'rafil_file_create' | grep 'success' | grep '2025-09-24' |
awk '{
    split($2, time, ":");
    hour = time[1];
    count[hour]++
} 
END {
    printf("%-10s %s\n", "时间", "生成归档文件数");
    printf("%-10s %s\n", "------", "------------------");
    for (h=0; h<24; h++) {
        hh = sprintf("%02d", h);
        printf("%02d:00-%02d:59 %d\n", h, h, count[hh]+0)
    }
}'

上述命令可以看到每天生成归档文件的次数,再结合dmarch.ini中配置的ARCH_FILE_SIZE即单个归档文件大小,便可计算得出每日的归档量。归档量=次数×ARCH_FILE_SIZE

暂无评论

发送评论 编辑评论


|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇