[20141202]11g审计sys.dba_audit_session

[20141202]11g审计sys.dba_audit_session.txt

--今天在例行检查,使用Oracle Enterprise Manager的时候(我自己很少使用这个东西),在检查点击某处时候,我感觉很慢。
--我看了后台的执行语句:

/* Formatted on 2014/12/2 14:57:59 (QP5 v5.252.13127.32867) */
SELECT TO_CHAR (CURRENT_TIMESTAMP AT TIME ZONE 'GMT',
                'YYYY-MM-DD HH24:MI:SS TZD')
          AS curr_timestamp,
       COUNT (username) AS failed_count,
       TO_CHAR (MIN (timestamp), 'yyyy-mm-dd hh24:mi:ss') AS first_occur_time,
       TO_CHAR (MAX (timestamp), 'yyyy-mm-dd hh24:mi:ss') AS last_occur_time
  FROM sys.dba_audit_session
WHERE     returncode != 0
       AND timestamp >= CURRENT_TIMESTAMP - TO_DSINTERVAL ('0 0:30:00')
      
/* Formatted on 2014/12/2 11:42:51 (QP5 v5.252.13127.32867) */
SELECT TO_CHAR (TO_TIMESTAMP ('2014-12-01', 'YYYY-MM-DD') AT TIME ZONE 'GMT',
                'YYYY-MM-DD HH24:MI:SS TZD')
          AS curr_timestamp,
       COUNT (username) AS failed_count
  FROM sys.dba_audit_session
WHERE     returncode != 0
       AND TO_CHAR (CAST (timestamp AS DATE), 'YYYY-MM-DD') >= '2014-12-01'
       AND TO_CHAR (CAST (timestamp AS DATE), 'YYYY-MM-DD')               TO_CHAR ( (TO_DATE ('2014-12-01', 'YYYY-MM-DD') + 1),
                       'YYYY-MM-DD');

SQL> @dpc 0hzna0h1hvah2 ''

PLAN_TABLE_OUTPUT
--------------------------------------
SQL_ID  0hzna0h1hvah2, child number 0
-------------------------------------
SELECT TO_CHAR(TO_TIMESTAMP('2014-12-01' , 'YYYY-MM-DD') AT TIME ZONE
'GMT', 'YYYY-MM-DD HH24:MI:SS TZD') AS curr_timestamp, COUNT(username)
AS failed_count FROM sys.dba_audit_session WHERE returncode != 0 AND
TO_CHAR(CAST(timestamp AS DATE) , 'YYYY-MM-DD') >= '2014-12-01' AND
TO_CHAR(CAST(timestamp AS DATE) , 'YYYY-MM-DD') TO_CHAR((TO_DATE('2014-12-01', 'YYYY-MM-DD') + 1), 'YYYY-MM-DD')

Plan hash value: 3562285719

