注册
达梦DM8归档清理的四种手段
培训园地/ 文章详情 /

达梦DM8归档清理的四种手段

角宿 2026/10/22 51 0 0

达梦DM8归档清理的四种手段

简述

DM数据库可以在归档和非归档两种模式下运行,如果是归档模式,联机日志文件中的 内容保存到硬盘中,形成归档日志文件;如果是非归档模式,则不会形成归档日志。归档模式的具体配置参数参考dmdbms/doc/DM8数据守护与读写分离集群V4.0.pdf- 5.3dmarch.ini。
DM支持多种归档方式。采用归档模式会对系统的性能产生些许影响,然而系统在归档模式下运行会更安全,当出现故障时其丢失数据的可能性更小,这是因为一旦出现介质故障,如磁盘损坏时,利用归档日志,系统可被恢复至故障发生的前一刻,也可以还原到指定的时间点,而如果没有归档日志文件,则只能利用备份进行恢复。通过dm.ini和dmarch.ini可以配置本地归档。dmarch.ini生效的前提是dm.ini中的参数ARCH_INI置为1。DM的 dmarch.ini可以进行本地归档和远程归档的设置,DM备份与还原过程中使用的日志均为本地归档日志。查询 v$dm_arch_ini、v$arch_status等动态视图可以获取归档配置以及归档状态等相关信息。因此,为了保证归档日志文件和数据文件不同时出现问题,建议将归档目录与数据文件配置、保存 到不同的物理磁盘上。除了表备份还原,其他的联机备份与还原必须运行在归档模式下。DM数据库定义了多种归档方式,包括本地归档、实时归档、即时归档、异步归档和远程归档,其中本地归档和远程归档与备份还原密切相关。 本次仅对单机环境下数据库归档日志清理进行尝试。
其中归档备份清理可通过几种方式进行,dmarch.ini参数进行清理、通过系统存储过程和函数去清理、DM自带工具进行清理、linux删除与第三方产品等。

补充:归档日志文件的存储定位与命名

1. 归档日志文件在物理存储结构中的位置
DM 物理存储结构描述数据在硬盘上的存储,包括配置文件、控制文件、数据文件、备份文件以及日志文件。其中日志文件的层级如下:

  • 日志文件(即重做日志文件)
    • 联机日志文件
    • 归档日志文件(本文讨论对象)

2. 归档的本质——为什么要清理的根源
《系统管理员手册》"关键术语"中对归档的定义是:

  • 归档是指在数据库运行过程中,拷贝已经生成并即将被覆盖的重做日志进行长期保存。
    之所以需要归档,根源在于联机日志文件会循环覆盖:每个 DM 数据库实例必须至少有 2 个联机日志文件,默认为 DAMENG01.log 和 DAMENG02.log,生成于数据库实例目录下,默认扩展名为 log,可在创建数据库实例时使用建库参数 RLOG_POSTFIX_NAME 指定扩展名。联机日志文件大小有限,文件写满后系统循环使用这两个文件,最初写入的日志会陆续被新的重做日志覆盖。
    由此可以得出一个关键推论:归档日志是把即将被覆盖的 REDO 日志另存下来,它本身不会被循环覆盖,只会在磁盘上持续堆积。这正是归档清理需求存在的技术根源——不清理就会一直增长,直至写满归档盘。

3. 归档日志文件的命名规则

  • 归档日志文件以归档时间命名;
  • 扩展名默认与初始化数据库时指定的参数 RLOG_POSTFIX_NAME 一致;
  • 也可通过 INI 参数 LOG_FILE_POSTFIX_NAME 指定归档日志文件的扩展名。

4. DM 支持的归档类型(ARCH_TYPE)
dmarch.ini 中通过 ARCH_TYPE 区分归档类型,DM 目前支持 9 种,且各有数量上限:

  • 本地归档 ARCH_TYPE=LOCAL,一个主库最多配 8 个
  • 远程实时归档 ARCH_TYPE=REALTIME,一个主库最多配 8 个
  • 远程异步归档 ARCH_TYPE=ASYNC,一个主库最多配 8 个
  • 同步归档 ARCH_TYPE=SYNC,一个主库最多配 8 个
  • 订阅归档 ARCH_TYPE=SUBSCRIBE,一个备库最多配 1 个
  • 即时归档 ARCH_TYPE=TIMELY,一个主库最多配 8 个
  • 远程归档 ARCH_TYPE=REMOTE,一个主库最多配 8 个
  • RAFT 归档 ARCH_TYPE=RAFT,一个主库最多配 8 个
  • LEARNER 归档 ARCH_TYPE=LEARNER,一个主库最多配 9 个
    其中 DM 备份与还原过程中使用的日志均为本地归档日志。

