Oracle19c清理Sysaux中统一审计记录:先执行INIT_CLEANUP初始化框架,设置归档时间戳,启用CLEANUP_OS_AUDIT_JOB作业。清理时指定AUDIT_TRAIL_UNIFIED类型,执行用户需拥有AUDIT_ADMIN角色,避免SYS直连。
先说一个最常见的场景:你写了一段 PL/SQL,调用 DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL,执行成功,没报错,结果去查 SELECT COUNT(*) FROM unified_audit_trail,数据纹丝不动。这时候第一反应往往是“函数是不是有问题”?其实不是,函数本身没问题,而是调用链断在了初始化、作业启用或参数匹配这几个环节上。

长期稳定更新的攒劲资源: >>>点此立即查看<<<
追根溯源,问题出在三个环节,缺一不可:
DBMS_AUDIT_MGMT.INIT_CLEANUP:这是最容易被忽略的一步。只要没初始化,后续所有 CLEAN_AUDIT_TRAIL 调用都会静默失败——不报错,也不清理,就像打了招呼没人应答。AUDIT_TRAIL_TYPE => DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED。如果你传的是 AUDIT_TRAIL_ALL 或 AUDIT_TRAIL_AUD_STD,函数不会报错,但实际跳过 AUD$UNIFIED 表,等于白干。CLEANUP_OS_AUDIT_JOB 默认不启用,这意味着手动调用 CLEAN_AUDIT_TRAIL 可以工作,但自动清理永远触发不了。这几个步骤缺一不可,顺序也不能乱:
SELECT VALUE FROM V$OPTION WHERE PARAMETER = 'Unified Auditing',返回 TRUE 才说明走的是统一审计路径。BEGIN DBMS_AUDIT_MGMT.INIT_CLEANUP(audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED, default_cleanup_interval => 24); END;。注意 default_cleanup_interval 的单位是小时,如果设为 0,就表示禁用自动调度。SELECT MIN(event_timestamp) FROM unified_audit_trail,再设置一个早于它的归档点,比如 BEGIN DBMS_AUDIT_MGMT.SET_LAST_ARCHIVE_TIMESTAMP(audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED, last_archive_time => SYSTIMESTAMP - 90); END;。BEGIN DBMS_SCHEDULER.ENABLE('CLEANUP_OS_AUDIT_JOB'); END;。注意作业名是 CLEANUP_OS_AUDIT_JOB,不是 CLEANUP_AUDIT_JOB,拼错一个字就等于没做。手动调用 CLEAN_AUDIT_TRAIL 时,有两个布尔参数决定清理范围:
use_last_arch_timestamp => TRUE:只清理早于 SET_LAST_ARCHIVE_TIMESTAMP 设置时间的记录。但前提是必须先调用那个设置,否则会报 ORA-46365。use_last_arch_timestamp => FALSE:忽略归档时间戳,直接清空全部 unified_audit_trail。这个操作要慎用,生产环境建议只用于测试或灾备恢复后。audit_trail_type 必须明确指定为 DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED,混用其他类型同样会静默失效。即使语法全对、步骤完整,仍可能失败,原因往往出在执行上下文:
AUDIT_ADMIN 角色,DBA 角色不够。可以运行 SELECT * FROM DBA_ROLE_PRIVS WHERE GRANTED_ROLE = 'AUDIT_ADMIN' 确认。SYS 用户直连执行(比如 sqlplus / as sysdba),会报 ORA-46367: Operation not allowed for SYS user。应该改用 SYSTEM 或已授 AUDIT_ADMIN 的普通管理账号。AUD$UNIFIED 是 IOT 表,删除后需要手工执行 ALTER TABLE AUDSYS.AUD$UNIFIED SHRINK SPACE CASCADE(记得先启用行移动)。真正卡住人的地方,从来不是某一行代码写错,而是 INIT_CLEANUP 没跑、作业名拼错、或者用 SYS 去执行——这些错误不报红,只让数据原地不动。每次清理前,花两分钟查查 DBA_AUDIT_MGMT_CONFIG_PARAMS 和 DBA_SCHEDULER_JOBS,比盲目重试快得多。
侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述