1、Oracle闪回操作主要包含以下操作:
一、回收站
通常在使用drop table 表名;删除表后,并没有直接被删除,而是放在了回收站中。从下图中可以看出在删除表后再查询用户下所拥有的表可以发现多了一个bin开头的表。它就是回收站中的表。

2、这个表的数据也可以进行查看。由于表名中有其它特殊符号所以要加双引号进行访问。

3、二、从回收站还原删除的表
查看回收站数据:
语法:
show recycle; 从下图中可以看到 原表名是emp01 回收站内表名是 BIN$baJtKmM/cTngUBGsmGa3fg==$0,以及这张表的删除时间。


5、恢复删除表:
语法:
flashback table emp01 to before drop;从下图中可以看到,表已经恢复,而且表内的数据也都会恢复。

6、如果回收站有中有两个同名的表,那么在恢复的时候优先恢复最后删除的表。

7、但如果两张表都需要恢复,那么需要在恢复的时候给表重命名不然会报错误。


9、删除回收站内容
语法:
purge table 表名; 如果有两个相同的表名,在删除的时候可以直接使用回收站名。

10、如果想直接删除回收站的全部内容可以直接使用purge recyclebin;

11、另外在删除表的时候也可以直接删除表,而不进入回收站。

12、三、使用闪回版本查询
它的作用是记录数据内容的更改记录。它允许查询15分钟内的操作记录查询。
示例:更改emp01表empno为7369的数据,并提交事务。下图是更改了两次之后的数据。



13、查询出更改记录
versions_starttime 开始时间
versions_endtime 结束时间,如果有值的话证明这条数据的值就不是现在的值了。
versions_xid 这个代表事务编号
versions_operation 这个代表操作类型(增删改等操作)
versions_startscn 开始scn号
versions_endscn 结束scn号,如果有值的话就证明这条数据就不是现在的值了。
select versions_starttime,versions_endtime,versions_xid,versions_operation,ename,sal from emp01
versions between scn minvalue and maxvalue where empno=7369;这里的字段都属于伪列。从图中可以看到 数据更改了两次。

14、查询更改记录也可以根据事务号来进行查询
select versions_startscn,versions_endscn,versions_xid,versions_operation,ename,sal from emp01
versions between scn minvalue and maxvalue where empno=7369;这次再查询的时候由于原数据800的修改时间已经超过15分钟了,所以不会显示在版本查询内了 。

15、四、执行闪回查询
在执行闪回查询时是根据scn来进行查询的
语法
select * from emp01 as of scn 2864058;

16、五、使用闪回事务处理查询
闪回事务查询需要使用sys登录,并且打开追加日志模式。才能够进行操作。默认是没有打开了。通过以下操作进行打开。


17、六、使用闪回事务处理


18、修改完成后,可以看到数据已经更改了。现在对提交的事务进行恢复。要使用sys用户。根据xid号进行恢复。恢复完成后可以看到数据又变回原来的数据了。