5. 版本订正:ARCH_RESERVE_TIME 的适用范围
需要特别注意一处易错点。部分早期文档(含本文早期版本)将 ARCH_RESERVE_TIME 描述为"对本地归档和远程归档均有效",但最新版《系统管理员手册》表 2.33 的原文明确写的是:只对本地归档有效。其完整说明为:

  • ARCH_RESERVE_TIME:归档日志保留时间,单位分钟,取值范围 0~2147483647。只对本地归档有效。服务器每隔 5 分钟检查是否存在超过保留时间的归档并删除。缺省为 0,表示不删除归档。
    引用该参数时应以当前使用版本的手册为准,并注明验证版本号。

6. 归档配置与归档状态的查看方式
dmarch.ini 生效的前提是 dm.ini 中的参数 ARCH_INI 置为 1。查询 V$DM_ARCH_INI、V$ARCH_STATUS 等动态视图可以获取归档配置以及归档状态等相关信息。其中 V$ARCH_STATUS 的 ARCH_STATUS 列取值含义如下:

  • VALID:有效状态
  • INVALID:无效状态
  • ASYNC_SEND:表示正在进行归档日志同步
    需要说明的是,在备库上查询该视图时,REALTIME/TIMELY/RAFT/LEARNER 四种归档类型的归档状态会显示为 NULL,这四种归档类型应在主库上查询归档状态。

7. 补充说明:归档与检查点的关系
重做日志文件的连续性依赖检查点机制保障。当系统中产生检查点时,系统会自动将日志缓冲区中的日志和数据缓冲区中的脏数据页全部写入磁盘,以保证当前日志所"保护"的数据页都已安全写入磁盘,这样日志文件即可被安全重用。理解这一点有助于判断"哪些归档已经不再被恢复需要覆盖"——后续章节中清理前的前置检查正是围绕备份集的 LSN 覆盖范围展开的。

准备

安装部署一套数据库,单机安装部署内容可参照DM云社区文档,下附链接不做赘述。

https://eco.dameng.com/document/dm/zh-cn/ops/installation-install.html

硬件环境:

硬件类别 数量 配置
数据库服务器 1 2CPU/4G内存/25G

软件环境:

软件类别 配置
操作系统 Redhat7.6
数据库 达梦数据库8.1.2.114
其他工具软件 xshell

数据库文件位置:

文件位置 所在路径
数据库位置 /home/dmdba/dmdbms/
二进制文件位置 /home/dmdba/dmdbms/bin/
实例位置 /data/DAMENG/
归档位置 /data/dmarch/

单机测试,开启归档单个归档限制128M并不限制归档空间(正式环境建议至少单个大小为512M,并限制归档空间)

alter database mount;
alter database add archivelog 'dest=/data/dmarch,TYPE=local,FILE_SIZE=128';
alter database archivelog;
alter database open;

归档dmarch.ini参数如下:

img_01.png

归档状态如下:
img_02.png

任意生成归档日志,供测试

img_03.png

清理前的前置检查
归档日志是"指定时间点恢复"的唯一依据。数据库还原后必须经过恢复阶段才能到达一致性状态,而恢复所需的 REDO 日志至少要覆盖备份集中记录的 [BEGIN_LSN, END_LSN] 区间。归档日志一旦缺失,将直接导致恢复失败。
因此归档删除的第一原则是:只删除已经被备份覆盖的归档。删除了某个备份集尚未包含的归档,意味着该时段的任意时间点恢复能力永久丧失,且删除动作不可回滚。
清理前先确认备份范围与归档覆盖范围:

SELECT BACKUP_NAME, BACKUP_PATH, BEGIN_LSN, END_LSN, BEGIN_TIME, END_TIME
FROM V$BACKUPSET ORDER BY BEGIN_TIME DESC LIMIT 10;
SELECT NAME, ARCH_TYPE, ARCH_LSN, CLSN, FIRST_TIME, END_TIME, STATUS
FROM V$ARCH_FILE;

