闪回(2)-flashback table

来源:互联网 发布:解压软件免费下载 编辑:程序博客网 时间:2024/06/16 18:05

  闪回表就是将表中的数据回退到某个时间点,从而将误删除的数据恢复过来。在此过程中,数据库依然可用。


  闪回表利用undo表空间里记录的数据旧映像,如果闪回表所需要的undo数据由于保留的时间超过初始化参数undo_retention所执行的值,
从而导致undo数据被覆盖,就不能恢复到指定的时间点。undo_retention的作用是undo数据至少保留的时间,在这段时间内不能覆盖,这样

就可以保证能将表恢复到这个时间段内的某个时间点。可以指定undo表空间的retention gurantee选项来保证闪回的成功。


  闪回表的操纵会修改表里的数据,从而引起数据行的移动,比如某行数据当前处于A数据块,而在以前的时间点处于B数据块,因此在闪回
表之前必须启用数据行的移动特性。

  查看表是否启用row movement
SQL> select row_movement from user_tables where table_name='EMP';

SQL> alter table emp enable row movement;


  闪回表能够恢复表或设置表到过去某个特定的时间点而又不需要进行不完全恢复。使用闪回表时,所有的相关对象都能得到恢复。


  oracle11g flashback table特性

a.在线操作
b.恢复到指定时间点或scn的任何数据
c.自动恢复相关属性,如索引,触发器等
d.满足分布式的一致性
e.满足数据一致性,所有相关对象将自动一致
f.基于undo data,因此要闪回表到某个时间,必须确保与undo tablespace有关的参数设置合理
注意:对于表闪回,可以多次使用同一类型的闪回方式,往前闪回之后,也可以往后闪回。sys模式的表不能闪回。
SQL> flashback table emp to timestamp to_timestamp('2016-06-27 14:00:00','yyyy-mm-dd hh24:mi:ss');

  闪回表的特性

a.不能对系统表做闪回操作,SYS用户不支持闪回。
b.在执行ddl操作后不能闪回(drop/modify列,move表,drop分区,truncate table/partition)
c.闪回命令写入alert日志文件
d.闪回操作会产生redo和undo数据

  注意事项:

1.ddl操作会使undo表空间中的数据失效,对于执行过这些操作的表应用flashback query会触发ora-01466错误。
另外一些表结构修改语句也可能会导致undo重做记录无法应用的情况,比如增加了约束,而flashback query查询出的

undo已经不符合新建的约束,这时候只能暂时disable约束,恢复之后,再执行恢复。


2.flash query对于v$tables,x$tables等动态性能视图无效,对dba_*,all_*,user_$等数据字典有效。
3.基于undo的表恢复,flashback table实际上做的也是dml操作(会在表上加dml锁),因此还需要注意trigger的影响,
默认情况,flashback table to scn/timestamp会自动diable掉与操作表相关的trigger,如果要trigger在此继续发挥作用,

需要在flashback table后加上enable trigger字句。


else:关于undo_retention

初始化参数undo_retention,用来执行undo记录保存的最长时间,为动态参数。默认值为900(15min),undo_retention只是指定undo数据的
过期时间,并不是说数据一定会在undo保存15min,如果undo表空间被写满,就会覆盖,而不管这些数据是否过期,同样,只要Undodrop
表空间足够大,过期的undo数据依然会存在,并可随时被flashback.
在为undo表空间指定retention gurantee的时候,才可保证undo中的数据在过期前一定有效。也就是说在指定时间内,undo数据一定不会被覆盖。
SQL> alter tablespace undotbs1 retention guarantee/noguarantee;
0 0
原创粉丝点击