【Unified Auditing】统一审计的存储架构体系

勤奋不是嘴上说说而已,而是实际的行动,在勤奋的苦度中持之以恒,永不退却。业精于勤,荒于嬉;行成于思,毁于随。在人生的仕途上,我们毫不迟疑地选择勤奋,她是几乎于世界上一切成就的催产婆。只要我们拥着勤奋去思考,拥着勤奋的手去耕耘,用抱勤奋的心去对待工作,浪迹红尘而坚韧不拔,那么,我们的生命就会绽放火花,让人生的时光更加的闪亮而精彩。

导读:本篇文章讲解 【Unified Auditing】统一审计的存储架构体系,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

Unified Auditing的架构体系之—存储

我们知道,从12c开始,统一审计(Unified Auditing)的审计数据都是存放在AUDSYS schema 下。
首先,我们看一看AUDSYS schema下的存储对象都有哪些内容。(以下为12.1.0.2环境的出力)

SQL> set pagesize 200
SQL> set linesize 200
SQL> col OWNER format a10
SQL> col SEGMENT_NAME format a25
SQL> col SEGMENT_TYPE format a20
SQL> col PARTITION_NAME format a20
SQL>  select OWNER,SEGMENT_NAME,SEGMENT_TYPE,PARTITION_NAME,bytes/1024/1024 "sizeMB"
  2   from DBA_SEGMENTS
  3   where OWNER='AUDSYS';

OWNER      SEGMENT_NAME              SEGMENT_TYPE         PARTITION_NAME  sizeMB
---------- ------------------------- -------------------- -------------- -------
AUDSYS     SYS_LOB0000092724C00014$$ LOB PARTITION        SYS_LOB_P201     1.125
    AUDSYS     SYS_IL0000092724C00014$$  INDEX PARTITION      SYS_IL_P202      .0625
AUDSYS     CLI_LOB$1182c349$1$1      INDEX PARTITION      HIGH_PART        .0625
AUDSYS     CLI_TIME$1182c349$1$1     INDEX PARTITION      HIGH_PART        .0625
AUDSYS     CLI_SCN$1182c349$1$1      INDEX PARTITION      HIGH_PART        .0625
AUDSYS     CLI_SWP$1182c349$1$1      TABLE PARTITION      HIGH_PART         .125★

已选择 6 行。

我们可以看到一共有6个存储数据段,那么这些数据段都是什么呢?

让我们查看各个数据段的DDL定义,并且通过定义来推测其意义和作用。

