首页 > Linux操作系统 > Linux操作系统 > Flashback Query
Flashback Query 是ORACLE 自9i 就开始提供的一项特性,实现从回滚段中读取表一定时间内操作过的数据,可用来进行数据比对,或者修正意外提交造成的错误数据(一般是提交后马上发现数据修改错误)。
查询方式:
在标准查询语句的表名后面跟上as of timestamp(基于时间)或as of scn(基于scn)。如下:
create table flashback_query_test
as
select '1' char_a,'2'char_b from dual
union
select '3' char_a,'4'char_b from dual
SQL> select * from flashback_query_test;
CHAR_A CHAR_B
------ ------
1 2
3 4
----查询出scn 或者系统时间都行
SQL> SELECT CURRENT_SCN FROM V$DATABASE;
CURRENT_SCN
-----------
58749133253
SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
TO_CHAR(SYSDATE,'YYYY-MM-DDHH2
------------------------------
2010-03-23 15:22:46
--删除一条记录
delete from flashback_query_test
where char_a='1'
SQL> select * from flashback_query_test;
CHAR_A CHAR_B
------ ------
3 4
--查询删除之前的数据
SQL> select * from flashback_query_test as of scn 5875002343333;
CHAR_A CHAR_B
------ ------
1 2
3 4
----查询出scn 或者系统时间都行
SQL> SELECT CURRENT_SCN FROM V$DATABASE;
CURRENT_SCN
-----------
5875002343433
--更新一条记录
update flashback_query_test
set char_a='5'
SQL> select * from flashback_query_test ;
CHAR_A CHAR_B
------ ------
5 4
--查询更新前的数据
SQL> select * from flashback_query_test as of scn 5875002343433;
CHAR_A CHAR_B
------ ------
3 4
--TIMESTAMP的查询方式
SELECT * FROM FLASHBACK_QUERY_TEST AS OF TIMESTAMP sysdate-2/1440 --查询2分钟之前的数据
SELECT * FROM FLASHBACK_QUERY_TEST OF TIMESTAMP to_timestamp(' 2010-03-23 15:22:46','yyyy-mm-dd hh24:mi:ss')
当通过TIMESTAMP 来查询历史数据时,数据库会吧TIMESTAMP转换成SCN。
--查看SCN 和TIMESTAMP 的对应关系
select scn,to_char(time_dp,'yyyy-mm-dd hh24:mi:ss')
from sys.smon_scn_time
order by scn;
--查询对应表两个时间点做了哪些DML操作
Select versions_xid,
versions_startscn,
versions_endscn,
DECODE(versions_operation,
'I',
'Insert',
'U',
'Update',
'D',
'Delete',
'Original')"Operation"
from table_name versions between scn 5874913219020 and 5874913219220 ;
前面说的只能查询一定时间呢的数据,那这个时间到底是多长呢?这和参数UNDO_RETENTION参数有关
show parameters undo_retention; --单位为S;原则上这参数指定多长时间历史数据就保持多久,但UNDO表空间的大小也决定了历史数据的保存时间。如果UNDO表空间太小,之前的数据就会自动覆盖。(相反,表空间够大的话,超过指定时间,历史数据仍会存在,不会被覆盖)
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/12362075/viewspace-662433/ ,如需转载,请注明出处,否则将追究法律责任。