-------------------------------------------------------------------------------------------------------------------
| Id  | Operation                      | Name                    | E-Rows | Cost (%CPU)|  OMem |  1Mem | Used-Mem |
-------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT               |                         |        |   802 (100)|       |       |          |
|   1 |  SORT AGGREGATE                |                         |      1 |            |       |       |          |
|*  2 |   HASH JOIN OUTER              |                         |     27 |   802   (1)|  2112K|  2112K|  215K (0)|
|*  3 |    HASH JOIN OUTER             |                         |     27 |   800   (1)|  2123K|  2123K|  196K (0)|
|*  4 |     HASH JOIN OUTER            |                         |     27 |   799   (1)|  2184K|  2184K|  192K (0)|
|*  5 |      HASH JOIN OUTER           |                         |     27 |   798   (1)|  2241K|  2241K|  192K (0)|
|*  6 |       TABLE ACCESS STORAGE FULL| AUD$                    |     27 |   797   (1)|  1025K|  1025K|          |
|*  7 |       INDEX RANGE SCAN         | I_AUDIT_ACTIONS         |      3 |     1   (0)|  1025K|  1025K|          |
|   8 |      INDEX FULL SCAN           | I_SYSTEM_PRIVILEGE_MAP  |    209 |     1   (0)|  1025K|  1025K|          |
|   9 |     INDEX FULL SCAN            | I_SYSTEM_PRIVILEGE_MAP  |    209 |     1   (0)|  1025K|  1025K|          |
|  10 |    INDEX STORAGE FAST FULL SCAN| I_STMT_AUDIT_OPTION_MAP |    271 |     2   (0)|  1025K|  1025K|          |
-------------------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - access("AUD"."LOGOFF$DEAD"="AOM"."OPTION#")
   3 - access("SPX"."PRIVILEGE"=(-"AUD"."PRIV$USED"))
   4 - access("SPM"."PRIVILEGE"=(-"AUD"."LOGOFF$DEAD"))
   5 - access("AUD"."ACTION#"="ACT"."ACTION")
   6 - storage(("AUD"."ACTION#">=100 AND "AUD"."ACTION#"0 AND
              TO_CHAR(CAST(CAST(FROM_TZ(INTERNAL_FUNCTION("NTIMESTAMP#"),'00:00') AT LOCAL AS date) AS
              DATE),'YYYY-MM-DD')>='2014-12-01' AND TO_CHAR(CAST(CAST(FROM_TZ(INTERNAL_FUNCTION("NTIMESTAMP#"),'00:00')
              AT LOCAL AS date) AS DATE),'YYYY-MM-DD')       filter(("AUD"."ACTION#">=100 AND "AUD"."ACTION#"0 AND
              TO_CHAR(CAST(CAST(FROM_TZ(INTERNAL_FUNCTION("NTIMESTAMP#"),'00:00') AT LOCAL AS date) AS
              DATE),'YYYY-MM-DD')>='2014-12-01' AND TO_CHAR(CAST(CAST(FROM_TZ(INTERNAL_FUNCTION("NTIMESTAMP#"),'00:00')
              AT LOCAL AS date) AS DATE),'YYYY-MM-DD')   7 - access("ACT"."ACTION">=100 AND "ACT"."ACTION"

--注:aud$表我已经裁剪了,执行计划如果在之前cost更大,可以发现要全表扫描sys.AUD$表。
--才想起来这个系统11G,上线1个月后我才关闭登录审计,我们系统登录很频繁,aud$已经800M,已经改为审计不成功的登录。

NOAUDIT CREATE SESSION WHENEVER SUCCESSFUL;
--NOAUDIT CREATE SESSION WHENEVER NOT SUCCESSFUL;

--检查sys.aud$发现,没有建立索引,难道oracle不考虑在11G打开审计,许多应用频繁登录数据库,审计表sys.aud$增加很快的情况,
--而且看上面的查询条件,如果优化它要函数索引,

create index i_aud$_timestamp on sys.aud$( TO_CHAR (CAST (timestamp# AS DATE), 'YYYY-MM-DD'));

--好像没用,我在测试环境建立。什么回事?那位知道....

时间: 2024-10-23 20:16:02

[20141202]11g审计sys.dba_audit_session的相关文章

[20170518]11G审计日志清除3.txt

[20170518]11G审计日志清除3.txt --//以前写的链接:http://blog.itpub.net/267265/viewspace-2133145/ --//我当时写存在许多问题,仅仅清除sys.aud$内容,参数audit_file_dest目录的文件不清除,而这里参数大量的aud文件,重新测试看看. 1.环境: SYS@book> @ &r/ver1 PORT_STRING                    VERSION        BANNER -------

[20170207]11G审计日志清除.txt

[20170207]11G审计日志清除.txt --//11G缺省打开了许多审计,比如登录审计(我个人建议仅仅审计不成功的登录,特别对登录密集的系统),如果系统上线时没有关闭或者取 --//消一些审计,sys.aud$在system表空间,会导致空间异常增加,而且占用system表空间不是很合理.必须建立良好的监测清理机制. 1.环境: SCOTT@book> @ &r/ver1 PORT_STRING                    VERSION        BANNER ---

Oracle 11g 审计跟踪管理

在Oracle11g之前,oracle数据库自带的审计功能是关闭的,考虑到性能和审计管理的复杂性,用户一般不打开审计功能.如果有审计要求,DBA会采用trigger来实现对DDL审计的方法来折中.例如类似下面代码实现: create or replace trigger sys.ddl_trigger after DDL on database BEGIN insert into event_table values (ora_sysevent, ora_login_user, ora_inst

Linux主机内存溢出导致oracle的SYS用户无法正常登陆

    一般情况下,ORACLE DBA看到如下情况的第一反应是,数据库实例没有启动或者是数据库环境变量没有设置正确,今天遇到的情况均不是以上两种情况,有点特别,且来看看为哪般. oracle@POC-SV12-I2KDB:~> sqlplus / as sysdba SQL*Plus: Release 11.1.0.7.0 - Production on Thu Aug 13 11:31:58 2015 Copyright (c) 1982, 2008, Oracle.  All rights

DBA入门之路:察微知渐细致入微

在DBA的职业生涯中,要面临无数的艰难险阻.排忧解难,所以细致入微,严谨认真的风格必不可少.养成了察微知渐的习惯,才能在分析诊断故障时层剖缕析,直指核心:而我也一直认为,将这种习惯贯彻到学习积累之中,才能形成自己沉稳的技术根基. 我在微信群的交流中,经常看到很多人屡屡提出非常简单的问题,这些问题事实上并未超越大家的能力范畴,只要仔细阅读,稍加思考就能找到答案,我认为这就是学习方法的问题.大家应该首先找到适合自己的学习方法,然后才能在技术生涯中快速进步,提升自我. 以下是我对于一些小的案例.知识点

【导入导出】EXP-00079

当我们对一个启用管理精细审计的表进行导出数据时,会出现如下错误: EXP-00079: 表 "PURCHASEORDER" 中的数据是被保护的.常规路径只能导出部分表. . . 正在导出表                   PURCHASEORDER导出了         132 行EXP-00079:用户在没有对DBMS_RLS(存取控制包)的执行权限时,进行了对需要存取控制的表的导出.因为表的所有者也受存取控制权限的限制,所以即使是表的所有者也不能导出整个表的所有行,而只能导出他

[20150707]OEM的问题.txt

[20150707]OEM的问题.txt --今天看awr报表时发现如下命令: --已经格式化: SELECT TO_CHAR        (           TO_TIMESTAMP ('2015-07-06', 'YYYY-MM-DD') AT TIME ZONE 'GMT'          ,'YYYY-MM-DD HH24:MI:SS TZD'        )           AS curr_timestamp       ,COUNT (username) AS fail

[20131217]从sql语句计算sql_id.txt

[20131217]从sql语句计算sql_id.txt 这个方面的内容从网上能找到许多,从sql语句可以检查出sql_id的值以及HASH_VALUE的值. http://www.johnnydb.com/2012/03/sql_id-vs-hash_value/www.dbthink.com/?p=321 自己做一些测试以及总结,记录一些简单的方法在11G下: SYS@test> @verBANNER----------------------------------------------

Oracle 11g Database和ASM默认的审计策略和相关操作

    这篇文章详细讨论一下Oracle 11gR2 Database中ASM实例和Database实例默认的审计策略和相关操作. 1.Oracle 11g DATABASE默认的审计策略.    11gR2 Database的audit_trail被默认设置为DB,Oracle Database自动标准开启审计功能.下面是11g默认开启的标准审计功能:    上图展示的第一部分是默认开启的权限审计,可以通过DBA_PRIV_AUDIT_OPTS获得开启的权限:第二部分是默认开启的语句审计,可以