Flashback query是最基本的闪回功能,直接利用回滚段中的旧数据构造某一个时刻的一致性数据版本。只适合单个表数据恢复。对事务中相关多表数据恢复不适合,无法确保相关数据的参照完整性。Flashback query不需要使用resetlogs打开数据库。闪回查询让你能够看到过去某个时间的的数据。能够让你查看和重构以为意外被删除或者该表的数据。你可以根据SCN号和具体时间进行数据库查询。参数undo_retention 表明在回滚段中旧的信息被覆盖之前保留的时间。通过使用AS OF字句,你可以查询一个表中不同时段的快照。指定AS OF能够通过指定的SCN或者时间戳来获取所有行的单个版本,如果你指定SCN,则后面必须跟数字,如果你指定timestamp,则后面必须指定一个具体时间,Oralce数据会返回在该时间点或者SCN号时的数据
根据SCN的闪回查询:
1、初始化数据
SQL> create table t(a number,b number);
Table created.
SQL> insert into t values(1,1);
1 row created.
SQL> insert into t values(2,2);
1 row created.
SQL> insert into t values(3,3);
1 row created.
SQL> commit;
Commit complete.
2、查询当前时间、当前SCN号
SQL> alter session set nls_date_format='yyyymmdd hh24:mi:ss';
Session altered.
SQL> select sysdate from dual; ---获取当前时间
SYSDATE
-----------------
20210121 14:56:40
SQL> select dbms_flashback.get_system_change_number from dual; ---获取当前SCN
GET_SYSTEM_CHANGE_NUMBER
------------------------
2166044
3、删除部分数据
SQL> delete from t where b=3;
1 row deleted.
SQL> commit;
Commit complete.
4、根据SCN或者时间进行闪回查询
SQL> select * from t;
A B
---------- ----------
1 1
2 2
SQL> select * from t as of scn 2166044; ---根据SCN号得到在该SCN号时的数据情况
A B
---------- ----------
1 1
2 2
3 3
SQL> select * from t as of timestamp to_timestamp('20210121 14:56:40','yyyymmdd hh24:mi:ss'); --得到具体时间点的数据
A B
---------- ----------
1 1
2 2
3 3