判定标准:待删除归档的 CLSN(该归档包含的最大 LSN)必须小于等于最近一次有效备份的 END_LSN。超出这个范围的归档,即使时间很老也不能删除。
这一顺序可参考达梦《常见故障应急手册》中"大量数据导入导致归档空间满载"的官方处置步骤:

  • 确认归档所在路径空间使用情况。
  • 确认近期备份 LSN 范围。
  • 手动清理无保留必要的归档:SELECT SF_ARCHIVELOG_DELETE_BEFORE_TIME(SYSDATE - 3);
  • 重新检查归档空间使用情况,按需调整归档保留策略。
    若数据库处于主备或集群环境,还需额外确认备库已重演到对应 LSN,详见后文"主备与 DMDSC 环境的差异"。
    补充:归档写满时系统会怎样
    本地归档日志文件与联机 Redo 日志不同,不能被覆盖重用,写入其中的 Redo 日志会一直保留,直到用户主动删除,或达到配置的空间上限后由系统自动删除最早的归档来腾出空间。如果磁盘空间不足,且没有配置归档日志空间上限(或配置的上限超过实际磁盘空间),系统将自动挂起,直到用户主动释放出足够的空间后才继续运行。这正是生产环境必须为本地归档配置 ARCH_SPACE_LIMIT 的直接原因。
    归档写入失败时的具体行为由 ARCH_HANG_FLAG 控制(dmarch.ini 参数,取值范围 0~2,缺省为 1):
  • 0:写入失败后不挂起,直接报错返回,不再尝试写入。
  • 1:写入失败后挂起,反复尝试写入归档,直到写入成功。这是缺省行为,意味着归档写满会导致整个实例挂起、业务全部阻塞。
  • 2:写入失败后先删除最老的归档文件,再重新尝试写入,反复进行直到写入成功,或者所有归档文件都已经被删除。
    使用这个参数有两点必须注意:
    其一,若当前库配置的所有本地归档 ARCH_HANG_FLAG 均为非 1 值,写入归档失败后可能会出现归档日志缺失,进而产生特定情况下备份还原无法正常进行等问题。
    其二,在设置多路本地归档的情况下,第一路本地归档若磁盘空间不足,系统会被强制挂起,不受 ARCH_HANG_FLAG 控制;其他本地归档才可以通过该参数设置是否挂起。
    将 ARCH_HANG_FLAG 配置为 2 可以在空间紧张时保住业务连续性,但系统在"自动删除最老归档"时并不会考虑该归档是否已被备份,因此必须与完善的备份策略配合使用,不建议作为常规手段。
    补充参数说明:ARCH_FILE_SIZE 表示单个 Redo 日志归档文件大小,单位 MB,取值范围 64~2048,缺省为 1024。文件越大则归档切换频率越低、文件数量越少,但恢复时的粒度越粗,可根据日归档量权衡设置。

通过参数进行清理

ARCH_SPACE_LIMIT

ARCH_SPACE_LIMIT:Redo日志归档空间限制,当同一节点的本地归档文件或远程归档文件达到限制值时,系统自动删除最早生成的归档日志文件。0表示无空间限制,取值范围(1024M~2147483647M),对本地归档和远程归档有效,缺省为0。
注:上述两个参数的适用范围描述基于 DM 8.1.2.114 环境实测。DM8 较新版本的参数手册已将 ARCH_SPACE_LIMIT、ARCH_RESERVE_TIME 的适用范围表述为"仅对本地归档有效",且 DM8 2024 年第 3 季度季度版对 ARCH_RESERVE_TIME 删除归档的功能进行了改进。高版本环境请以对应版本的官方手册为准,不要跨版本直接套用本文结论。
可手动修改dmarch.ini中ARCH_SPACE_LIMIT参数,也可sql执行。

alter database modify archivelog 'DEST=/data/dmarch, TYPE=LOCAL, FILE_SIZE=128, SPACE_LIMIT=1024';

修改ARCH_RESERVE_TIME为1024,即日志归档空间限制上限为1024M。

img_04.png

然后执行切换归档文件的命令alter system switch logfile;
查看数据库日志tail -100f /home/dmdba/dmdbms/log/dm_DMSERVER_202205.log

img_05.png

对比/data/dmarch文件中归档文件

img_06.png

已完成清理

ARCH_RESERVE_TIME

ARCH_RESERVE_TIME:归档日志保留时间,单位分钟,取值范围(0~4294967294)。 只对远程归档和本地归档有效。服务器每隔5分钟检查是否存在超过保留时间的归档并删除。默认为0,表示不删除归档。
手动修改dmarch.ini中ARCH_RESERVE_TIME参数,更改为1440即归档保留24小时。

img_07.png

img_08.png

查看数据库日志tail -100f /home/dmdba/dmdbms/log/dm_DMSERVER_202205.log

img_09.png

对比/data/dmarch文件中归档文件

img_10.png

已完成清理

执行清理函数的权限要求
调用 SF_ARCHIVELOG_DELETE_BEFORE_TIME 与 SF_ARCHIVELOG_DELETE_BEFORE_LSN 需要注意账号权限。达梦官方 FAQ 明确指出:不同版本的权限表现并不一致,已记录的测试中,8.1.2.18、8.1.2.128、8.1.2.192 与 8.1.3.26、8.1.4.80 的表现存在差异,后者要求 DBA 权限。
因此不能根据主版本号推断全部补丁版本的行为。若使用非 DBA 账号执行时返回错误或看似无效,请先在目标版本上确认权限要求,或改用 DBA 账号执行。

