统一审计的审计结果写到数据文件中的方式主要有2种,队列写入模式(Queued-write mode)和立即写模式(Immediate-write mode)。关于这两种写的方式,我们可以参考下面的2个图。
图:
**队列写入模式图**
立即写模式(Immediate-write mode):同步写入方法,统一审计的审计结果生成后,直接写入到AUDSYS schema 的审计表CLI_SWP$XXXX中。
队列写入模式(Queued-write mode):异步写入方法,统一审计的审计结果生成后,先把统一审计的审计结果保存在SGA中称为[SGA Queue]的队列中,然后周期性地从SGA Queue写入到AUDSYS schema 的审计表CLI_SWP$XXXX中(关于存储可以参看上一章的内容)。这种方式是数据库默认采用的设置。
是一种同步写入的方法,这种模式和12c以前传统的审计结果写入磁盘方式一样,在生成审计结果的同时立即写入到磁盘中,所以优点是不会因为实例突然崩溃(Instance Crash)等导致审计数据的丢失。但另一方面,因为操作和审计磁盘写同时进行,会对数据库操作的性能产生一定的影响。
如上图所示,统一审计的审计结果生成后,保存在SGA中称为[SGA Queue]的队列中,满足以下的任何一个条件时由后台进程GEN0负责写入到磁盘中。
[SGA Queue]的队列大小由初期化参数UNIFIED_AUDIT_SGA_QUEUE_SIZE来决定,默认大小为1M,可设置的范围为1MB ~ 30 MB 。
SQL> show parameter UNIFIED_AUDIT
NAME TYPE VALUE
------------------------------- --------- -----------
unified_audit_sga_queue_size integer 1048576
参考:
Database Reference
UNIFIED_AUDIT_SGA_QUEUE_SIZE
对于统一审计(Unified Auditing)相关的设置参数,我们可以通过以下的方法查看。
例:
SQL> col Description format a26
SQL> col Parameter format a30
SQL> select a.ksppinm "Parameter",a.KSPPDESC "Description",
2 b.ksppstvl "Value"
3 from sys.x$ksppi a, sys.x$ksppcv b
4 where a.indx = b.indx and a.ksppinm like '%unified_audit%';
Parameter Description Value
------------------------------ -------------------------- --------
_unified_audit_policy_disabled Disable Default Unified Au FALSE
dit Policies on DB Create
unified_audit_sga_queue_size Size of Unified audit SGA 1048576
Queue
_unified_audit_flush_threshold Unified Audit SGA Queue Fl 85 ★
ush Threshold
_unified_audit_flush_interval Unified Audit SGA Queue Fl 3 ★
ush Interval
由以上我们可以看到,
统一审计的审计结果保存在SGA中称为[SGA Queue]的队列中,然后周期性地从SGA Queue写入到AUDSYS schema 的审计表CLI_SWP$XXXX中,所以队列写入模式的优点是可以最大限度地减少由于审计对数据库操作性能的影响,但是由于是异步写入的方式,所以因为实例突然崩溃(Instance Crash)或者SHUTDOWN ABORT等情况下,有可能导致在SGA中的审计数据的丢失。
当然,除了由后台进程自动进行磁盘写入以外,也可以手动地调DBMS_AUDIT_MGMT.FLUSH_UNIFIED_AUDIT_TRAIL
函数,把SGA Queue中的统一审计的审计数据刷新到AUDSYS schema 的审计表CLI_SWP$XXXX中。
例:
SQL> audit all;
Audit succeeded.
SQL> noaudit all;
Noaudit succeeded.
SQL> EXEC DBMS_AUDIT_MGMT.FLUSH_UNIFIED_AUDIT_TRAIL;
PL/SQL procedure successfully completed.
可以通过DBMS_AUDIT_MGMT.SET_AUDIT_TRAIL_PROPERTY函数,对数据库默认的写入模式进行修改。
需要注意的是,该设置仅对当前的CDB或PDB有效。
例:
SQL>---设定立即写模式(Immediate-write mode)
SQL> BEGIN
2 DBMS_AUDIT_MGMT.SET_AUDIT_TRAIL_PROPERTY(
3 DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED,
4 DBMS_AUDIT_MGMT.AUDIT_TRAIL_WRITE_MODE,
5 DBMS_AUDIT_MGMT.AUDIT_TRAIL_IMMEDIATE_WRITE);
6 END;
7 /
PL/SQL procedure successfully completed.
SQL>---确认写入模式
SQL> SELECT PARAMETER_VALUE
2 FROM DBA_AUDIT_MGMT_CONFIG_PARAMS
3 WHERE PARAMETER_NAME = 'AUDIT WRITE MODE';
PARAMETER_VALUE
-------------------------------------------------
IMMEDIATE WRITE MODE
SQL>---设定队列写入模式(Queued-write mode)
SQL> BEGIN
2 DBMS_AUDIT_MGMT.SET_AUDIT_TRAIL_PROPERTY(
3 DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED,
4 DBMS_AUDIT_MGMT.AUDIT_TRAIL_WRITE_MODE,
5 DBMS_AUDIT_MGMT.AUDIT_TRAIL_QUEUED_WRITE);
6 END;
7 /
PL/SQL procedure successfully completed.
SQL>---确认写入模式
SQL> SELECT PARAMETER_VALUE
2 FROM DBA_AUDIT_MGMT_CONFIG_PARAMS
3 WHERE PARAMETER_NAME = 'AUDIT WRITE MODE';
PARAMETER_VALUE
-------------------------------------------------
QUEUED WRITE MODE
参考:
Database Security Guide
Setting the Write Mode for Unified Audit Trail Records
大家可能已经注意到队列写入模式图的右下角的出力部分。
这一部分是指当无法向数据库写入统一审计的审计数据时(如:数据库正在关闭或者变成了只读模式等),为了防止审计数据的丢失,Oracle会把审计数据写入到系统的如下文件中(nn为随机数值)。
$ORACLE_BASE/audit/$ORACLE_SID/ora_audit_nn.bin
但数据库恢复到正常时,可以通过以下的Procedure调用,把这些系统文件再导入到AUDSYS schema 下的CLI_SWP$XXXX统一审计的存储表中。
EXEC DBMS_AUDIT_MGMT.LOAD_UNIFIED_AUDIT_FILES;
当这些系统文件导入到数据库中后,相应的文件会自动地被删除掉。
※另外,这里需要注意的是,当有大量存储文件时,利用Procedure向数据库导入统一审计结果,可能会影响到性能。
版权声明:本文为博主原创文章,转载请注明出处,谢谢。http://blog.csdn.net/lukeunique