您的位置:首页 > 运维架构

利用闪回功能恢复删除(drop,delete)的数据和表及数据,update之后数据恢复

2017-10-01 14:52 477 查看
一、drop表

从 flashback table 里查询被删除的数据表

1、select * from recyclebin order by droptime desc

2、执行表的恢复
flashback table '需要恢复的表名' to before drop

二、delete表中数据

1、先从 flashback_transaction_query 视图里查询,视图提供了供查询用的表名称、事务提交时间、undo_sql等字段。

select * from flashback_transaction_query where table_name='需要恢复数据的表名(大写)';

2、查询删除的时间点

select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss') time,

       to_char(dbms_flashback.get_system_change_number) scn

  from dual;

3、记得删除点,你也可以这样试试查询,找出删除前的时间点

select * from '需要恢复数据的表名' as of timestamp to_timestamp('时间点', 'yyyy-mm-dd hh24:mi:ss');

4、进行数据恢复

   通过第二步找到数据丢失的时间点,恢复极为简单,语句为

flashback table '需要恢复数据的表名' to timestamp to_timestamp('数据丢失的前一时间点','yyyy-mm-dd hh24:mi:ss');

5、注意:在执行上述操作的时候,需要允许 oracle 修改分配给行的 rowid,这时候 oracle 需要给恢复的数据分配新的物理地址。

开启行移动:alter table table_name enable row movement;

6、其实找到数据丢失前的时间点后,恢复数据也可以将需要恢复的数据直接插入到目标表中

insert into '数据丢失的表' select * from t of timestamp to_timestamp('时间点', 'yyyy-mm-dd hh24:mi:ss') where .......;

恢复结束后也可以关闭行移动:
alter table table_name disable row movement;

三、update后恢复

1、在v$sqlarea 这视图里面找到你操作那条SQL的时间;

select r.FIRST_LOAD_TIME,r.* from v$sqlarea r order by r.FIRST_LOAD_TIME desc;

2、把数据恢复到一个新表

create table t_table_recove --新表

as

select * from t_table--你操作后要恢复的那张表 

as of timestamp to_timestamp('2010-06-02 11:36:53','yyyy-mm-dd hh24:mi:ss');

3、查看t_table_recove 的数据是否是update前的数据

如果是则导入原表,数据恢复成功
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: