oracle 19c data guard容灾环境下不能设audit_trail=db,因该参数为静态且主备需严格一致;传统审计在备库无法同步aud$表、视图不可查,而统一审计必须主备各自执行make -f ins_rdbms.mk uniaud_on ioracle并重启才能真正启用。
oracle 19c 容灾环境(如 data guard)下,audit_trail 参数不能在主库单独设为 db 或 xml 来“开启全库审计”——这不仅无效,还会导致备库启动失败或同步中断。统一审计(unified auditing)才是唯一可行路径,且必须主备一致启用。
为什么不能直接改 AUDIT_TRAIL = DB?
在 Data Guard 架构中:AUDIT_TRAIL 是静态参数,主库修改后需重启,但备库若未同步该变更或未提前准备,会因参数不兼容拒绝应用日志;更关键的是,19c 默认已转向统一审计,传统 AUDIT_TRAIL 模式仅支持混合模式(legacy + unified),而混合模式在容灾场景下审计记录无法可靠同步到备库,DBA_AUDIT_TRAIL 视图在备库不可查,审计丢失风险极高。
- 主库设
AUDIT_TRAIL = DB后重启 → 备库ALTER DATABASE RECOVER MANAGED STANDBY DATABASE可能报 ORA-16024 或卡在 MRP 进程 - 即使备库勉强启动,
SYS.AUD$表不会被传输(Data Guard 不传输 SYSTEM 表空间的 DML 日志),审计数据实际只存于主库 -
AUDIT_SYS_OPERATIONS = TRUE单独启用也无意义:它强制将 SYS 操作写入 OS 文件(AUDIT_FILE_DEST),而该目录在备库通常不可写或路径不一致,日志直接丢弃
统一审计必须主备同时启用二进制重链接
统一审计不是靠参数开关,而是依赖 Oracle 二进制模块是否加载 uniaud_on。主备库必须各自独立完成重链接并重启,否则任一节点未启用,审计策略就无法在该节点触发。
- 停主库:
SHUTDOWN IMMEDIATE;停备库:SHUTDOWN IMMEDIATE(不要只停 MRP) - 分别登录主、备服务器的
$ORACLE_HOME/rdbms/lib目录,执行:make -f ins_rdbms.mk uniaud_on ioracle - 主库先启:
STARTUP;确认SELECT value FROM V$OPTION WHERE PARAMETER = 'Unified Auditing'返回TRUE - 备库再启:
STARTUP MOUNT;然后ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT - 验证备库是否真正启用:
SELECT * FROM V$UNIFIED_AUDIT_TRAIL WHERE ROWNUM = 1—— 必须能查到记录(非 ORA-00942)
AUDIT POLICY 必须在主库创建并显式启用,但作用域决定是否生效于备库
统一审计策略本身不自动复制,但策略定义通过 DDL 写入数据字典,会被 Redo 传输并在备库回放;真正决定“是否记录”的是 AUDIT POLICY 语句中的作用域子句和备库的打开状态。
- 策略创建(主库执行即可):
CREATE AUDIT POLICY all_ddl ACTIONS CREATE ANY TABLE, DROP ANY TABLE - 启用策略时注意:
AUDIT POLICY all_ddl BY ALL USERS在主库执行后,备库若为READ ONLY状态,该策略**不生效**(备库不接受用户连接,无“用户操作”可审计) - 若备库需支持“只读审计”(例如容灾切换前验证审计能力),必须用:
AUDIT POLICY all_ddl WHENEVER NOT SUCCESSFUL或针对系统事件(如ACTIONS LOGON),这些在 MOUNT/READ ONLY 下仍可触发 - 切勿在备库手动执行
AUDIT POLICY—— 可能与主库冲突,且重启后失效
清理策略 DBMS_AUDIT_MGMT 必须主备分开配置
DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL 是本地作业,不跨库同步。主备库的清理时间、保留周期、归档标记必须独立管理,否则备库审计表会持续膨胀。
- 主库初始化清理:
DBMS_AUDIT_MGMT.INIT_CLEANUP(AUDIT_TRAIL_UNIFIED, 24) - 备库也必须单独运行一次
INIT_CLEANUP(哪怕只是设default_cleanup_interval => 0禁用自动清理) - 设置归档时间戳必须分开:
DBMS_AUDIT_MGMT.SET_LAST_ARCHIVE_TIMESTAMP(AUDIT_TRAIL_UNIFIED, ...)主备不能共享同一时间点 - 调度作业名固定为
CLEANUP_OS_AUDIT_JOB,但主备各自的DBA_SCHEDULER_JOBS中必须都为ENABLED
最易忽略的一点:统一审计的 UNIFIED_AUDIT_TRAIL 视图底层基于 AUDSYS schema,该 schema 在 Data Guard 中默认不传输元数据变更。如果主库升级后新增了审计策略字段,备库可能因字典不一致导致视图查询缓慢甚至超时——务必在每次主库重大补丁后,检查备库 SELECT COUNT(*) FROM UNIFIED_AUDIT_TRAIL 是否响应正常。











