我的Oracle数据库中有这个表用于存储审计信息。
当我第一次在该表上执行SELECT *
时,审核时间戳都在同一天内,即同一时间内(例如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 ...
这只会在特定时间给我一个快照,但由于表格经常更新,我每秒查询都没有意义。
答案 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表