如何在指定时间检查表中是否发生了删除

时间:2013-02-08 07:15:12

标签: oracle oracle11g

最近,我们的一个网站报道了一个非常奇怪的情况。 根据我们的字段,我们发现应该有一些必须在该场景中发生的删除

在我们的应用程序代码中,该表本身没有删除。所以我们检查了gv $ sqlarea(因为我们使用RAC)表是否有这个表的任何删除sql。我们一无所获。

然后我们尝试通过PL / SQL Developer进行相同类型的删除。我们可以通过gv $ sqlarea或gv $ session跟踪所有删除。但是当我们在plsql developer中使用下面的查询,锁定,编辑和提交时,没有跟踪

select t.*, t.rowid 
  from <table>

我们能找到的东西是sys.mon_mods $有删除次数。但它不会存储很长时间,因此我们可以按时间戳跟踪

任何人都可以帮我解决这个问题

  

Oracle版本:11.1.0.7.0

     

类型:RAC(5个实例)

1 个答案:

答案 0 :(得分:2)

gv$sqlarea只显示共享池中的SQL语句。如果语句仅执行一次,则根据共享池的大小和执行的SQL语句的数量,语句可能不会在共享池中很长时间。我当然不希望在几个小时之后,一次性声明仍然会在一个相当活跃的系统的共享池中。

假设您没有启用审核并且没有记录删除的触发器,系统是否处于ARCHIVELOG模式?您是否从删除行的时间点获得了存档日志?如果是这样,您可以使用LogMiner查看存档日志以查找相关语句。