达梦数据库归档日志的清理,核心思路有两种:让系统根据空间配额自动清理,或者通过函数按时间或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命令删除,以避免归档状态信息不同步
使用SF_ARCHIVELOG_DELETE_BEFORE_TIME()函数可以删除某个时间点之前产生的归档,比如删除7天前的所有归档日志可以使用如下语句
SELECT SF_ARCHIVELOG_DELETE_BEFORE_TIME(SYSDATE - 7);
注意:SYSDATE - 1表示一天前,如果按SYSDATE - 10/1440(10分钟)这种写法,实际可能会因精度问题而删除预期之外的文件,使用时需格外注意
使用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) | 灵活,可精细化控制 | 人为操作风险高,可能误删导致恢复点丢失 | 日常巡检维护、应急释放空间 |
文章
阅读量
获赞