通过系统存储过程和函数进行清理

DM 提供了按指定的时间或指定的 LSN 删除归档日志的系统函数,分别为 SF_ARCHIVELOG_DELETE_BEFORE_TIME 和 SF_ARCHIVELOG_DELETE_BEFORE_LSN

SF_ARCHIVELOG_DELETE_BEFORE_TIME

定义:
INT
SF_ARCHIVELOG_DELETE_BEFORE_TIME (
time datetime
)
功能说明:
数据库以归档模式打开的情况下,删除指定时间之前的归档日志文件,包括本地归档和远程归档。待删除的文件必须处于未被使用状态
参数说明:
time:指定删除的最大关闭时间,若大于当前使用归档日志文件的创建时间, 则从当前使用归档文件之前的归档日志文件开始删除
返回值:
删除归档日志文件数,-1表示出错
举例说明:
删除一天之前的归档日志

SELECT SF_ARCHIVELOG_DELETE_BEFORE_TIME(SYSDATE-1);

img_11.png

SF_ARCHIVELOG_DELETE_BEFORE_LSN

定义:
INT
SF_ARCHIVELOG_DELETE_BEFORE_LSN(
lsn bigint
)
功能说明:
数据库以归档模式打开的情况下,删除小于指定 LSN 值的归档日志文件,包括本地归档和远程归档。待删除的文件必须处于未被使用状态
参数说明:
lsn:指定删除的最大LSN值文件,若指定lsn值大于当前正在使用归档日志的起始LSN(arch_lsn),则从当前使用归档文件之前的文件开始删除
返回值:
删除归档日志文件数,-1表示出错
举例说明:
删除 LSN 值小于 95560 的归档日志文件

SELECT SF_ARCHIVELOG_DELETE_BEFORE_LSN(4296300);

img_12.png

DM自带工具进行清理

dmrachk(2023Q3之前)

dmrachk工具:
rachk V8
version: 03134283890-20220304-158322-10045
格式: dmrachk keyword=value
例程: dmrachk arch_fil=/opt/a.log

强制参数: 必须指定arch_fil或者arch_path

关键字 说明(默认值)

ARCH_FIL 指定一个归档文件
CMP_FIL 指定一个用于比较的归档文件
ARCH_PATH 指定一个归档目录
CMP_PATH 指定一个用于比较的归档目录
RECV_PATH 指定一个待修复的归档目录
TRUNC_FIL 指定新的文件,用于存储从错误归档中,抽取的有效数据。
EXTRACT_FIL 指定新的文件,用于存储从指定的seq范围的归档文件中抽取数据
ARCH_BAK_PATH 指定备份文件路径,用于存储归档修复过程中的重复文件
CHECK 校验级别(0, 1, 2, 3, 4) 0: 文件校验, 1: 包校验(seq & magic),2:ptx校验,3:rrec校验, 4:清理无效的归档文件, 5:修复归档文件到free之后的最后一个有效日志包。默认(0)
BEGIN_LSN 指定归档目录时,指定排除小于该LSN的文件
END_LSN 指定归档目录时,指定排除大于该LSN的文件
BEGIN_SEQ 指定归档目录时,抽取大于该SEQ的文件
END_SEQ 指定归档目录时,抽取小于该SEQ的文件
BEFORE_LSN CHECK=4,指定归档目录,删除该LSN之前的文件。默认为0,所有LSN范围内日志均删除
BEFORE_SEQ CHECK=4,指定归档目录,删除该SEQ之前的文件。默认为0,所有SEQ范围内日志均删除
BEFORE_TIME CHECK=4,指定归档目录,删除该时间点之前的文件。默认删除所有时间点的归档
EXCLUDE_DB_MAGIC CHECK=4,指定归档目录,删除指定的DB_MAGIC之外的文件。
OUTPUT_FIL LOG可以指定输出到文件
DCR_INI 指定dmdcr.ini路径,若未指定,则不使用
DM_INI 目标库dm.ini的路径,用于获取日志加密信息
AFTER_FREE 指定TRUNC_FIL时,是否校验并抽取FREE之后的内容。0 不抽取;1 抽取。默认0

删除该时间点之前的文件

dmrachk ARCH_PATH=/data/dmarch CHECK=4 BEFORE_TIME=2022-05-16

img_13.png

删除该LSN之前的文件

dmrachk ARCH_PATH=/data/dmarch CHECK=4 BEFORE_LSN=4296300

img_14.png

dmrachk(2023Q3之后)

