SlideShare a Scribd company logo
1 of 17
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.

More Related Content

Similar to Oracle的闪回特性

Itpub电子杂志(第五期)
Itpub电子杂志(第五期)Itpub电子杂志(第五期)
Itpub电子杂志(第五期)yiditushe
 
Oracle数据库升级前必要的准备工作
Oracle数据库升级前必要的准备工作Oracle数据库升级前必要的准备工作
Oracle数据库升级前必要的准备工作maclean liu
 
5, OCP - oracle storage
5, OCP - oracle storage5, OCP - oracle storage
5, OCP - oracle storageted-xu
 
2, OCP - installing and creating a database
2, OCP - installing and creating a database2, OCP - installing and creating a database
2, OCP - installing and creating a databaseted-xu
 
资身Dba经验谈
资身Dba经验谈资身Dba经验谈
资身Dba经验谈yiditushe
 
1, OCP - architecture intro
1, OCP - architecture intro1, OCP - architecture intro
1, OCP - architecture introted-xu
 
分区表基础知识培训
分区表基础知识培训分区表基础知识培训
分区表基础知识培训maclean liu
 
诗檀软件 Oracle数据块损坏知识
诗檀软件 Oracle数据块损坏知识诗檀软件 Oracle数据块损坏知识
诗檀软件 Oracle数据块损坏知识maclean liu
 
Oracle试题Exam Adminv1.1
Oracle试题Exam Adminv1.1Oracle试题Exam Adminv1.1
Oracle试题Exam Adminv1.1Zianed Hou
 

Similar to Oracle的闪回特性 (9)

Itpub电子杂志(第五期)
Itpub电子杂志(第五期)Itpub电子杂志(第五期)
Itpub电子杂志(第五期)
 
Oracle数据库升级前必要的准备工作
Oracle数据库升级前必要的准备工作Oracle数据库升级前必要的准备工作
Oracle数据库升级前必要的准备工作
 
5, OCP - oracle storage
5, OCP - oracle storage5, OCP - oracle storage
5, OCP - oracle storage
 
2, OCP - installing and creating a database
2, OCP - installing and creating a database2, OCP - installing and creating a database
2, OCP - installing and creating a database
 
资身Dba经验谈
资身Dba经验谈资身Dba经验谈
资身Dba经验谈
 
1, OCP - architecture intro
1, OCP - architecture intro1, OCP - architecture intro
1, OCP - architecture intro
 
分区表基础知识培训
分区表基础知识培训分区表基础知识培训
分区表基础知识培训
 
诗檀软件 Oracle数据块损坏知识
诗檀软件 Oracle数据块损坏知识诗檀软件 Oracle数据块损坏知识
诗檀软件 Oracle数据块损坏知识
 
Oracle试题Exam Adminv1.1
Oracle试题Exam Adminv1.1Oracle试题Exam Adminv1.1
Oracle试题Exam Adminv1.1
 

Oracle的闪回特性

  • 2. Strictly confidential Flashback 简介 CREATED BY JUNSANSI.  Oracle 自 9i 版本开始,专门提供 Flashback 特性,该特性提供的一系列 功能,使得用户和 DBA 在数据库操作 中出现错误操作,或者逻辑错误导致数 据丢失时都可以快速回溯或恢复。  包括删除、修改表中记录,删除某表甚 至整个数据库快速恢复等
  • 3. Strictly confidential Flashback 几种类型 CREATED BY JUNSANSI. Oracle 10g 版本,闪回操作包括:  闪回查询( Flashback Query )   查询过去某个指定时间 /SCN 的数据, 9i 版本开始提供。  闪回表( Flashback Table )   使表返回到过去某一时间的状态,可以恢复表、取消对表进行的修改。  闪回删除( Flashback Drop )   可以将删除的表重新恢复。  闪回数据库( Flashback Database )   可以将整个数据库回退到过去某个时间点。
  • 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;
  • 10. 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 表空间中撤消数据失效。
  • 11. Strictly confidential 2 、 Flashback Table CREATED BY JUNSANSI. • 某些时候我们要处理的表被反复修改过多次,希望 能回复到之前的某个时间点,该需求借助 Flashback Query 可以实现,但实现方式复杂繁琐 极易出错,借助 Flashback Table 则可轻松实现。 • 语法:
  • 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;
  • 13. Strictly confidential 2.2 、 Flashback Table 注意事项 CREATED BY JUNSANSI. • 被恢复的表必须 enable row movement • 注意 1.3 中提到的 DDL 的影响 • 注意 TRIGGERS 对其的影响,默认会 disable 相关 Triggers • 索引会自动维护,但统计信息不会恢复到指定的时间点 • 不支持下列类型的表:聚簇表、物化视图、高级队列表、系 统表、远程表、对象表、嵌套表以及表分区或子分区。
  • 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 命令清空的 表数据。