前言
做 Oracle DBA 的同学,大概率遇到过 SYSAUX 表空间异常增长 的问题 —— 其中一个常见 “元凶” 就是审计记录。Oracle 的审计记录(无论是传统审计的AUD$表,还是 12c + 统一审计的UNIFIED_AUDIT_TRAIL表)默认存储在SYSAUX表空间,若长期不清理,轻则导致表空间满、影响数据库性能,重则触发 “表空间不足” 错误,中断业务。
但审计记录又不能随便删 —— 金融、医疗等行业有明确的合规要求(如等保 2.0、SOX),审计记录需保留 3-7 年,删错或删早都可能引发合规风险。因此,“正确清理” 的核心是:在符合合规要求的前提下,安全释放空间,不影响数据库稳定性。
本文将分「传统审计」和「统一审计」两种场景,详细讲解 SYSAUX 表空间中审计表的清理方法,适用于 Oracle 11g/12c/19c 等主流版本。
一、先明确:你用的是哪种审计?
Oracle 的审计体系分两类,清理方法完全不同,必须先区分清楚:
| 审计类型 | 核心存储表 | 适用版本 | 默认存储位置 |
|---|---|---|---|
| 传统审计 | SYS.AUD$ | 11g 及更早,12c + 兼容 | SYSAUX |
| 统一审计 | SYS.UNIFIED_AUDIT_TRAIL | 12c 及以后(推荐) | SYSAUX |
如何判断当前审计类型?执行以下 SQL:
-- 1. 查看是否启用统一审计(12c+)
SELECT VALUE FROM V$OPTION WHERE PARAMETER = 'Unified Auditing';
-- 返回TRUE:统一审计;FALSE:传统审计
-- 2. 若为传统审计,确认AUD$表位置
SELECT TABLE_NAME, TABLESPACE_NAME, NUM_ROWS
FROM DBA_TABLES
WHERE TABLE_NAME IN ('AUD$', 'UNIFIED_AUDIT_TRAIL');
二、清理前的 3 个核心前提(必做!)
无论哪种审计,清理前必须完成以下 3 步,避免踩坑:
1. 确认审计记录保留周期
先查公司 / 行业的合规要求(如金融行业通常需保留 3 年),只清理超过保留期的历史记录。示例:若要求保留 1 年,只清理 “1 年前及更早” 的记录。
2. 备份审计记录(合规证据,不能少!)
审计记录是合规审计的核心证据,清理前必须全量备份,备份方式推荐两种:
方式 1:数据泵导出(EXPDP,推荐)
# 1. 创建导出目录(需DBA权限)
sqlplus / as sysdba
CREATE DIRECTORY audit_backup_dir AS '/u01/oracle/backup/audit';
GRANT READ, WRITE ON DIRECTORY audit_backup_dir TO system;
exit
# 2. 导出审计表(传统审计导出AUD$,统一审计导出UNIFIED_AUDIT_TRAIL)
# 传统审计示例:
expdp system/Password123!
directory=audit_backup_dir
dumpfile=audit_20250101.dmp
logfile=audit_export.log
tables=sys.aud$
query='WHERE NTIMESTAMP#
2466

被折叠的 条评论
为什么被折叠?