dmrachk工具:
rachk V8
version: 03134284132-20240308-220710-20081 Pack14
格式: dmrachk keyword=value
例程: dmrachk F_TYPE=2 F_PATH=/opt/a.log OP_TYPE=2

关键字 说明(默认值)

F_TYPE 必选,表示读入的日志文件类型,与F_PATH配合使用
1 F_PATH必须指向归档目录
2 F_PATH必须指向某个归档文件
F_PATH 必选,对应F_TYPE的路径
OP_TYPE 必选,操作类型,对应不同的F_TYPE
当F_TYPE = 1:
1 归档比较,比较两个目录的LSN和PTX差异
2 归档校验,检查归档文件有效性
3 归档抽取,指定新的文件,用于存储从指定seq范围的归档中抽取的数据
4 去重修复,去除归档目录下存在重复的归档日志,将存在重复的归档拷贝到备份文件路径下
5 缺失修复,使用F_PATH目录中的归档文件来修复RECV_PATH目录中的归档文件
6 密钥更新,更新归档文件加密密钥
当F_TYPE = 2:
1 归档比较,比较两个归档文件的LSN和PTX差异
2 归档校验,检查归档文件有效性
3 归档截取,不论归档是否有效,截取到最后一条有效lsn写入截取文件
CMP_FIL 归档比较必选,指定一个用于比较的归档文件
CMP_PATH 归档比较必选,指定一个用于比较的归档目录
BEGIN_LSN 归档比较和校验可选,指定归档目录时,指定排除小于该LSN的文件,默认为0表示不启用
END_LSN 归档比较和校验可选,指定归档目录时,指定排除大于该LSN的文件,默认为0表示不启用
CHECK 归档校验可选,校验级别(0, 1, 2, 3, 4, 5, 6) 0: 文件校验,1: 包校验(seq & magic),2:ptx校验,3:rrec校验,4:清理无效的归档文件, 5:各节点日志包依赖关系检查,6:修复归档文件到free之后的最后一个有效日志包。默认0,CHECK=4,CHECK=5只在F_TYPE=1时有效
BEFORE_LSN CHECK=4可选,指定归档目录,删除该LSN之前的文件。默认为0,所有LSN范围内日志均删除
BEFORE_SEQ CHECK=4可选,指定归档目录,删除该SEQ之前的文件。默认为0,所有SEQ范围内日志均删除
BEFORE_TIME CHECK=4可选,指定归档目录,删除该时间点之前的文件。默认删除所有时间点的归档
EXCLUDE_DB_MAGIC CHECK=4可选,指定归档目录,删除指定的DB_MAGIC之外的文件
ARCH_PATH_INI CHECK=5可选,指定dsc节点的归档存放路径配置文件
TRUNC_FIL 归档截取必选,指定新的文件,用于存储从归档中抽取的数据
AFTER_FREE 归档截取可选,是否校验并截取FREE之后的内容。0 不截取;1 截取。默认0
TRUNC_CHECK 归档截取可选,是否校验归档文件。0 不校验;1 校验。默认0
ARCH_BAK_PATH 去重修复必选,指定备份文件路径,用于存储归档修复过程中的重复文件
RECV_PATH 缺失修复必选,指定一个待修复的归档目录
EXTRACT_FIL 归档抽取必选,指定新的文件,用于存储从指定的seq范围的归档文件中抽取的数据
BEGIN_SEQ 归档抽取必选,指定归档目录时,抽取大于该SEQ的文件
END_SEQ 归档抽取必选,指定归档目录时,抽取小于该SEQ的文件
CYT_UPDATED_PATH 密钥更新可选,归档密钥更新目标文件所在目录。未指定时,直接在原文件上更新;若指定,则更新到新的路径,原文件保持不变
OUTPUT_FIL 可选,LOG可以指定输出到文件
DCR_INI 可选,指定dmdcr.ini路径,用于当前归档文件或者目录在ASM文件系统的情况,若不指定,则不访问ASM。默认不指定
DM_INI 可选,指定dm.ini的路径,用于获取日志加密信息
HELP 显示帮助信息

危险操作提示
CHECK=4 是 dmrachk 唯一会真正删除归档文件的校验级别。当 f_type=1(F_PATH 指向归档目录)时,若不同时指定 BEFORE_TIME 或 BEFORE_LSN,将删除该目录下的全部归档文件。
建议养成以下执行习惯:

  1. 先中断确认清单。工具会先列出待删除文件清单并提示 Continue or not[Y/N],此时按 Ctrl+C 中断,核对清单是否符合预期。
  2. 核对无误后再重新执行,输入 y 确认删除。
  3. 生产环境建议将 BEFORE_TIME 设置为"最近一次全量备份完成时间减去一段安全余量",确保不会删除尚未被备份覆盖的归档。

