Upload
beenyoung-lee
View
442
Download
1
Embed Size (px)
DESCRIPTION
Using Flashback in Oracle Database
Citation preview
ORACLE 数据库中的闪回特性
FLASHBACK 说:恢复我最行
CREATED BY JUNSANSI.
Strictly confidential
Flashback 简介
CREATED BY JUNSANSI.
Oracle 自 9i 版本开始,专门提供 Flashback 特性,该特性提供的一系列功能,使得用户和 DBA 在数据库操作中出现错误操作,或者逻辑错误导致数据丢失时都可以快速回溯或恢复。
包括删除、修改表中记录,删除某表甚至整个数据库快速恢复等
Strictly confidential
Flashback 几种类型
CREATED BY JUNSANSI.
Oracle 10g 版本,闪回操作包括: 闪回查询( Flashback Query ) 查询过去某个指定时间 /SCN 的数据, 9i 版本开始提供。
闪回表( Flashback Table ) 使表返回到过去某一时间的状态,可以恢复表、取消对表进行的修改。
闪回删除( Flashback Drop ) 可以将删除的表重新恢复。
闪回数据库( Flashback Database ) 可以将整个数据库回退到过去某个时间点。
Strictly confidential
1 、 Flashback Query
CREATED BY JUNSANSI.
• Flashback Query 的用法与标准查询非常类似,最简单的调用方式只需要在标准查询语句的 FROM 表名后面跟上 as of timestamp( 基于时间 ) 或 as of scn( 基于 scn) 即可。
• 语法:
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;
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;
Strictly confidential
1.2 、 VERSIONS BETWEEN 的应用
CREATED BY JUNSANSI.
• 功能:
标准 Flashback Query 的功能是查询过去某个时间点时,对象中保存的记录信息。而 VERISONS BETWEEN 则是在当前时间与指定的过去某个时间点之间,对象做过的每一次修改。
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 。
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;
Strictly confidential
1.3 、 Flashback Query 注意事项
CREATED BY JUNSANSI.
• UNDOTBS 的管理模式 必须启用自动撤消管理表空间 (Automatic Undo Management)
• UNDO 相关初始化参数的设置 UNDO_RETENTION :指定 UNDO 段中数据保存的最短时间,以秒为单位
• DDL 操作对源表的影响 DROP/MODIFY 列
MOVE 表
DROP 分区 ( 如果有的话 )
TRUNCATE TABLE/PARTITION
这类操作会另 UNDO 表空间中撤消数据失效。
Strictly confidential
2 、 Flashback Table
CREATED BY JUNSANSI.
• 某些时候我们要处理的表被反复修改过多次,希望能回复到之前的某个时间点,该需求借助 Flashback Query 可以实现,但实现方式复杂繁琐极易出错,借助 Flashback Table 则可轻松实现。
• 语法:
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;
Strictly confidential
2.2 、 Flashback Table 注意事项
CREATED BY JUNSANSI.
• 被恢复的表必须 enable row movement
• 注意 1.3 中提到的 DDL 的影响
• 注意 TRIGGERS 对其的影响,默认会 disable 相关 Triggers
• 索引会自动维护,但统计信息不会恢复到指定的时间点
• 不支持下列类型的表:聚簇表、物化视图、高级队列表、系统表、远程表、对象表、嵌套表以及表分区或子分区。
Strictly confidential
3 、 Flashback Drop
CREATED BY JUNSANSI.
• 如果我们把 Flashback Query 看做是恢复记录,则Flashback Drop就是用来恢复表 (由于记录是以表为载体存储,因此 Flashback Drop也可以看做是恢复记录,只不过相对于 Flashback Query 而言,其粒度更大 ) 。
• 语法:
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;
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命令清空的表数据。
Strictly confidential
Q&A
CREATED BY JUNSANSI.