DEPTNO DNAME LOC
---------- ---------------------------- -------------------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
现在,我们来增加一条数据,并提交:
SQL> insert into scott.dept values(50,'错误数据','CHINA');
已创建 1 行。
SQL> select * from scott.dept;
DEPTNO DNAME LOC
---------- ---------------------------- -------------------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
50 错误数据 CHINA
SQL> commit; (2016-5-3 15:50:00)
提交完成。
正常情况下,由于已经做了commit操作,所以rollback已经无效了,要想得到2016-5-3 15:50:00之前的数据,怎么办?
使用timestamp时间点闪回:
SQL> select * from scott.dept as of timestamp to_timestamp('2016-05-03 15:30:00','yyyy-mm-dd hh24:mi:ss');
DEPTNO DNAME LOC
---------- ---------------------------- -------------------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
闪回查询,主要依靠表空间的undo数据,如果想要追溯更久的数据,就需要设置较大的undo_tablespaces大小和undo_retention。
如果想直接更新当前的表到历史的某个时间状态,可以直接使用flashback关键字:
SQL> alter table scott.dept enable row movement;
表已更改。
SQL> flashback table scott.dept to timestamp to_timestamp('2011-12-09 10:00:00','yyyy-mm-dd hh24:mi:ss');