4. Strictly confidential
1 、 Flashback Query
CREATED BY JUNSANSI.
• Flashback Query 的用法与标准查询非常类似,最
简单的调用方式只需要在标准查询语句的 FROM 表
名后面跟上 as of timestamp( 基于时间 ) 或 as of
scn( 基于 scn) 即可。
• 语法:
5. Strictly confidential
1.1 、 AS OF 子句的应用
CREATED BY JUNSANSI.
• 示例 1 :
• create table n1(id,vl) as select
rownum,object_name from all_objects where
rownum<21;
• delete n1 where id<10;
• select * from n1 as of timestamp sysdate-n/1440;
6. Strictly confidential
1.1 、 AS OF 子句的应用
CREATED BY JUNSANSI.
• 示例 2 :
• grant execute dbms_flashback to test;
• grant select on v_$database to scott;
• select dbms_flashback.get_system_change_number from dual;
• delete n1 where id <10;
• select * from n1 as of scn n;
7. Strictly confidential
1.2 、 VERSIONS BETWEEN 的应
用
CREATED BY JUNSANSI.
• 功能:
标准 Flashback Query 的功能是查询过去某个时
间点时,对象中保存的记录信息。而 VERISONS
BETWEEN 则是在当前时间与指定的过去某个时间
点之间,对象做过的每一次修改。
8. Strictly confidential
1.2 、 VERSIONS BETWEEN 的应
用
CREATED BY JUNSANSI.
• 重要的伪列:
列名 定义
VERSIONS_STARTSCN
VERSIONS_STARTTIME
该条记录操作时的 scn 或时间,如果为空,表示该行
记录是在查询范围外创建的。
VERSIONS_ENDSCN
VERSIONS_ENDTIME
该条记录失效时的 scn 或时间,如果为空,说明记录
当前时间在当前表内存在,或者已经被删除了,可以
配合着 VERSIONS_OPERATION 列来看,如果
VERSIONS_OPERATION 列值为 D ,说明该列已被删除
,如果该列为空,则说明记录在这段时间无操作。
VERSIONS_XID 该操作的事务 ID
VERSIONS_OPERATION 对该行执行的操作: I 表示 insert , D 表示 delete ,
U 表示 update 。
提示:对于索引键的 update 操作,版本查询可能会将
其识别成两个操作: DELETE 和 INSERT 。
9. Strictly confidential
1.2 、 VERSIONS BETWEEN 的应
用
CREATED BY JUNSANSI.
• 示例:
• select dbms_flashback.get_system_change_number from dual;
• update n1 set id=id+100 where id>15;
• commit;
• delete n1 where id<5;
• commit;
• insert into n1 values (201,'jss');
• commit;
• select dbms_flashback.get_system_change_number from dual;
• select id,vl,versions_startscn,versions_endscn,versions_operation,versions_xid from n1
versions between scn n1 and n2;
12. Strictly confidential
2.1 、 Flashback Table 的应用
CREATED BY JUNSANSI.
• 示例:
• select * from n1;
• select dbms_flashback.get_system_change_number from dual;
• update n1 set id=id+100 where id>10;
• insert into n1 values (21,'junsansi');
• delete n1 where id=8;
• commit;
• select * from n1 as of scn n;
• flashback table n1 to scn n;
• select * from n1;
14. Strictly confidential
3 、 Flashback Drop
CREATED BY JUNSANSI.
• 如果我们把 Flashback Query 看做是恢复记录,则
Flashback Drop 就是用来恢复表 ( 由于记录是以表
为载体存储,因此 Flashback Drop 也可以看做是恢
复记录,只不过相对于 Flashback Query 而言,其
粒度更大 ) 。
• 语法:
15. Strictly confidential
3.1 、 Flashback Drop 的应用
CREATED BY JUNSANSI.
• 示例 1 :
• drop table n1;
• select * from recyclebin;
• flashback table n1 to before drop;
• 示例 2 :
• drop table n1;
• create table n1 (id number);
• drop table n1;
• select * from recyclebin;
• flashback table "" to before drop;
16. Strictly confidential
3.2 、 Flashback Drop 注意事项
CREATED BY JUNSANSI.
• Flashback Drop 不能恢复参照完整性。
• 所操作的表必须是存在于本地管理表空间中。 Flashback Drop 不能恢复字典管
理表空间中被删除的表。
• 被恢复的表的关联对象,比如其索引 / 约束的名称不会自动恢复成删除前的名称
,而是系统自动生成的名称。另外位图索引不能被恢复,因为删除表时位图索引
信息并不会被放入 RecycleBin 。
• 当删除表时,信赖于该表的物化视图也会同时删除,但是物化视图并不会被放入
RecycleBin ,因此执行 flashback drop 时,物化视图不能恢复,只能重建。
• 相对于被删除的表而言,当数据文件空间不足时, ORACLE 会首先清理被删除
表的索引。因此 Flashback Drop 后如果发现索引丢失,也是有可能的。
• Flashback Drop 支持同时操作多个表,表名中间以逗号分隔即可。
• Flashback Drop 只能恢复 DROP 命令删除的表,不能恢复 truncate 命令清空的
表数据。