阅读更多
1.首先创建一个测试表:
create table test (t_id varchar2(10),v_name varchar2(20));
insert into test values('1','marry');
insert into test values('2','jack');
commit;
select * from test;
2.分析我们在这段时间内做了什么
select versions_starttime,versions_endtime, versions_xid,versions_operation,t_id
from test versions
between timestamp minvalue and maxvalue
order by versions_starttime;
3.模拟假如误删除了一条数据,并且已经提交
delete from test where t_id=2;
commit;
select * from test;
4.查询我们刚才删除的数据的一个事务标识符
select versions_starttime,versions_endtime, versions_xid,versions_operation,t_id
from test versions
between timestamp minvalue and maxvalue
where t_id='2'
order by versions_starttime;
5.利用刚才查询出来的xid查询undo_sql
select * from FLASHBACK_TRANSACTION_QUERY where xid='03002A002F010000';
UNDO_SQL:insert into "TEST"."TEST"("T_ID","V_NAME") values ('2','jack');
6.上面的UNDO_SQL对应的就是一个INSERT,如果想恢复这条数据,执行这条语句就行了。
insert into "TEST"."TEST"("T_ID","V_NAME") values ('2','jack');
select * from test;
7.大功告成,恢复一条数据是不是很简单。这里有几点需要注意,首先,你的数据库要保证开启了flashback功能,还有离你删除数据的时间不要太长,这个要看你设置flashback的大小了,总之要保证你的回滚SQL要还存在。