闪回技术查询数据,在我们的工作生产当中也会经常用到。一般情况下,我们常用两种方式作为确定条件,
一个是基于时间戳Timestamp 的闪回查询,另一种是基于scn的闪回查询,当然他们也可以相互转化,则利用
timastamp_to_scn与scn_to_timestamp相互转化,便于大家运用。往后再另作这两个的相互转化用法。
在此,我们首先在scott用户下的dept表作为实验数据来源:
进入到Scott用户:
SQL> conn scott/tiger0520
Connected.
SQL> show user
USER is "SCOTT"
创建表test1:
SQL> create table test1 as select * from dept;
Table created.
SQL> select * from test1;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
1、基于时间点的闪回查询:
这种情况是基于我们记得打给的时间范围:(在此我们通过set time on )来显示时间
SQL> set tima on
21:05:05 SQL>
21:05:42 SQL> delete test1 where deptno=10;
1 row deleted.
一个是基于时间戳Timestamp 的闪回查询,另一种是基于scn的闪回查询,当然他们也可以相互转化,则利用
timastamp_to_scn与scn_to_timestamp相互转化,便于大家运用。往后再另作这两个的相互转化用法。
在此,我们首先在scott用户下的dept表作为实验数据来源:
进入到Scott用户:
SQL> conn scott/tiger0520
Connected.
SQL> show user
USER is "SCOTT"
创建表test1:
SQL> create table test1 as select * from dept;
Table created.
SQL> select * from test1;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
这种情况是基于我们记得打给的时间范围:(在此我们通过set time on )来显示时间
SQL> set tima on
21:05:05 SQL>
21:05:42 SQL> delete test1 where deptno=10;
1 row deleted.
21:06:10 SQL> select * from test1;
DEPTNO DNAME LOC
---------- -------------- -------------
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
21:06:20 SQL> commit;
以上看出,我们已经成功删除一条数据,大概3分钟过后,我们在此查询3分钟前的数据
21:08:53 SQL> select * from test1 as of timestamp sysdate -3/1440;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
grant execute on dbms_flashback to scott;
Grant succeeded.
SQL> select dbms_flashback.get_system_change_number as scn
2 from dual;
SCN
----------
742826
DEPTNO DNAME LOC
---------- -------------- -------------
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
21:06:20 SQL> commit;
以上看出,我们已经成功删除一条数据,大概3分钟过后,我们在此查询3分钟前的数据
21:08:53 SQL> select * from test1 as of timestamp sysdate -3/1440;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
以上通过时间点,可以查看会我们删除之前的数据,这就是基于时间点的闪回查询。
2、基于scn 的闪回查询:
这里,我们通过打开一个oracle数据库系统的包来帮助我们查询scn码:如下
2、基于scn 的闪回查询:
grant execute on dbms_flashback to scott;
Grant succeeded.
SQL> select dbms_flashback.get_system_change_number as scn
2 from dual;
SCN
----------
742826
SQL> delete test1;
3 rows deleted.
SQL> commit;
Commit complete.
SQL> select dbms_flashback.get_system_change_number as scn
2 from dual;
SCN
----------
742899
SQL> select * from test1;
no rows selected
3 rows deleted.
SQL> commit;
Commit complete.
SQL> select dbms_flashback.get_system_change_number as scn
2 from dual;
SCN
----------
742899
no rows selected
现在我们查询scn码为 742826 状态下表test1中的数据
SQL> select * from test1
2 as of scn 742826;
DEPTNO DNAME LOC
---------- -------------- -------------
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL> select * from test1
2 as of scn 742826;
DEPTNO DNAME LOC
---------- -------------- -------------
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
由此我们看出,我们通过删除之前的scn码,作为一个参考点,当我们成功全部删除表中的
数据之后,我们依然能查看到删除之前的数据,这就是基于scn的闪回查询技术。
谢谢大家观赏,祝大家工作学习愉快!
数据之后,我们依然能查看到删除之前的数据,这就是基于scn的闪回查询技术。
谢谢大家观赏,祝大家工作学习愉快!
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31392094/viewspace-2125770/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/31392094/viewspace-2125770/