oracle 19c统一审计必须重链接二进制并重启数据库才能激活,仅查v$option为true不代表生效,需验证unified_audit_trail视图存在且可查;data guard主备库须各自执行make -f ins_rdbms.mk uniaud_on ioracle并重启。

Oracle 19c 中统一审计不是“配置开关”,而是必须重链接二进制并重启数据库才能真正激活;跳过 make -f ins_rdbms.mk uniaud_on ioracle 这一步,后续所有 AUDIT POLICY 都不会写入任何记录。
确认 Unified Auditing 是否真启用,别只查 V$OPTION
查 V$OPTION 返回 TRUE 只表示编译支持,不代表运行生效。真实状态必须分两步验证:
- 执行
SELECT value FROM V$OPTION WHERE PARAMETER = 'Unified Auditing':若为FALSE,必须重链接;若为TRUE,继续下一步 - 执行
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 必须执行 make -f ins_rdbms.mk uniaud_on ioracle
这是不可跳过的硬性步骤。19c 默认是混合审计模式,纯统一审计依赖内核模块加载,不重链接就没有后台进程监听审计事件:
- 停库:
SHUTDOWN IMMEDIATE;停监听:lsnrctl stop - 切换到
$ORACLE_HOME/rdbms/lib目录,执行:make -f ins_rdbms.mk uniaud_on ioracle - 重启数据库:
STARTUP;再验证V$OPTION和UNIFIED_AUDIT_TRAIL - 注意:
uniaud_on不可逆(除非再跑uniaud_off),且要求 OS 用户对$ORACLE_HOME有写权限
创建并启用审计策略时,作用域和权限必须严格匹配
策略创建后不会自动生效,AUDIT POLICY 必须显式执行,且作用域决定是否捕获操作:
- 创建策略示例:
CREATE AUDIT POLICY priv_user_policy ACTIONS LOGON, CREATE ANY TABLE, DROP ANY TABLE - 启用策略必须指定目标:
AUDIT POLICY priv_user_policy BY SYS, SYSTEM, DBA—— 注意BY DBA表示审计拥有 DBA 角色的用户,不是角色名本身 - 删自己 schema 的表(如
DROP TABLE t1)不触发DROP ANY TABLE,需额外加ACTIONS DROP ON schema.table或用ACTIONS ALL - 查不到日志?先盯住三点:
SELECT * FROM dba_sys_privs WHERE privilege = 'DROP ANY TABLE' AND grantee = 'USERNAME'、操作是否真用了该权限、登录会话是否在策略BY范围内
Data Guard 环境下主备必须各自重链接并重启
统一审计不是靠参数同步,而是依赖二进制模块是否加载。主库启用后,备库若未独立执行 make -f ins_rdbms.mk uniaud_on ioracle 并重启,就无法捕获任何审计事件:
- 主备库都必须执行重链接,不能只做主库
- 备库启动后,必须验证:
SELECT * FROM V$UNIFIED_AUDIT_TRAIL WHERE ROWNUM = 1能查到记录(非ORA-00942) -
AUDIT POLICY在主库创建并启用后,定义会通过 Redo 同步到备库,但是否生效取决于备库自身是否完成重链接+重启 - 切忌设
AUDIT_TRAIL = DB:该参数静态,主备不一致会导致备库启动失败或 MRP 卡住
最容易被忽略的是:统一审计的启用状态完全独立于 AUDIT_SYS_OPERATIONS 或 audit_file_dest 配置;哪怕你看到 SYS 登录被写入 OS 文件,也不代表 UNIFIED_AUDIT_TRAIL 已就绪——它俩走的是完全不同的路径。











