flashback query是自oracle 9i开始的一种新特性,通过flashback query可以查看回滚段中一定时间内的数据,可以用来数据的对比,同时也可以修复由于意外提交的错误数据。
flashback query的查询是在标准查询语句的表名后面加上as of scn(基于scn)或as of timestamp(基金时间)。
flashback query实例
⑴scn
SQL> select * from dept;
DEPT_ID DEPT_NAME
---------- ----------------------------------------------------------------
1 产品一部
2 产品二部
3 产品三部
4 产品四部
SQL> select current_scn from v$database;
CURRENT_SCN
-----------
9104996
SQL> delete from dept where dept_id = 1;
1 row deleted.
SQL> commit;
Commit complete.
SQL> select * from dept as of scn 9104996;
DEPT_ID DEPT_NAME
---------- ----------------------------------------------------------------
1 产品一部
2 产品二部
3 产品三部
4 产品四部
⑵timestamp
SQL> select * from dept;
DEPT_ID DEPT_NAME
---------- --------------------
1 产品一部
2 产品二部
3 产品三部
4 产品四部
SQL> delete from dept where dept_id = 1;
1 row deleted.
SQL> commit;
Commit complete.
SQL> select * from dept;
DEPT_ID DEPT_NAME
---------- --------------------
2 产品二部
3 产品三部
4 产品四部
SQL> select * from dept as of timestamp sysdate - 2/1440;
DEPT_ID DEPT_NAME
---------- --------------------
1 产品一部
2 产品二部
3 产品三部
4 产品四部
SQL> flashback table dept to timestamp sysdate - 2/1440;
Flashback complete.
SQL> select * from dept;
DEPT_ID DEPT_NAME
---------- --------------------
1 产品一部
2 产品二部
3 产品三部
4 产品四部
flashback query只能查询一定时间内的数据,具体的时间可以查看参数undo_retention,单位为秒,如下所示:
SQL> show parameter undo
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_management string AUTO
undo_retention integer 900
undo_tablespace string UNDOTBS1
注意事项
⑴flashback query查询只针对dml操作才有效,对ddl无效