注册
DM9归档清理
专栏/技术分享/ 文章详情 /

DM9归档清理

DM_KSL 2026/07/24 64 0 0
摘要

DM9归档清理

达梦数据库归档日志的清理,核心思路有两种:让系统根据空间配额自动清理,或者通过函数按时间或LSN手动指定删除。考虑到稳健性,更推荐设置自动清理,以避免手动操作失误导致的数据恢复风险。

一、 设置自动清理

设置归档目录的空间上限,达梦数据库会在达到上限时自动删除最早的归档文件。可以在dmarch.ini配置文件中修改或添加SPACE_LIMIT参数

[ARCHIVE_LOCAL1]
        ARCH_TYPE            = LOCAL        
        ARCH_DEST            = /dmdata/arch        # 归档路径
        ARCH_FILE_SIZE       = 128        # 单个归档文件大小(MB)
        ARCH_SPACE_LIMIT     = 1024        # 归档总空间上限(MB)
        ARCH_FLUSH_BUF_SIZE  = 2        #归档合并刷盘缓存大小(MB)
        ARCH_HANG_FLAG       = 1		#归档写入失败时数据库挂起

注意:此参数的单位是MB,取值范围为1024MB~2147483647MB。修改后通常需要重启数据库实例或通过SQL动态修改生效。这种方式能一劳永逸地防止磁盘被写满,是生产环境的首选方案

二、 使用系统函数手动清理

如果需要主动、精准地清理归档,必须使用达梦提供的两个专用函数,不建议直接在操作系统层面用rm命令删除,以避免归档状态信息不同步

1. 按时间删除

使用SF_ARCHIVELOG_DELETE_BEFORE_TIME()函数可以删除某个时间点之前产生的归档,比如删除7天前的所有归档日志可以使用如下语句

SELECT SF_ARCHIVELOG_DELETE_BEFORE_TIME(SYSDATE - 7);

注意:SYSDATE - 1表示一天前,如果按SYSDATE - 10/1440(10分钟)这种写法,实际可能会因精度问题而删除预期之外的文件,使用时需格外注意

2. 按LSN删除

使用SF_ARCHIVELOG_DELETE_BEFORE_LSN()函数可以删除LSN小于指定值的归档,比如删除LSN小于95270的归档可以使用如下语句

SELECT SF_ARCHIVELOG_DELETE_BEFORE_LSN(95270);

归档文件当前的LSN范围可以通过查询V$ARCH_FILE视图获得
注意:执行清理函数的用户需要具备ALTER DATABASE系统权限。若指定lsn值大于当前正在使用归档日志的起始LSN(arch_lsn),则从当前使用归档文件之前的文件开始删除

三、 总结

清理方式 优点 缺点/风险 推荐场景
自动清理(SPACE_LIMIT 自动化,无需人工干预,安全可靠 需要预先规划磁盘空间配额 生产环境首选
函数手动清理(按时间/LSN) 灵活,可精细化控制 人为操作风险高,可能误删导致恢复点丢失 日常巡检维护、应急释放空间
评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服