0

我的 Oracle 数据库中有这张表,用于存储审计信息。

当我第一次SELECT *在那张桌子上做 a 时,审计时间戳都在同一天,同一小时内(例如18/10/2013 15:06:45,,18/10/2013 15:07:29);下次我这样做时,以前的条目都消失了,然后表格只包含带有16:mm:ss时间戳的条目。

我认为某些东西正在对该表起作用,因此表内容的每个间隔/可能会备份到某个地方-我不知道在哪里,然后表被清除。但是,由于我不熟悉数据库,我不确定这是做什么的。

我想知道如何找出这个表上的行为,以便我可以反过来检索我需要的以前的数据。

编辑:

到目前为止我尝试过的...

SELECT * FROM DBA_DEPENDENCIES WHERE REFERENCED_NAME='MY_AUDIT_TABLE';

我得到了四个结果,但所有这些结果(基于我的编程技能)都在谈论将数据放入表中,而不是在任何地方备份它。

SELECT * FROM MY_AUDIT_TABLE AS OF TIMESTAMP ...

这只是给我一个特定时间的快照,但由于表更新非常频繁,我每秒查询一次是没有意义的。

4

1 回答 1

0

dba_dependencies 视图将让您了解哪些过程、函数等将作用于表

SELECT * FROM DBA_DEPENDENCIES WHERE REFERENCED_NAME='MY_AUDIT_TABLE';

其中 MY_AUDIT_TABLE 是审计表名称

如果在数据库中使用了表的同义词,那么

SELECT * FROM DBA_DEPENDENCIES WHERE REFERENCED_NAME='MY_AUDIT_TABLE_SYNONYM'; 

其中 MY_AUDIT_TABLE_SYNONYM 是 MY_AUDIT_TABLE 的同义词

或者,如果任何触发器正在作用于桌子上

  Select * from dba_triggers where table_name='MY_AUDIT_TABLE';

用于处理表格的外部脚本

您可以请求 DBA 为表打开DB 细粒度审计

然后查询时间戳在 15:00:00 到 16:00:00 之间的视图DBA_FGA_AUDIT_TRAIL以检查外部调用(OS_PROCESS 列将给出操作系统进程 ID)或表上正在执行的 SQL(SQL_TEXT)

于 2013-10-18T09:16:10.613 回答