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:
bashwhich 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/*
-
验证:
bashls -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
确认语法,或尝试:iniSET 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):数据文件不可删除,可优化表空间:
sqlSELECT 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 任务确保长期管理。