17
ORACLE 数数数数数数数数数 FLASHBACK 数 数数数数数 CREATED BY JUNSANSI.

Oracle的闪回特性

Embed Size (px)

DESCRIPTION

Using Flashback in Oracle Database

Citation preview

Page 1: Oracle的闪回特性

ORACLE 数据库中的闪回特性

FLASHBACK 说:恢复我最行

CREATED BY JUNSANSI.

Page 2: Oracle的闪回特性

Strictly confidential

Flashback 简介

CREATED BY JUNSANSI.

Oracle 自 9i 版本开始,专门提供 Flashback 特性,该特性提供的一系列功能,使得用户和 DBA 在数据库操作中出现错误操作,或者逻辑错误导致数据丢失时都可以快速回溯或恢复。

包括删除、修改表中记录,删除某表甚至整个数据库快速恢复等

Page 3: Oracle的闪回特性

Strictly confidential

Flashback 几种类型

CREATED BY JUNSANSI.

Oracle 10g 版本,闪回操作包括: 闪回查询( Flashback Query )   查询过去某个指定时间 /SCN 的数据, 9i 版本开始提供。

闪回表( Flashback Table )   使表返回到过去某一时间的状态,可以恢复表、取消对表进行的修改。

闪回删除( Flashback Drop )  可以将删除的表重新恢复。

闪回数据库( Flashback Database )  可以将整个数据库回退到过去某个时间点。

Page 4: Oracle的闪回特性

Strictly confidential

1 、 Flashback Query

CREATED BY JUNSANSI.

• Flashback Query 的用法与标准查询非常类似,最简单的调用方式只需要在标准查询语句的 FROM 表名后面跟上 as of timestamp( 基于时间 ) 或 as of scn( 基于 scn) 即可。

• 语法:

Page 5: Oracle的闪回特性

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;

Page 6: Oracle的闪回特性

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;

Page 7: Oracle的闪回特性

Strictly confidential

1.2 、 VERSIONS BETWEEN 的应用

CREATED BY JUNSANSI.

• 功能:

  标准 Flashback Query 的功能是查询过去某个时间点时,对象中保存的记录信息。而 VERISONS BETWEEN 则是在当前时间与指定的过去某个时间点之间,对象做过的每一次修改。

Page 8: Oracle的闪回特性

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 。

Page 9: Oracle的闪回特性

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;

Page 10: Oracle的闪回特性

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 表空间中撤消数据失效。

Page 11: Oracle的闪回特性

Strictly confidential

2 、 Flashback Table

CREATED BY JUNSANSI.

• 某些时候我们要处理的表被反复修改过多次,希望能回复到之前的某个时间点,该需求借助 Flashback Query 可以实现,但实现方式复杂繁琐极易出错,借助 Flashback Table 则可轻松实现。

• 语法:

Page 12: Oracle的闪回特性

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;

Page 13: Oracle的闪回特性

Strictly confidential

2.2 、 Flashback Table 注意事项

CREATED BY JUNSANSI.

• 被恢复的表必须 enable row movement

• 注意 1.3 中提到的 DDL 的影响

• 注意 TRIGGERS 对其的影响,默认会 disable 相关 Triggers

• 索引会自动维护,但统计信息不会恢复到指定的时间点

• 不支持下列类型的表:聚簇表、物化视图、高级队列表、系统表、远程表、对象表、嵌套表以及表分区或子分区。

Page 14: Oracle的闪回特性

Strictly confidential

3 、 Flashback Drop

CREATED BY JUNSANSI.

• 如果我们把 Flashback Query 看做是恢复记录,则Flashback Drop就是用来恢复表 (由于记录是以表为载体存储,因此 Flashback Drop也可以看做是恢复记录,只不过相对于 Flashback Query 而言,其粒度更大 ) 。

• 语法:

Page 15: Oracle的闪回特性

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;

Page 16: Oracle的闪回特性

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命令清空的表数据。

Page 17: Oracle的闪回特性

Strictly confidential

Q&A

CREATED BY JUNSANSI.