删除该时间点之前的文件

./dmrachk f_type=1 f_path=/data/dmarch op_type=2 check=4 BEFORE_TIME='2026-09-21 10:30:00'
[dmdba@iZbp11v3futq3cgx27zpmrZ bin]$ ./dmrachk f_type=1 f_path=/data/dmarch op_type=2 check=4 BEFORE_TIME='2026-09-21 10:30:00'
rachk V8
the database pmnt_magic: 977913598
the database db_magic: 1362335248
Archive files selected to delete are as follows:
/data/dmarch/ARCHIVE_LOCAL1_0x51339610_EP0_2026-09-21_10-10-51.log
/data/dmarch/ARCHIVE_LOCAL1_0x51339610_EP0_2026-09-21_10-11-51.log
/data/dmarch/ARCHIVE_LOCAL1_0x51339610_EP0_2026-09-21_10-26-42.log
Continue or not[Y/N]:
^C
[dmdba@iZbp11v3futq3cgx27zpmrZ bin]$ ls -l /data/dmarch/
total 4194268
-rw-r--r-- 1 dmdba dinstall      61440 Sep 21 10:19 ARCHIVE_LOCAL1_0x51339610_EP0_2026-09-21_10-10-51.log
-rw-r--r-- 1 dmdba dinstall 1073741824 Sep 21 10:26 ARCHIVE_LOCAL1_0x51339610_EP0_2026-09-21_10-11-51.log
-rw-r--r-- 1 dmdba dinstall 1073737728 Sep 21 10:37 ARCHIVE_LOCAL1_0x51339610_EP0_2026-09-21_10-26-42.log
-rw-r--r-- 1 dmdba dinstall 1073631232 Sep 21 11:00 ARCHIVE_LOCAL1_0x51339610_EP0_2026-09-21_10-37-21.log
-rw-r--r-- 1 dmdba dinstall 1073741824 Sep 21 11:06 ARCHIVE_LOCAL1_0x51339610_EP0_2026-09-21_11-00-17.log
[dmdba@iZbp11v3futq3cgx27zpmrZ bin]$ ./dmrachk f_type=1 f_path=/data/dmarch op_type=2 check=4 BEFORE_TIME='2026-09-21 10:30:00'
rachk V8
the database pmnt_magic: 977913598
the database db_magic: 1362335248
Archive files selected to delete are as follows:
/data/dmarch/ARCHIVE_LOCAL1_0x51339610_EP0_2026-09-21_10-10-51.log
/data/dmarch/ARCHIVE_LOCAL1_0x51339610_EP0_2026-09-21_10-11-51.log
/data/dmarch/ARCHIVE_LOCAL1_0x51339610_EP0_2026-09-21_10-26-42.log
Continue or not[Y/N]:
y
/data/dmarch/ARCHIVE_LOCAL1_0x51339610_EP0_2026-09-21_10-10-51.log deleted.
/data/dmarch/ARCHIVE_LOCAL1_0x51339610_EP0_2026-09-21_10-11-51.log deleted.
/data/dmarch/ARCHIVE_LOCAL1_0x51339610_EP0_2026-09-21_10-26-42.log deleted.
the rachk tool running cost 3065.131 ms, code:0
[dmdba@iZbp11v3futq3cgx27zpmrZ bin]$ ls -l /data/dmarch/
total 2097052
-rw-r--r-- 1 dmdba dinstall 1073631232 Sep 21 11:00 ARCHIVE_LOCAL1_0x51339610_EP0_2026-09-21_10-37-21.log
-rw-r--r-- 1 dmdba dinstall 1073741824 Sep 21 11:06 ARCHIVE_LOCAL1_0x51339610_EP0_2026-09-21_11-00-17.log

img_15.png

删除该LSN之前的文件

