如何找出Oracle数据库表上的内容?

时间:2013-10-18 08:53:24

标签: database oracle

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

当我第一次在该表上执行SELECT *时,审核时间戳都在同一天内,即同一时间内(例如18/10/2013 15:06:4518/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 ...

这只会在特定时间给我一个快照,但由于表格经常更新,我每秒查询都没有意义。

1 个答案:

答案 0 :(得分: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 Fine grained audit

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