Oracle清理:如何安全删除trace, alert和archivelog文件?

Oracle 数据库运行时文件清理指南

背景:公司阿里云数据库主机,由于长期运行空间告急,通知各项目组多次要求转移数据库空间文件进展缓慢,为保证空间占满影响数据库服务,才有了这次操作,现将实践操作记录下来, 方便后续同时进行操作

本文档总结 Oracle 19.3 数据库(开发环境,安装路径 /home/oracle19c/u01)中清理运行时生成的文件(如诊断日志、归档日志)以节省磁盘空间。目标是清理 /home/oracle19c/u01/app/diag/rdbms/orcl19c/orcl19c(如 incident 曾占 18GB)等目录,保留最近 7 天数据,使用 ADRCI 和 RMAN 工具,无需停止数据库。

1. 环境准备

1.1 设置环境变量

oracle19c 用户登录,配置环境:

bash 复制代码
su - oracle19c
export ORACLE_SID=orcl19c
export ORACLE_BASE=/home/oracle19c/u01/app
export ORACLE_HOME=/home/oracle19c/u01/app/product/19.3
export PATH=$ORACLE_HOME/bin:$HOME/.local/bin:$HOME/bin:/usr/local/bin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/rdbms/lib:$ORACLE_HOME/network/lib:/lib:/usr/lib
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
  • 验证 ADRCI:

    bash 复制代码
    which adrci
    • 应返回 /home/oracle19c/u01/app/product/19.3/bin/adrci

1.2 确认磁盘占用

检查 /home/oracle19c/u01/app 目录:

