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):诊断数据(incident、trace、cdump)。
  • /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 任务确保长期管理。

相关推荐
DB哥讲数据库9 小时前
【达梦数据库安装教程】超详细图文讲解-附达梦安装包
数据库·oracle
Aric_Jones17 小时前
WAL / CDC / 复制槽 /位点
数据库·oracle
细嗅蔷薇@1 天前
排序和分⻚(order by 、limit)
数据库·oracle
梦想平凡1 天前
棋牌游戏技术实战(五):从对局事件重新执行规则,核对棋盘和最终状态
数据库·游戏·oracle
白露与泡影1 天前
Oracle AI Database 26ai RAC 部署步骤、关键命令与一键脚本
数据库·人工智能·oracle
腾科IT教育1 天前
Oracle OCP和MySQL OCP怎么选?方向对比指南
mysql·oracle·ocp·oracle ocp·ocp怎么选·mysql ocp
行业研究员2 天前
Agent Memory降低Token消耗原理解析
数据库·人工智能·oracle·腾讯云·智能体
薛晓刚2 天前
Oracle ADG 备库归档丢了怎么办?RMAN 增量前滚实战
数据库·oracle
阿俊-全栈开发2 天前
LikeShop 版本升级与备份:从旧版平滑迁移的完整步骤
jvm·数据库·oracle·开源·likeshop·likeshop开源商城
蜗牛互联网3 天前
Java Agent 工具调用的 allowlist、参数校验与调用预算
java·开发语言·人工智能·后端·oracle