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定义,我们可以看到以下内容:
- 数据段包括三种类型的对象,分别是分区表,分区索引和大数据段
- 索引对象CLI_TIME
XXXX是表CLISWP
XXXX的列(“MIN_TIME”, “FLUSH_SCN”, “BUCKET#”)上的索引
- 索引对象CLI_SCN
XXXX是表CLISWP
XXXX的列(“MIN_SCN”, “FLUSH_SCN”, “BUCKET#”)上的索引
- 索引对象CLI_LOB
XXXX是表CLISWP
XXXX的列(“FLUSH_SCN”, “INST_LOB#”, “BUCKET#”)上的索引
- 索引对象SYS_ILXXXX是表CLI_SWP$XXXX的列(“FLUSH_SCN”, “INST_LOB#”, “BUCKET#”)上的索引
- 大数据对象SYS_LOB是表CLI_SWP$XXXX的LOB列LOG_PIECE的存储,并且是securefile LOBs类型。
- 默认所有的数据存储在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