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

Oracle 如何检查表中是否在指定时间发生了删除,oracle,oracle11g,Oracle,Oracle11g,最近,我们的一个网站报道了一个非常奇怪的情况。 根据我们的字段,我们发现对于该场景,应该有某种类型的删除 在我们的应用程序代码中,该表本身没有删除。所以我们签入了gv$SQLArea,因为我们使用RAC表来确定这个表是否有删除sql。我们什么也没找到 然后,我们尝试通过PL/SQL开发人员执行相同类型的删除。我们能够通过gv$sqlarea或gv$session跟踪所有删除。但当我们在PLSQLDeveloper中使用下面的查询、锁定、编辑和提交时,并没有任何跟踪 select t.*, t.r

最近,我们的一个网站报道了一个非常奇怪的情况。 根据我们的字段,我们发现对于该场景,应该有某种类型的删除

在我们的应用程序代码中,该表本身没有删除。所以我们签入了gv$SQLArea,因为我们使用RAC表来确定这个表是否有删除sql。我们什么也没找到

然后,我们尝试通过PL/SQL开发人员执行相同类型的删除。我们能够通过gv$sqlarea或gv$session跟踪所有删除。但当我们在PLSQLDeveloper中使用下面的查询、锁定、编辑和提交时,并没有任何跟踪

select t.*, t.rowid 
  from <table>
我们能够找到的是sys.mon_mods$具有删除计数。但是它并没有存储很长时间,所以我们可以通过时间戳进行跟踪

有人能帮我找到这个吗

Oracle版本:11.1.0.7.0

类型:RAC 5实例

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


假设您没有启用审核,并且没有记录删除的触发器,系统是否处于ARCHIVELOG模式?您是否有删除该行的时间点的存档日志?如果是这样,您可能会使用查看归档日志来查找有问题的语句。

如果启用,您可以使用logminer检查发生了什么:您确定它是delete而不是truncate吗?也许有人截断了一个子分区。你对丢失的数据一无所知?没有图案?不是截断的。我们在同一分区中有其他数据,safeLogMiner至少需要对数据库进行最少的补充日志记录。但这在DB中没有启用。@Pappu-不,它没有。如果启用了补充日志记录,则提取的SQL语句将更友好—例如,它们将使用主键,而不是ROWID。但是,如果您只是查找针对特定表的所有DELETE操作,那么您可能不太关心语句中是否有ROWID或主键。