Oracle sys.aud $ / dba_audit_session监视-优化SQL性能

mc88

我有以下查询,该查询监视是否有人尝试与数据库中的技术用户登录:

SELECT COUNT (OS_USERNAME)
FROM DBA_AUDIT_SESSION
WHERE USERNAME IN ('USER1','USER2','USER3') 
AND TIMESTAMP>=SYSDATE - 10/(24*60) 
AND RETURNCODE !='0'

不幸的是,此SQL的性能相当差,因为它TABLE ACCESS FULL在sys.aud $上执行。我试图用以下方法缩小范围:

SELECT COUNT (sessionid)
FROM sys.aud$
WHERE userid         IN ('USER1','USER2','USER3') 
AND ntimestamp#  >=SYSDATE - 10/(24*60)
AND RETURNCODE !='0'
and action# between 100 and 102;

而且情况甚至更糟。是否有可能通过强制oracle在此处使用索引来优化该查询?如果有任何帮助和提示,我将不胜感激。

乔恩·海勒

SYS.AUD $没有任何默认索引,但是可以在上创建一个ntimestamp#

但是请谨慎操作。支持文档“在表Sys.Aud $上创建索引的影响(Doc ID 1329731.1)”包括以下警告:

不支持在SYS对象(包括表AUD $)上创建其他索引

通常,这将是对话的结束,并且您想尝试另一种方法。但是在这种情况下,值得一试的原因有几个:

  1. 该文档继续说索引可能会有所帮助,并首先对其进行测试。
  2. 这只是一个索引。SYS模式是特殊的,但我们仍在谈论表上的索引。像任何索引一样,它可能会使速度变慢,或者可能导致空间错误。但是我怀疑它是否有可能做一些疯狂的事情,例如导致错误的结果错误。
  3. 更改审计跟踪的表空间在某种程度上很常见,因此该表不是神圣的。
  4. 我以前看过它的索引。我管理的400个数据库中有2个在列上都有索引SESSIONID,SES$TID(尽管我不知道为什么)。这些索引已经存在多年了,已经通过升级和修补程序完成了,据我所知,并没有引起任何问题。

如果您愿意测试索引并接受少量风险,那么创建一个“不受支持的”索引可能是一个不错的选择。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章