bash 复制代码
du -sh /home/oracle19c/u01/app/* | sort -hr

示例输出(2025-08-01):

bash 复制代码
32G     /home/oracle19c/u01/app/oradata
8.0G    /home/oracle19c/u01/app/product
12.5G    /home/oracle19c/u01/app/diag
28M     /home/oracle19c/u01/app/cfgtoollogs
13M     /home/oracle19c/u01/app/oraInventory
11M     /home/oracle19c/u01/app/fast_recovery_area
724K    /home/oracle19c/u01/app/admin
12K     /home/oracle19c/u01/app/audit
4.0K    /home/oracle19c/u01/app/checkpoints

重点清理:

  • /diag(12.5G):诊断数据(incidenttracecdump)。
  • /admin(724K):审计日志(adump)。
  • /fast_recovery_area(11M):归档日志。
  • /product(8.0G):检查日志(如 listener.log)。

2. 清理诊断文件(ADRCI)

使用 ADRCI 清理 /home/oracle19c/u01/app/diag/rdbms/orcl19c/orcl19c/home/oracle19c/u01/app/admin/orcl19c/adump 的运行时文件,保留 7 天数据。

2.1 备份

备份诊断和审计目录到 /dcits/

bash 复制代码
tar -czvf /dcits/diag_backup_$(date +%Y%m%d_%H%M%S).tar.gz /home/oracle19c/u01/app/diag/rdbms/orcl19c/orcl19c/*
tar -czvf /dcits/adump_backup_$(date +%Y%m%d_%H%M%S).tar.gz /home/oracle19c/u01/app/admin/orcl19c/adump/*
  • 验证:

    bash 复制代码
    ls -lh /dcits/*_backup_*.tar.gz

2.2 检查 diag 子目录

bash 复制代码
du -sh /home/oracle19c/u01/app/diag/rdbms/orcl19c/orcl19c/* | sort -hr

2.3 设置保留策略

设置 ADR 短期保留策略为 7 天(168 小时):

bash 复制代码
/home/oracle19c/u01/app/product/19.3/bin/adrci

在 ADRCI 交互模式:

ini 复制代码
SET HOMEPATH diag/rdbms/orcl19c/orcl19c
SET CONTROL (SHORTP_POLICY=168)
SET CONTROL (LONGP_POLICY=720)
SHOW CONTROL
EXIT
  • SHORTP_POLICY=168:自动清理 7 天前的诊断数据。

  • LONGP_POLICY=720:保留 30 天元数据。

  • 验证:SHOW CONTROL 显示 SHORTP_POLICY = 168

  • 如果报 DIA-48808,运行 HELP SET CONTROL 确认语法,或尝试:

    ini 复制代码
    SET CONTROL (SHORTP_POLICY = 168)

2.4 清理诊断文件

清理 7 天前(-age 10080)的文件:

  • 事件文件(incident)

    bash 复制代码
    /home/oracle19c/u01/app/product/19.3/bin/adrci exec='set homepath diag/rdbms/orcl19c/orcl19c;purge -age 10080 -type INCIDENT'
  • 跟踪文件(trace)

    bash 复制代码
    /home/oracle19c/u01/app/product/19.3/bin/adrci exec='set homepath diag/rdbms/orcl19c/orcl19c;purge -age 10080 -type TRACE'
  • 核心转储(cdump)

    bash 复制代码
    /home/oracle19c/u01/app/product/19.3/bin/adrci exec='set homepath diag/rdbms/orcl19c/orcl19c;purge -age 10080 -type CDUMP'
  • 告警日志(alert)

    bash 复制代码
    /home/oracle19c/u01/app/product/19.3/bin/adrci exec='set homepath diag/rdbms/orcl19c/orcl19c;purge -age 10080 -type ALERT'
  • 审计日志(audit)

    bash 复制代码
    /home/oracle19c/u01/app/product/19.3/bin/adrci exec='set homepath diag/rdbms/orcl19c/orcl19c;purge -age 10080 -type AUDIT'

2.5 验证清理效果

bash 复制代码
du -sh /home/oracle19c/u01/app/diag/rdbms/orcl19c/orcl19c/{trace,cdump,alert,incident}
du -sh /home/oracle19c/u01/app/admin/orcl19c/adump
df -h /home/oracle19c/u01
ls -ltr /home/oracle19c/u01/app/diag/rdbms/orcl19c/orcl19c/{trace,cdump}

3. 清理归档日志(RMAN)

归档日志(/home/oracle19c/u01/app/oracle/fast_recovery_area,11MB)由数据库归档模式生成,需用 RMAN 清理。

3.1 检查归档模式

vbnet 复制代码
sqlplus / as sysdba
SELECT log_mode FROM v$database;
  • ARCHIVELOG:需清理。
  • NOARCHIVELOG:无需清理。

3.2 检查占用

bash 复制代码
du -sh /home/oracle19c/u01/app/oracle/fast_recovery_area/orcl19c/archivelog

3.3 清理归档日志

清理 7 天前:

sql 复制代码
rman target /
DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';

3.4 禁用归档模式(可选,测试环境)

ini 复制代码
sqlplus / as sysdba
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE NOARCHIVELOG;
ALTER DATABASE OPEN;

4. 清理其他日志

4.1 Listener 日志

检查 /home/oracle19c/u01/app/product 中的日志:

bash 复制代码
du -sh /home/oracle19c/u01/app/product/19.3/network/log/listener.log

截断:

bash 复制代码
: > /home/oracle19c/u01/app/product/19.3/network/log/listener.log

4.2 其他日志

bash 复制代码
find /home/oracle19c/u01/app/product/19.3 -name "*.log" -mtime +7 -exec rm -f {} \;

5. 预防未来占用

5.1 自动化清理

添加 cron 任务,每天凌晨 2 点清理:

bash 复制代码
crontab -e
0 2 * * * /home/oracle19c/u01/app/product/19.3/bin/adrci exec='set homepath diag/rdbms/orcl19c/orcl19c;purge -age 10080 -type TRACE;purge -age 10080 -type CDUMP;purge -age 10080 -type AUDIT;purge -age 10080 -type INCIDENT'

5.2 监控告警日志

bash 复制代码
less /home/oracle19c/u01/app/diag/rdbms/orcl19c/orcl19c/trace/alert_orcl19c.log

6. 注意事项

  • 测试环境:清理风险低,但确保备份以防调试需要。

  • /oradata (32G):数据文件不可删除,可优化表空间:

    sql 复制代码
    SELECT tablespace_name, sum(bytes)/1024/1024/1024 GB
    FROM dba_data_files
    GROUP BY tablespace_name;
  • 权限 :确保 oracle 用户对 /dcits/ 和诊断目录有写权限。

  • 数据库状态:ADRCI 清理无需关闭数据库。

7. 总结

通过 ADRCI 清理 /diag(1.5G)、/admin/adump(724K),RMAN 清理 /fast_recovery_area(11M),并截断 listener.log,可有效释放空间。设置 SHORTP_POLICY=168 和 cron 任务确保长期管理。

相关推荐
Cloud云卷云舒8 小时前
云卷云舒:从Oracle/MySQL迁移到HaishanDB:迁移评估工具核心技术拆解
mysql·oracle·ai-native·haishandb·信创数据库替换
段一凡-华北理工大学9 小时前
向量数据库实战:选型、调优与落地~系列文章12:文本分块策略实战:chunk_size 怎么选?重叠多少?
开发语言·数据库·后端·oracle·rust·工业智能体·高炉智能化
oradh11 小时前
Oracle XTTS实现跨版本迁移和升级(Oracle 11g单库升级至19C RAC集群)
数据库·oracle·11g升级19c·xtts跨版本迁移和升级
会编程的土豆14 小时前
数据库范式
数据库·oracle
—Miss. Z—16 小时前
计算机二级MySQL——简单应用题(存储过程&存储函数)
数据库·oracle·php
NineData19 小时前
Oracle 卡住时先看阻塞源,ChatDBA 会先把锁链路理出来
数据库·oracle·ninedata·锁故障·锁等待·chatdba·锁阻塞
踏月的造梦星球1 天前
达梦数据库执行计划与性能分析入门:EXPLAIN、AUTOTRACE 与 ET
服务器·数据库·oracle
尽兴-2 天前
企业数据库选型与演进:Oracle、达梦、MySQL 与分库分表实践
数据库·mysql·oracle·分库分表
一个儒雅随和的男子2 天前
多租户方案的选型
数据库·oracle
龙仔7253 天前
人大金仓KingbaseES V8 手动单库备份&恢复操作笔记
数据库·笔记·oracle·人大金仓