oracle 19c统一审计默认未启用,必须执行make -f ins_rdbms.mk uniaud_on ioracle并重启数据库,否则audit policy不生效;验证需查v$option、unified_audit_trail视图及audit_trail参数。

Oracle 19c 的统一审计默认完全未启用,光创建 AUDIT POLICY 或改 AUDIT_TRAIL 参数毫无作用——必须执行 make -f ins_rdbms.mk uniaud_on ioracle 并重启数据库,否则所有审计策略都不写日志。
确认 Unified Auditing 是否真启用,别信 V$OPTION
很多人查 V$OPTION 看到 Unified Auditing = TRUE 就以为开了,其实那只是“编译时支持”,不代表运行时激活。真实状态要看三件事:
- 执行
SELECT value FROM V$OPTION WHERE PARAMETER = 'Unified Auditing':若返回FALSE,说明二进制根本没重链接,跳过这步直接放弃后续配置 - 执行
SELECT * FROM UNIFIED_AUDIT_TRAIL WHERE ROWNUM = 1:若报ORA-00942: table or view does not exist,说明统一审计模块未加载,视图压根不存在 - 执行
SHOW PARAMETER audit_trail:值必须是NONE;如果是DB或XML,说明还在混合模式或传统模式,统一审计不会接管
启用 Unified Auditing 必须重链接 Oracle 二进制
这是最常被跳过的硬性步骤。19c 安装后默认是混合模式(legacy + unified 共存),纯统一审计需要重新编译核心模块。不执行这步,CREATE AUDIT POLICY 能成功,但策略永不触发——没有后台进程监听事件。
- 停库:
SHUTDOWN IMMEDIATE;停监听:lsnrctl stop - 切换到
$ORACLE_HOME/rdbms/lib目录,执行:make -f ins_rdbms.mk uniaud_on ioracle - 重启数据库:
STARTUP;再验证UNIFIED_AUDIT_TRAIL是否可查、是否返回记录 - 注意:该操作不可逆(除非再用
uniaud_off),且要求操作系统用户对$ORACLE_HOME有写权限
Data Guard 环境下主备必须各自重链接
在容灾场景中,统一审计不是靠参数同步,而是依赖二进制模块是否加载。主库做了重链接,备库没做,等于只有一半生效——备库上 AUDIT POLICY 不记录、UNIFIED_AUDIT_TRAIL 查不到任何内容。
- 主备库都需独立执行
make -f ins_rdbms.mk uniaud_on ioracle,不能只在主库操作 - 重启顺序:先主库启库并确认
UNIFIED_AUDIT_TRAIL可查;再备库STARTUP MOUNT,然后启动 MRP:ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT - 备库验证必须用
SELECT * FROM V$UNIFIED_AUDIT_TRAIL WHERE ROWNUM = 1,不能只看V$OPTION——ORA-00942 在备库出现,就是没重链接的铁证
策略创建后必须显式启用,且作用域决定生效范围
统一审计策略创建后默认不生效,必须用 AUDIT POLICY 显式启用。常见错误是只创建不启用,或写错作用域导致策略“挂在那里”不动。
- 创建策略示例:
CREATE AUDIT POLICY conn_policy ACTIONS LOGON, LOGOFF; - 启用策略(关键!):
AUDIT POLICY conn_policy;或更精确地指定作用域:AUDIT POLICY conn_policy BY ALL USERS; - 作用域影响范围:
BY USER只对指定用户生效;BY ALL USERS对所有用户生效;WHEN子句支持条件表达式,但注意上下文变量如SYS_CONTEXT('USERENV','SESSION_USER')必须用双单引号转义 - 策略定义本身会通过 Redo 同步到备库(因属 DDL),但是否生效取决于备库是否真正启用了统一审计模块
最容易被忽略的点是:重链接和重启是唯一开关,其他所有配置都是“下游动作”。没走这一步,后面每一条 AUDIT POLICY 都像往空桶里倒水——看起来在操作,实际没痕迹。











