您的位置:首页 > 数据库 > Oracle

如何分析oracle表是否被人删除或者更新过?

2017-05-24 10:13 351 查看
今天开发来找我,问我客户的一张表的数据没了,但是开发觉得没人动过,所以他们让我查下是否有人动过这个表

初步想到2个办法,这里做个备记 ,数据库没有开归档

S1#:闪回版本查询

SELECT .....FROM tablename VERSIONS {BETWEEN {SCN | TIMESTAMP} start AND end} 

--start,end可以是时间也可以是scn

Flashback Version Query伪列说明

versions_start{scn|time}  版本开始的scn或时间戳

 

versions_end{scn|time}  版本结束scn或时间戳,如果有值表明此行后面被更改过是旧版本,如果为null,则说明行版本是当前版本或行被删除(即versions_operation值为D)。

 

versions_xid 创建行版本的事务ID

versions_operation  在行上执行的操作(I=插入,D=删除,U=更新)

eg:

SELECT versions_startscn, versions_starttime, versions_endscn, versions_endtime, versions_xid, versions_operation, LIXORA.last_name,LIXORA. salary

  FROM LIXORA.employees

  VERSIONS BETWEEN TIMESTAMP

  TO_TIMESTAMP('2017-04-18 14:00:00', 'YYYY-MM-DD HH24:MI:SS')

  AND TO_TIMESTAMP('2017-05-24 17:00:00', 'YYYY-MM-DD HH24:MI:SS')

  WHERE first_name = 'LIXORA';

select a.*,versions_operation,versions_xid,versions_starttime from LIXORA.test A versions between timestamp minvalue and maxvalue;

s2#:sql基表调查

利用sql基表查询

select * from wrh$_sqltext where sql_text like '% LIXORA.test%';     LIXORA.test 为表名

然后根据里面的记录看下是否有delete,update 等操作,然后根据snapid 查询 dba_hist_snapshot 视图就可以知道该操作是在什么时候做的了

wrh$_sqltext  基表可以存放一个月的记录,一般的问题回溯足够了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: