rac中需逐节点执行select value from v$option where parameter = 'unified auditing'确认是否启用统一审计,每节点返回true才表示真正启用;仅查gv$option可能误判,且unified_audit_trail视图需audit_viewer权限、默认只返回当前实例数据。
怎么确认 rac 是否启用了统一审计?
统一审计不是默认开启的,哪怕你用的是 12.1.0.2 或更高版本。rac 环境下尤其容易误判:只在一个节点上启用,gv$option 就不会全显示 true。必须逐节点检查:
- 连到每个实例,执行
SELECT VALUE FROM V$OPTION WHERE PARAMETER = 'Unified Auditing';,每台都得是TRUE - 别只查
V$OPTION—— 它只反映当前实例;GV$OPTION才能看集群整体,但前提是所有节点都已启用并重启过 - 如果返回
FALSE,说明还在用传统审计(DBA_AUDIT_TRAIL),查UNIFIED_AUDIT_TRAIL视图会报ORA-00942: table or view does not exist
查不到 UNIFIED_AUDIT_TRAIL 数据?先看权限和位置
UNIFIED_AUDIT_TRAIL 是只读视图,背后数据在 AUDSYS schema 下、默认存于 SYSAUX 表空间。普通用户即使有 SELECT ANY DICTIONARY 也查不了,必须显式授权:
- 管理员需执行:
GRANT AUDIT_VIEWER TO your_user; - 若数据库不可写(比如维护模式),审计记录会 fallback 到 OS 文件:
$ORACLE_BASE/audit/$ORACLE_SID,此时查视图自然为空 - RAC 中各节点的审计日志物理隔离,不能跨节点查;
UNIFIED_AUDIT_TRAIL默认只返回当前连接实例的数据
DBA_AUDIT_TRAIL 和 UNIFIED_AUDIT_TRAIL 别混着查
两者完全不兼容:开了统一审计后,传统审计(AUDIT SELECT ON scott.emp 这类命令)就失效了,DBA_AUDIT_TRAIL 不再写入新记录。常见误操作:
- 以为
AUDIT SESSION还管用 —— 实际上统一审计下必须用CREATE AUDIT POLICY+AUDIT POLICY - 在统一审计启用后,还去查
DBA_AUDIT_TRAIL看登录或表访问,结果永远为空 - 用
SYSAUDITOR角色查DBA_AUDIT_TRAIL—— 这角色对传统审计没额外权限,该查UNIFIED_AUDIT_TRAIL
RAC 环境下查审计日志的实际建议
别指望一个 SQL 查遍整个集群。真实运维中要分三步走:
- 先确认审计类型:
SELECT VALUE FROM V$OPTION WHERE PARAMETER = 'Unified Auditing';,再决定查哪个视图 - 如果是统一审计,用
SELECT * FROM UNIFIED_AUDIT_TRAIL WHERE EVENT_TIMESTAMP > SYSDATE - 1限定时间范围,避免扫全量 - 如果是传统审计,且 RAC 多实例,得分别连每个实例查
DBA_AUDIT_TRAIL,或用GV$SESSION关联DBA_AUDIT_TRAIL做粗略聚合(注意:DBA_AUDIT_TRAIL本身不是全局视图)
最易被忽略的一点:RAC 节点间时钟不同步会导致 EVENT_TIMESTAMP 乱序,查最近一小时日志前,务必先 SELECT INST_ID, SYSDATE FROM GV$INSTANCE; 对齐时间基准。