./dmrachk f_type=1 f_path=/data/dmarch op_type=2 check=4 BEFORE_LSN=10000000
[dmdba@iZbp11v3futq3cgx27zpmrZ bin]$ ls -l /data/dmarch/
total 5242848
-rw-r--r-- 1 dmdba dinstall      61440 Sep 21 11:20 ARCHIVE_LOCAL1_0x51339610_EP0_2026-09-21_10-10-51.log
-rw-r--r-- 1 dmdba dinstall 1073741824 Sep 21 11:21 ARCHIVE_LOCAL1_0x51339610_EP0_2026-09-21_10-11-51.log
-rw-r--r-- 1 dmdba dinstall 1073737728 Sep 21 11:21 ARCHIVE_LOCAL1_0x51339610_EP0_2026-09-21_10-26-42.log
-rw-r--r-- 1 dmdba dinstall 1073631232 Sep 21 11:21 ARCHIVE_LOCAL1_0x51339610_EP0_2026-09-21_10-37-21.log
-rw-r--r-- 1 dmdba dinstall 1073741824 Sep 21 11:21 ARCHIVE_LOCAL1_0x51339610_EP0_2026-09-21_11-00-17.log
-rw-r--r-- 1 dmdba dinstall 1073741824 Sep 21 11:22 ARCHIVE_LOCAL1_0x51339610_EP0_2026-09-21_11-22-24.log
[dmdba@iZbp11v3futq3cgx27zpmrZ bin]$ ./dmrachk f_type=2 f_path=/data/dmarch/ARCHIVE_LOCAL1_0x51339610_EP0_2026-09-21_10-37-21.log op_type=2
rachk V8
/*******************************************************************/
归档文件/data/dmarch/ARCHIVE_LOCAL1_0x51339610_EP0_2026-09-21_10-37-21.log明细.
version        : 0x7007
status         : INACTIVE
enc_flag       : FALSE
n_rpkgs        : 147194
pmnt_magic     : 977913598
db_magic       : 1362335248
src_db_magic   : 1362335248
arch_lsn       : 9178763
arch_seq       : 276462
clsn           : 13741041
next_seq       : 423655
g_next_seq     : 423655
file len       : 1073631232
file free      : 1073631232
dsc seqno      : 0
dsc node       : 1
create time    : 2026-09-21 10:37:21.371927 time_zone:+08:00
close time     : 2026-09-21 11:00:17.192114 time_zone:+08:00
llog first time     : 1900-01-01 00:00:00.000000 time_zone:+08:00
llog last time      : 1900-01-01 00:00:00.000000 time_zone:+08:00
/*******************************************************************/
概要(节点[0]):
总计: 1 个文件
正确: 1 个文件
错误: 0 个文件
重复: 0 个文件
the rachk tool running cost 0.996 ms, code:0
[dmdba@iZbp11v3futq3cgx27zpmrZ bin]$ ./dmrachk f_type=1 f_path=/data/dmarch op_type=2 check=4 BEFORE_LSN=10000000
rachk V8
the database pmnt_magic: 977913598
the database db_magic: 1362335248
Archive files selected to delete are as follows:
/data/dmarch/ARCHIVE_LOCAL1_0x51339610_EP0_2026-09-21_10-10-51.log
/data/dmarch/ARCHIVE_LOCAL1_0x51339610_EP0_2026-09-21_10-11-51.log
/data/dmarch/ARCHIVE_LOCAL1_0x51339610_EP0_2026-09-21_10-26-42.log
Continue or not[Y/N]:
y
/data/dmarch/ARCHIVE_LOCAL1_0x51339610_EP0_2026-09-21_10-10-51.log deleted.
/data/dmarch/ARCHIVE_LOCAL1_0x51339610_EP0_2026-09-21_10-11-51.log deleted.
/data/dmarch/ARCHIVE_LOCAL1_0x51339610_EP0_2026-09-21_10-26-42.log deleted.
the rachk tool running cost 2536.012 ms, code:0
[dmdba@iZbp11v3futq3cgx27zpmrZ bin]$ ls -l /data/dmarch/
total 3145632
-rw-r--r-- 1 dmdba dinstall 1073631232 Sep 21 11:21 ARCHIVE_LOCAL1_0x51339610_EP0_2026-09-21_10-37-21.log
-rw-r--r-- 1 dmdba dinstall 1073741824 Sep 21 11:21 ARCHIVE_LOCAL1_0x51339610_EP0_2026-09-21_11-00-17.log
-rw-r--r-- 1 dmdba dinstall 1073741824 Sep 21 11:25 ARCHIVE_LOCAL1_0x51339610_EP0_2026-09-21_11-22-24.log

img_16.png

Linux命令删除

通过find和rm操作去删除INACTIVE的归档文件(最新的为ACTIVE)

find /data/dmarch -mtime +1 -name "*.log" -exec rm -rf {} \;

img_17.png

Linux 命令删除的补充建议
命令:

find /data/dmarch -mtime +1 -name "*.log" -exec rm -rf {} \;

三点修改建议:

  • -mtime 判断的是文件修改时间,与"该归档是否已被备份"没有必然关系。文件被拷贝、touch 或磁盘迁移都可能改变 mtime,导致本该保留的归档被误删。删除前请对照备份集的 END_LSN 人工确认(见前文"清理前的前置检查")。
  • -mtime +1 表示修改时间在 48 小时之前(按 24 小时取整),与直观理解的"一天前"存在差异,容易误判范围。
  • rm -rf 用于普通文件过于激进,且 find -exec rm 没有二次确认环节。
    建议改写为分两步执行:
