一、归档日志为啥会占满空间?
咱们搞数据库的都知道,DM数据库运行时会不断产生归档日志,就像手机里的聊天记录一样越积越多。这些日志本来是为了保证数据安全,万一系统崩溃了能靠它们恢复。但问题是,这些日志文件不会自动清理,时间一长就把磁盘撑爆了。
我遇到过最夸张的情况是,一个生产环境的归档目录竟然积累了2TB的日志文件!直接把磁盘写满了,数据库当场罢工。那会儿DBA急得直跳脚,业务部门电话都快被打爆了。
二、手动清理的常规操作
最直接的解决办法就是手动删除旧日志,DM数据库提供了归档日志管理命令。比如要清理7天前的日志,可以这么干:
-- DM数据库归档日志清理示例
-- 先检查当前归档状态
SELECT * FROM V$ARCHIVED_LOG;
-- 删除7天前的归档日志
DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';
-- 确认删除后的空间情况
SELECT * FROM V$ARCHIVE_DEST_STATUS;
不过这种方法有个大问题:得有人记得定期执行。我见过太多因为忘记清理最后导致事故的案例了。而且手动操作容易出错,万一不小心把不该删的日志删了,那乐子就大了。
三、自动化清理方案实战
3.1 使用RMAN工具
DM数据库的RMAN工具(恢复管理器)可以配置自动清理策略,这是最推荐的做法。下面是个完整的配置示例:
-- 配置RMAN自动归档删除策略
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON ALL STANDBY;
-- 设置自动执行
RMAN> RUN {
ALLOCATE CHANNEL ch1 DEVICE TYPE DISK;
DELETE NOPROMPT ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';
RELEASE CHANNEL ch1;
}
-- 可以设置成每天凌晨自动执行
这个方案最大的优点是设置一次就一劳永逸,系统会自动按照策略清理。不过要注意配置合适的保留天数,别设得太短影响恢复能力。
3.2 结合操作系统的定时任务
如果不想用RMAN,也可以写个Shell脚本配合crontab:
#!/bin/bash
# DM数据库归档清理脚本
# 设置环境变量
export DM_HOME=/opt/dmdbms
export PATH=$DM_HOME/bin:$PATH
# 保留最近7天的日志
find /archivelog -name "*.arc" -mtime +7 -exec rm -f {} \;
# 在数据库中标记已删除的日志
disql SYSDBA/SYSDBA <<EOF
DELETE FROM V$ARCHIVED_LOG WHERE NAME LIKE '/archivelog/%' AND COMPLETION_TIME < SYSDATE-7;
COMMIT;
EOF
然后加到crontab里每天跑:
0 2 * * * /scripts/clean_archivelog.sh >/dev/null 2>&1
四、方案选型的注意事项
4.1 不同场景的选择建议
- 核心生产系统:强烈建议用RMAN方案,稳定可靠还能配合备份策略
- 测试环境:可以直接用操作系统脚本,简单粗暴
- 有容灾的环境:要确保备库已经应用了日志才能删,否则会破坏容灾
4.2 常见坑点提醒
- 别在业务高峰期清理:我见过有人在上午10点跑大日志删除,直接把IO拖垮了
- 保留天数要合理:一般7-30天比较合适,具体看业务容忍度
- 先备份再删除:特别重要的日志可以先备份到廉价存储
- 监控不能少:清理后要确认空间确实释放了,别被文件句柄未释放坑了
五、进阶技巧:归档日志的妙用
其实归档日志不只是占空间的"垃圾",用好了能帮大忙:
-- 使用归档日志进行时间点恢复
RMAN> RUN {
SET UNTIL TIME "TO_DATE('2023-06-01 12:00:00', 'YYYY-MM-DD HH24:MI:SS')";
RESTORE DATABASE;
RECOVER DATABASE;
}
-- 还可以用来搭建备库
CREATE STANDBY DATABASE USING ARCHIVELOG FROM '/archivelog';
六、总结与最佳实践
经过这么多年的踩坑经验,我总结出归档日志管理的"三要三不要":
✅ 要自动化:别依赖人工操作 ✅ 要监控:设置空间使用率告警 ✅ 要测试:定期演练日志恢复
❌ 不要一刀切:根据业务重要性制定不同策略 ❌ 不要贪省事:该保留的日志必须保留 ❌ 不要不验证:每次调整策略后要测试恢复
最后给个万能模板,适合大多数中小规模场景:
- 配置RMAN保留7天日志
- 设置每天凌晨2点自动清理
- 每周检查一次归档目录空间
- 每月做一次恢复演练
照着这个做,保管你再也不用担心被归档日志搞崩系统!
评论