重庆思庄Oracle、KingBase、PostgreSQL、Redhat认证学习论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 629|回复: 0
打印 上一主题 下一主题

[Oracle] 如何快速删除grid用户的审计日志文件

[复制链接]
跳转到指定楼层
楼主
发表于 2025-8-24 21:22:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
前言
某客户生产环境 Oracle 19c RAC 集群突发磁盘空间告警,经排查发现 Grid 审计日志占用了 30GB 磁盘空间,目录下堆积了520 万个审计文件:

SQL> show parameter audit
NAME                TYPE        VALUE
------------------- ----------- ----------------------------
audit_file_dest     string      /u01/app/12.2.0/grid/rdbms/audit
audit_sys_operations boolean    TRUE
审计配置保留了默认设置,导致sys用户的每项操作都生成审计记录,在长期运行后产生了惊人的文件数量。

紧急处理过程
首次尝试:直接删除失败
rm -rf *.aud
-bash: /bin/rm: Argument list too long
Linux 系统限制单次命令参数长度约 2MB,当文件数量超过数万时,rm 命令直接失败。

应急方案:find -exec 删除
find /u01/app/12.2.0/grid/rdbms/audit -name "*.aud" -exec rm -f {} \;
此方案每删除一个文件就执行一次rm命令,520 万文件耗时超过 30 分钟,在争分夺秒的生产维护中效率不足。

性能优化探索
测试环境模拟
创建 500 万审计文件模拟生产环境:

## python 创建更快
import os

dir_path = "/u01/app/12.2.0/grid/rdbms/audit/"
os.makedirs(dir_path, exist_ok=True)

for i in range(5_000_000):
    with open(os.path.join(dir_path, f"file_{i:07d}.aud"), 'w') as f:
        pass
多种删除方案性能对比


性能王者:rsync 方案
mkdir empty_dir
time rsync -a --delete empty_dir/ /u01/app/12.2.0/grid/rdbms/audit/
2 分 10 秒完成 500 万文件删除,比find -delete快 60%!原理是利用 rsync 的增量同步算法,直接操作文件系统结构。

生产环境推荐
1. 紧急清理(最快)
mkdir /tmp/empty_dir
rsync -a --delete --progress /tmp/empty_dir/ /u01/app/12.2.0/grid/rdbms/audit/
2. 安全清理(保留目录结构)
find /u01/app/12.2.0/grid/rdbms/audit -type f -name "*.aud" -delete
3. 按时间清理(保留近期文件)
find /u01/app/12.2.0/grid/rdbms/audit -name "*.aud" -mtime +30 -delete
长效预防机制
1. 审计策略优化
ALTER SYSTEM SET audit_sys_operations=FALSE SCOPE=spfile;  -- 关闭sys审计
ALTER SYSTEM SET audit_trail=NONE SCOPE=spfile;          -- 关闭数据库审计
2. 定期清理脚本
#!/bin/bash
# 保留7天审计日志
find /u01/app/*/grid/rdbms/audit -name "*.aud" -mtime +7 -delete
3. 文件系统隔离
# 为审计日志创建独立文件系统
lvcreate -n audit_lv -L 50G vg_data
mkfs.xfs /dev/vg_data/audit_lv
echo "/dev/vg_data/audit_lv /grid_audit xfs defaults 0 0" >> /etc/fstab
mount -a
chown grid:oinstall /grid_audit
技术原理解析
为什么 find -delete 更快?
系统调用优化:直接使用unlinkat()系统调用,避免进程创建开销;

批量处理:内部缓存文件列表,减少上下文切换;

目录遍历优化:深度优先遍历减少磁盘寻道时间;

文件删除性能影响因素:
文件系统类型:XFS > EXT4 > BtrFS(海量小文件场景);

磁盘类型:NVMe SSD > SAS HDD(7200 转硬盘 500 万文件删除需 1 小时+);

inode 缓存:vfs_cache_pressure参数优化可提升 20%性能;

目录结构:扁平目录比深层目录快 3-5 倍;

经验总结
预防优于治疗:审计配置应纳入数据库部署检查清单;

空间隔离:关键组件(如 Grid)使用独立文件系统;

性能认知:海量小文件操作需特殊方法,常规命令可能适得其反;

工具选择:

万级文件:find -delete

十万级:xargs批量处理

百万级:rsync或专用工具

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 支持支持 反对反对
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|重庆思庄Oracle、Redhat认证学习论坛 ( 渝ICP备12004239号-4 )

GMT+8, 2026-4-18 00:16 , Processed in 0.232768 second(s), 20 queries .

重庆思庄学习中心论坛-重庆思庄科技有限公司论坛

© 2001-2020

快速回复 返回顶部 返回列表