为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】: dm8.4 安全版
【操作系统】:Kylin V10
【CPU】: Kunpeng-920
【问题描述】*:备库服务器文件系统损坏,将其detach出集群进行维修。大约10天后,备库服务器维修完成重新加入集群,发现备库无法与主库同步,经查主库每隔30分钟,会自动清理7天前的归档文件。
查询v$dm_arch_ini,ARCH_SPACE_LIMIT配置的200G,ARCH_RESERVE_TIME=0。当前归档目录仅使用2G。
日志如下:
rafil_file_delete_low delete file [path/to/archivelog]
delete local archive file [path/to/archivelog].
local archive delete before time [2026-05-25 00:00:57] end.
remote archive delete before time [2026-05-25 00:00:57] start.
remote archive delete before time [2026-05-25 00:00:57] end.
...
#下一次删除时间
2026-06-01 00:30:28.362 local archive delete before time [2026-05-25 00:30:28] start ......
补充1::定时任务只有每周日全备、周一至周六增量备份,每天删除30天前的备份sp_db_bakset_remove_batch('DISK',sysdate-30)
补充2:数据库为1主2备,主库和备库1会定时删,备库2不会定时删。主库和备库1,每30分钟会生成新的归档文件,单个归档文件很小,远没有达到配置的2G。备库2单个归档文件到2G后,才会生成新的。
有没有第三方备份,如果有就检查下备份任务里是不是加了删除归档的操作
应该是数据库自身作业里面有清理归档的配置,或者其他定时任务(主机上面的crontab、其他程序发起的定时执行)执行的清理命令,如果是数据库作业里面可以用以下语句确认一下:
select * from sysjob.SYSJOBSTEPS where upper(command) like '%SF_ARCHIVELOG_DELETE_BEFORE_TIME%';
可以排查下数据库自动任务或者linux系统主库的crontab任务。
日志中显示的 rafil_file_delete_low delete file 清理,通常是由用户或第三方工具(如定时脚本、备份软件)通过调用达梦的系统函数 SF_ARCHIVELOG_DELETE_BEFORE_TIME 来触发的。这个函数可以手动删除指定时间点之前的归档文件。
# 检查当前root用户的crontab
crontab -l
# 检查dmdba用户的crontab
crontab -u dmdba -l
-- 查询所有作业的基本信息
SELECT * FROM sysjob.SYSJOBS;
在 dmarch.ini 中配置 ARCH_RESERVE_TIME,单位:分钟。
ARCH_RESERVE_TIME = 10080 -- 7天 × 24h × 60min
| 特性 | 说明 |
|---|---|
| 检查频率 | 系统每 5分钟 自动检查一次 |
| 清理策略 | 删除超过保留时间的归档日志 |
| 精确控制间隔 | ❌ 不支持 |
观察到"每隔半小时"清理,可能是检查时机与日志生成节奏自然交汇,并非 ARCH_RESERVE_TIME 严格按时触发。如需精确控制,应通过作业调度实现。
通过达梦作业(Job) 或 OS 定时任务(crontab)调用 SF_ARCHIVELOG_DELETE_BEFORE_TIME 函数实现:
SELECT SF_ARCHIVELOG_DELETE_BEFORE_TIME(SYSDATE - 7);
| 方式 | 精确控制间隔 | 说明 |
|---|---|---|
| 达梦作业 | ✅ 精确 | 与数据库绑定,可移植性好 |
| OS crontab | ✅ 精确 | 简单直接,依赖 OS 环境 |
| ARCH_RESERVE_TIME | ❌ 粗粒度 | 零维护,无法精确控制 |
按磁盘空间上限自动清理,不按时间维度删除。
ARCH_SPACE_LIMIT = 102400 -- 归档空间上限(MB),超过则自动删除最旧归档
| 步骤 | 排查方向 | 操作 |
|---|---|---|
| 1️⃣ | dmarch.ini |
查看 ARCH_RESERVE_TIME / ARCH_SPACE_LIMIT 的值 |
| 2️⃣ | 数据库作业 | 查 SYSOBJECTS 或管理工具中是否存在归档清理作业 |
| 3️⃣ | OS 定时任务 | 查 crontab -l 中是否调用 rm 或 SF_ARCHIVELOG_DELETE_BEFORE_TIME |
| 4️⃣ | 自定义脚本 | 查 /etc/cron.d/ 或 /dm/bin/ 下归档清理脚本 |
初步判断: 读写分离集群 + 每半小时精确清理 + 7天前日志 → 大概率是自定义定时作业或 OS crontab 实现,优先排查第 2、3 步。

看下定时作业的配置