Oracle磁盘占用达91%,除临时文件外还可删除哪些内容?
Oracle磁盘占用91%?安全清理指南来啦
兄弟,磁盘冲91%确实得赶紧动手,先给你梳理清楚哪些内容绝对安全、不会搞崩数据库,再给你优先级建议,避免踩坑:
一、Oracle目录下可放心删除的内容
- 临时文件目录(比如
/tmp或Oracle指定的临时目录):除了你已经删的,还可以扫一遍所有.tmp/.temp后缀的文件,以及那些7天以上没被访问的临时文件(用命令find /path/to/oracle/tmp -type f -mtime +7就能定位)。放心,正在被数据库使用的临时文件会被锁定,你删的时候会提示,直接删那些能删掉的就行。 - 已备份的归档日志:如果你的归档日志(一般在
$ORACLE_BASE/diag/rdbms/<dbname>/<dbname>/trace或者专门的归档目录)已经完成异地备份(比如云存储、磁带库),旧的归档日志完全可以清。别直接用rm硬删,最好用Oracle自带的RMAN命令:
这样只会删7天前已备份的日志,不会误删关键文件。RMAN> DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7'; - 过期的审计日志:审计日志默认存在
$ORACLE_BASE/admin/<dbname>/adump,如果你的业务不需要长期追溯审计记录,直接删30天以上的文件就行:find $ORACLE_BASE/admin/<dbname>/adump -type f -mtime +30 -delete - 已异地备份的本地RMAN备份集:如果你用RMAN做了本地备份,且已经同步到外部存储,本地的旧备份(一般在
$ORACLE_BASE/flash_recovery_area或自定义备份目录)可以清理,同样用RMAN命令更安全:
它会自动识别过期的备份,不会删错有用的。RMAN> DELETE OBSOLETE;
二、磁盘占91%时的清理优先级
- 先清临时文件+过期日志:这部分见效最快,而且100%安全,不会影响数据库运行,优先搞。
- 清理本地冗余备份:如果有异地备份,本地备份一般占空间极大,清完能释放好几G甚至几十G。
- 压缩/清理大trace文件:有些trace文件会疯长到几个G,先看一下是不是近期的异常日志——如果只是普通的运行日志,直接压缩(
gzip *.trc)或者删除就行;如果是报错日志,建议先排查问题再处理。 - 收缩临时表空间:如果临时表空间的临时文件(
*.tmp)过大,且当前没有大查询、排序在运行,可以先收缩:
ALTER TABLESPACE TEMP SHRINK SPACE;
要是收缩效果不好,也可以切换临时表空间后删除旧的临时文件(操作前记得确认没有会话在使用它)。
三、绝对不能碰的红线!!
这些文件碰了直接搞崩数据库,甚至丢数据,打死也不能删:
- 数据库数据文件(
*.dbf):核心数据都在这,删了直接GG - 控制文件(
*.ctl):数据库的“导航地图”,没它数据库起不来 - 在线重做日志文件(
*.log):正在使用的删了会导致数据库崩溃,即使是归档后的,也得确认已备份再动 - 密码文件(
orapw<dbname>):删了会导致远程登录、权限验证全失效
最后提醒
清理前最好先把要删的文件移到临时目录放1天,确认数据库运行正常再彻底删除,避免误操作。用RMAN清理时,先执行CROSSCHECK ARCHIVELOG ALL;确认日志状态,再删除更稳妥。
内容的提问来源于stack exchange,提问作者Ynz