find /data/dmarch -maxdepth 1 -name "*.log" -mtime +1 -print

确认清单无误后再删除:

find /data/dmarch -maxdepth 1 -name "*.log" -mtime +1 -delete

其中 -maxdepth 1 用于防止误删子目录中的文件。
注意:视图里"还在"不等于删除失败
手动删除归档文件后,V$ARCH_FILE2 视图仍会展示已删除的文件信息。原因是 V$ARCH_FILE2 的数据从缓存中获取,存在延时,与反映即时信息的 V$ARCH_FILE 视图结果不一致。因此使用文件系统命令删除后,请查询 V$ARCH_FILE 确认结果,不要因为视图里"文件还在"就重复删除或误判失败。
归档视图速查
日常归档管理建议掌握以下动态视图:

  • V$ARCH_FILE 查询本地已归档的日志信息,反映即时状态,需要准确结果时以该视图为准。
  • V$ARCH_FILE2 字段与 V$ARCH_FILE 相同,数据取自缓存,查询速度更快,但存在延时;DSC 环境下无法显示故障节点的归档信息。
  • V$ARCH_FILE_HISTORY DM8 2025Q4 季度版新增视图,记录被服务器主动删除的归档文件历史信息,最多 10000 条。
  • V$ARCHIVED_LOG 记录当前实例所有归档日志文件的名称、归档类型、日志记录起始时间与截止时间等。
  • V$DM_ARCH_INI 查询归档配置信息。
  • V$ARCH_STATUS 查询归档状态信息。
    其中 V$ARCH_FILE_HISTORY 适合事后审计"哪些归档在什么时间被系统自动删除了",在配置了 ARCH_SPACE_LIMIT、ARCH_RESERVE_TIME 自动清理的场景尤为有用。
    主备与 DMDSC 环境的差异
    本文所有操作均基于单机环境验证。生产环境多为主备集群或 DMDSC 共享存储集群,套用前请注意以下差异:
  1. 本地归档与远程归档的 ARCH_SPACE_LIMIT 空间上限分开计算。查询 V$ARCH_FILE 时,DSC 环境会同时返回本地归档与远程归档,ASM 环境下还可能返回集群其他节点的归档,读取结果时注意按类型过滤。
  2. 备库生成本地归档时按收到日志包的节点号分开保存,各节点归档链表独立计算空间上限。若主库原为 DSC 集群而后发生主备切换、新主库为单机,则新生成的归档仅加入 0 号归档链表,此时 0 号链表的空间增长速度会明显快于切换之前,需提前评估。
  3. 主库删除归档时默认不参考备库重演进度。相关参数为 ARCH_STANDBY_APPLY:主库是否根据备库重演信息判断自身归档可删除,0 表示不参考(缺省值),1 表示参考。若备库因故障重演滞后,而主库已把对应归档删除,备库将无法继续追平,只能重新搭建。备库重要性高的场景建议设为 1。

总结

备份与恢复过程都依赖归档日志,归档日志是保证数据一致性和完整性的重要保障。如果日归档量较大或磁盘紧张可尝试进行归档清理。
其中ARCH_SPACE_LIMIT和ARCH_RESERVE_TIME可在dmarch.ini中进行配置。
SF_ARCHIVELOG_DELETE_BEFORE_TIME 和 SF_ARCHIVELOG_DELETE_BEFORE_LSN可以通过达梦数据库作业或者脚本进行自动化调度。
dmrachk也可以通过脚本进行自动化调度清理方式
选择建议
四种手段各有适用场景,实际生产中建议组合使用:
常规兜底:配置 ARCH_SPACE_LIMIT + ARCH_RESERVE_TIME 实现自动管理,避免人工遗漏导致磁盘写满、实例挂起。
精确控制:将 SF_ARCHIVELOG_DELETE_BEFORE_TIME / SF_ARCHIVELOG_DELETE_BEFORE_LSN 纳入达梦作业系统或定时脚本,按备份完成情况精确控制保留窗口。
手动与应急:dmrachk 用于归档完整性校验、去重修复、缺失修复以及一次性清理,灵活性最高但需要人工把关。
最后手段:Linux find / rm 仅在应急、且已确认目标归档已被备份覆盖时使用,不作为常规手段。
无论采用哪种方式,执行前请务必完成"清理前的前置检查"一节中的备份范围覆盖确认。
本文适用版本说明
本文操作基于达梦数据库 DM 8.1.2.114 单机环境验证。dmrachk 参数体系存在 2023Q3 前后的明显差异,ARCH_SPACE_LIMIT 与 ARCH_RESERVE_TIME 的适用范围描述、删除归档所需的权限要求也因版本而异,在其他版本上使用时请先在测试环境验证后再上生产。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服