Unified Auditing的架构体系之---存储
版权声明:本文为博主原创文章,转载请注明出处,谢谢。http://blog.csdn.net/lukeunique
我们知道,从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定义,我们可以看到以下内容:
- 数据段包括三种类型的对象,分别是分区表,分区索引和大数据段
- 索引对象CLITIME$XXXX是表CLISWP$XXXX的列("MINTIME", "FLUSHSCN", "BUCKET#")上的索引
- 索引对象CLISCN$XXXX是表CLISWP$XXXX的列("MINSCN", "FLUSHSCN", "BUCKET#")上的索引
- 索引对象CLILOB$XXXX是表CLISWP$XXXX的列("FLUSHSCN", "INSTLOB#", "BUCKET#")上的索引
- 索引对象SYSILXXXX是表CLISWP$XXXX的列("FLUSHSCN", "INSTLOB#", "BUCKET#")上的索引
- 大数据对象SYSLOB是表CLISWP$XXXX的LOB列LOG_PIECE的存储,并且是securefile LOBs类型。
- 默认所有的数据存储在SYSAUX表空间中
由此,我们知道统一审计(Unified Auditing)的审计数据都是存放在AUDSYS schema 下的表CLI_SWP$XXXX中, 并且有一部分数据是存放在Lob中的。
在用户的咨询案例中,有一些是由于统一审计的影响使SYSAUX的快速增长和消耗大量空间的,下面进行一下说明总结和探讨。
1.新的统一审计(Unified Auditing)功能推出后,有一些用户问:
Q:为什么没有设置任何统一审计,在UNIFIEDAUDITTRAIL视图中,还是看到有一些数据,并且数据量在增长?
A:其实这个很好解释,正如我们前面所提到的,在12c数据库默认开启混合模式审计,而由于默认开启的ORASECURECONFIG 和 ORALOGON_FAILURES(12.1.0.2)审计策略导致审计数据的增长,从而显示在UNIFIEDAUDITTRAIL视图里。 解决方法也和简单,你可以删除不需要的审计数据,如果以后也不想这些数据继续产生,你还可以把这些审计策略无效。
例:
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使用大小变大,并且就算是通过DBMSAUDITMGMT包删除所有的审计数据,也不会缩小段的大小和释放空间,所以会导致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 行。
参考:
Database Security Guide
https://docs.oracle.com/database/121/DBSEG/audit_admin.htm#DBSEG1026
23 Administering the Audit Trail
The UNIFIEDAUDITTRAIL is Getting Populated even if Unified Auditing was not explicitly enabled in 12c (Doc ID 1624051.1)
Bug 20625589 : NOT DELETE AUDITS CORRECTLY BY DBMSAUDITMGMT.CREATEPURGEJOB
Bug 19579469 - HANDLE SECUREFILES SPACE CLEANUP IN STANDARD EDITION DATABASE