SQL> set pages 0
SQL> set longchunksize 3000
SQL> set long 2000000000
SQL> select dbms_metadata.get_ddl('TABLE','CLI_SWP$1182c349$1$1','AUDSYS') from dual;

  CREATE TABLE "AUDSYS"."CLI_SWP$1182c349$1$1"
   ("INST#" NUMBER,
    "BUCKET#" NUMBER,
    "INST_LOB#" NUMBER,
    "MAX_SEQ#" NUMBER,
    "FLUSH_SCN" NUMBER,
    "FLUSH_TIME" DATE,
    "MIN_SCN" NUMBER,
    "MAX_SCN" NUMBER,
    "MIN_TIME" DATE,
    "MAX_TIME" DATE,
    "SID#" NUMBER,
    "SERIAL#" NUMBER,
    "STATUS" NUMBER,
    "LOG_PIECE" BLOB ★
   ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
  STORAGE(
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "SYSAUX"
 LOB ("LOG_PIECE") STORE AS SECUREFILE (
  TABLESPACE "SYSAUX" ENABLE STORAGE IN ROW CHUNK 8192
  CACHE LOGGING  NOCOMPRESS  KEEP_DUPLICATES
  STORAGE(
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT))
  PARTITION BY RANGE ("FLUSH_SCN")
 (PARTITION "HIGH_PART"  VALUES LESS THAN (MAXVALUE) SEGMENT CREATION IMMEDIATE
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
 NOCOMPRESS LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "SYSAUX"
 LOB ("LOG_PIECE") STORE AS SECUREFILE (
  TABLESPACE "SYSAUX" ENABLE STORAGE IN ROW CHUNK 8192
  CACHE LOGGING  NOCOMPRESS  KEEP_DUPLICATES
  STORAGE(INITIAL 106496 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)) )

SQL> select dbms_metadata.get_ddl('INDEX','CLI_TIME$1182c349$1$1','AUDSYS') from dual;

DBMS_METADATA.GET_DDL('INDEX','CLI_TIME$1182C349$1$1','AUDSYS')
------------------------------------------------------------------------------------------------------------------------------


  CREATE INDEX "AUDSYS"."CLI_TIME$1182c349$1$1" ON "AUDSYS"."CLI_SWP$1182c349$1$1" ("MIN_TIME", "FLUSH_SCN", "BUCKET#")★
  PCTFREE 10 INITRANS 2 MAXTRANS 255
  STORAGE(
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) LOCAL
 (PARTITION "HIGH_PART"
  PCTFREE 10 INITRANS 2 MAXTRANS 255 LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "SYSAUX" )


SQL> select dbms_metadata.get_ddl('INDEX','CLI_SCN$1182c349$1$1','AUDSYS') from dual;

DBMS_METADATA.GET_DDL('INDEX','CLI_SCN$1182C349$1$1','AUDSYS')
------------------------------------------------------------------------------------------------------------------------------


  CREATE INDEX "AUDSYS"."CLI_SCN$1182c349$1$1" ON "AUDSYS"."CLI_SWP$1182c349$1$1" ("MIN_SCN", "FLUSH_SCN", "BUCKET#")★
  PCTFREE 10 INITRANS 2 MAXTRANS 255
  STORAGE(
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) LOCAL
 (PARTITION "HIGH_PART"
  PCTFREE 10 INITRANS 2 MAXTRANS 255 LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "SYSAUX" )


SQL> select dbms_metadata.get_ddl('INDEX','CLI_LOB$1182c349$1$1','AUDSYS') from dual;

DBMS_METADATA.GET_DDL('INDEX','CLI_LOB$1182C349$1$1','AUDSYS')
------------------------------------------------------------------------------------------------------------------------------


  CREATE INDEX "AUDSYS"."CLI_LOB$1182c349$1$1" ON "AUDSYS"."CLI_SWP$1182c349$1$1" ("FLUSH_SCN", "INST_LOB#", "BUCKET#")★
  PCTFREE 10 INITRANS 2 MAXTRANS 255
  STORAGE(
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) LOCAL
 (PARTITION "HIGH_PART"
  PCTFREE 10 INITRANS 2 MAXTRANS 255 LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "SYSAUX" )


SQL> select dbms_metadata.get_ddl('INDEX','SYS_IL0000092724C00014$$','AUDSYS') from dual;

DBMS_METADATA.GET_DDL('INDEX','SYS_IL0000092724C00014$$','AUDSYS')
------------------------------------------------------------------------------------------------------------------------------


  CREATE UNIQUE INDEX "AUDSYS"."SYS_IL0000092724C00014$$" ON "AUDSYS"."CLI_SWP$1182c349$1$1" (★
  PCTFREE 10 INITRANS 1 MAXTRANS 255
  STORAGE(
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "SYSAUX"  LOCAL
 (PARTITION "SYS_IL_P202"
  PCTFREE 10 INITRANS 2 MAXTRANS 255 LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "SYSAUX" )
  PARALLEL (DEGREE 0 INSTANCES 0)

SQL> col TABLE_NAME format a30
SQL> col SEGMENT_NAME format a30
SQL> col COLUMN_NAME format a30
SQL> set linesize 200
SQL>  select OWNER,TABLE_NAME,SEGMENT_NAME,COLUMN_NAME
  2   from DBA_LOBS
  3   where SEGMENT_NAME='SYS_LOB0000092724C00014$$';

OWNER  TABLE_NAME SEGMENT_NAME   COLUMN_NAME
---------- ------------------------------ ------------------------------ --------------
AUDSYS CLI_SWP$1182c349$1$1   SYS_LOB0000092724C00014$$  LOG_PIECE

SQL> col OWNER format a20
SQL> col TABLESPACE_NAME format a10
SQL> col COLUMN_NAME format a10
SQL> select owner, table_name, column_name, tablespace_name,
  2  segment_name,securefile, partitioned from
  3  dba_lobs where table_name = 'CLI_SWP$1182c349$1$1';

OWNER  TABLE_NAME   COLUMN_NAM TABLESPACE SEGMENT_NAME SECURE PARTIT
------ -------------------- ---------- ---------- ------------------------ ------  ---
AUDSYS CLI_SWP$1182c349$1$1 LOG_PIECE  SYSAUX SYS_LOB0000092724C00014$$ YESYES

根据以上各个数据段的DDL定义,我们可以看到以下内容:

  1. 数据段包括三种类型的对象,分别是分区表,分区索引和大数据段
  2. 索引对象CLI_TIME

    XXXXCLISWP
    XXXX的列(“MIN_TIME”, “FLUSH_SCN”, “BUCKET#”)上的索引

  3. 索引对象CLI_SCN

    XXXXCLISWP
    XXXX的列(“MIN_SCN”, “FLUSH_SCN”, “BUCKET#”)上的索引

  4. 索引对象CLI_LOB

    XXXXCLISWP
    XXXX的列(“FLUSH_SCN”, “INST_LOB#”, “BUCKET#”)上的索引

  5. 索引对象SYS_ILXXXX是表CLI_SWP$XXXX的列(“FLUSH_SCN”, “INST_LOB#”, “BUCKET#”)上的索引
  6. 大数据对象SYS_LOB是表CLI_SWP$XXXX的LOB列LOG_PIECE的存储,并且是securefile LOBs类型。
  7. 默认所有的数据存储在SYSAUX表空间中

由此,我们知道统一审计(Unified Auditing)的审计数据都是存放在AUDSYS schema 下的表CLI_SWP$XXXX中,
并且有一部分数据是存放在Lob中的。

在用户的咨询案例中,有一些是由于统一审计的影响使SYSAUX的快速增长和消耗大量空间的,下面进行一下说明总结和探讨。

1.新的统一审计(Unified Auditing)功能推出后,有一些用户问:

Q:为什么没有设置任何统一审计,在UNIFIED_AUDIT_TRAIL视图中,还是看到有一些数据,并且数据量在增长?

A:其实这个很好解释,正如我们前面所提到的,在12c数据库默认开启混合模式审计,而由于默认开启的ORA_SECURECONFIG 和 ORA_LOGON_FAILURES(12.1.0.2)审计策略导致审计数据的增长,从而显示在UNIFIED_AUDIT_TRAIL视图里。
解决方法也和简单,你可以删除不需要的审计数据,如果以后也不想这些数据继续产生,你还可以把这些审计策略无效。

例:

SQL>--删除不需要的审计数据
SQL> exec DBMS_AUDIT_MGMT.FLUSH_UNIFIED_AUDIT_TRAIL;

PL/SQL 过程已成功完成。

SQL> BEGIN
  2 DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL(
  3   AUDIT_TRAIL_TYPE   =>  DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED,
  4   USE_LAST_ARCH_TIMESTAMP=>  FALSE,
  5   CONTAINER  => dbms_audit_mgmt.container_current);
  6  END;
  7  /

PL/SQL 过程已成功完成。

SQL>--无效掉审计策略
SQL> noaudit policy ORA_SECURECONFIG;
Noaudit succeeded.
SQL> noaudit policy ORA_LOGON_FAILURES;
Noaudit succeeded.

2.当然还有一些比较复杂的问题,例如在12.1.0.1 标准版数据库(SE)中,由于对分区表和SECUREFILES Lobs的使用限制问题,一旦保存统一审计(Unified Auditing)审计数据的LOB使用大小变大,并且就算是通过DBMS_AUDIT_MGMT包删除所有的审计数据,也不会缩小段的大小和释放空间,所以会导致SYSAUX表空间的浪费和空余空间紧张。

这个问题在以后的版本中会得到改善,但是在12.1.0.1 SE的版本中,由于各种限制,将是无法解决的问题。

所以建议在12.1.0.1 SE的版本中,如果不想使用统一审计,在使用前无效掉所有的统一审计策略。
或者使用统一审计时,要在LOB使用大小变大前,定期进行删除。

建议参考(MOS文档):

DBMS_AUDIT_MGMT does not release the space occupied by LOB segment (Doc ID 1935169.1)
>In Oracle Database 12c Standard Edition,audit trail clean up does not release the LOB segment space.
Bug 18109788  - CLEANUP OF UNIFIED AUDIT TRAIL DOES NOT RELEASE LOB SEGMENT SPACE
>Base Bug 20077418

3.在12.1.0.1的版本中,由于非公开Bug16767759的影响,视图V$SYSAUX_OCCUPANTS中无法查看到AUDSYS schema的统计信息。

SQL> 12.1.0.1中查询结果
SQL> select distinct schema_name from v$sysaux_occupants;

SCHEMA_NAME
----------------------------------------------------------------
WKSYS
MDSYS
WK_TEST
TSMSYS
OLAPSYS
CTXSYS
SYSTEM
EXFSYS
ORDSYS
ORDPLUGINS
SYSMAN
DBSNMP
XDB
ORDDATA
SYS
PERFSTAT
WMSYS
SI_INFORMTN_SCHEMA

18 rows selected.

我们可以看到在12.1.0.2 中可以查询到AUDSYS schema 的相关数据,情况已经得到改善。

SQL> 12.1.0.2中已经得到改善
SQL> select distinct schema_name from v$sysaux_occupants;

SCHEMA_NAME
--------------------
WKSYS
MDSYS
WK_TEST
TSMSYS
OLAPSYS
CTXSYS
SYSTEM
AUDSYS    ★
EXFSYS
ORDSYS
ORDPLUGINS
SYSMAN
DBSNMP
XDB
ORDDATA
SYS
PERFSTAT
WMSYS
SI_INFORMTN_SCHEMA

已选择 19 行。

所以在版本12.1.0.1中,在解决SYSAUX表空间的浪费和空余空间紧张问题时,我们也要考虑到这点。
作为暂时的解决方法,我们也可以通过查询DBA_SEGMENTS来确认相关数据的大小。

SQL>   select owner, segment_name, sum(bytes/1024/1024/1024) "sizeGB"
  2  from dba_segments
  3 where tablespace_name='SYSAUX' and owner='AUDSYS'
  4 group by owner, segment_name;

OWNERSEGMENT_NAME   sizeGB
-------------------- ------------------------------ ----------
AUDSYS   CLI_TIME$1182c349$1$1  .000061035
AUDSYS   SYS_IL0000092724C00014$$   .000061035
    AUDSYS   CLI_SWP$1182c349$1$1   .000061035
    AUDSYS   SYS_LOB0000092724C00014$$   .00012207
AUDSYS   CLI_LOB$1182c349$1$1   .000061035
AUDSYS   CLI_SCN$1182c349$1$1   .000061035

已选择 6 行。

版权声明:本文为博主原创文章,转载请注明出处,谢谢。http://blog.csdn.net/lukeunique

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由半码博客整理,本文链接:https://www.bmabk.com/index.php/post/141645.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
半码博客——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!