阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Orcale利用闪回功能恢复数据

145次阅读
没有评论

共计 1228 个字符,预计需要花费 4 分钟才能阅读完成。

从 9i 开始,Oracle 提供了闪回(FLASHBACK)功能。使用 FLASHBACK TABLE 语句从撤消段中(undo segment)读取该表的过去映像,并利用 Oracle9i 中引入的回闪查询重建表行。UNDO_RETENTION 给出了闪回支持的最小时间。也就是说,FLASHBACK 最少可以支持 UNDO_RETENTION 给出的时间,如果系统比较闲,则可以闪回更长的时间。(当然,如果回滚表空间的空间分配不足,当系统处于忙时,有可能重用还没有达到 UNDO_RETENTION 时间限制的数据的空间)。使用闪回的一个前提是表不能进行 DDL 操作。不但不能对 DDL 操作进行回闪,而且,也无法闪回到 DDL 操作以前的数据了。

一.delete 误删

方法 1:如果表结构没有改变,直接闪回整个表,具体步骤:

– 首先需要表闪回权限,开启行移动功能

alter table 表名 enable row movement;

– 执行闪回恢复表数据到某个时间点

flashback table 表名 to timestamp to_timestamp(‘恢复的时间点 ’,’yyyy-mm-dd hh24:mi:ss’);

– 关闭行移动功能

alter table 表名 disable row movement;

方法 2:查询被删除数据,再执行 insert

insert into 表名 (select * from 表名 as of timestamp to_timestamp(‘ 恢复的时间点 ’,’yyyy-mm-dd hh24:mi:ss’));

二.drop 误删

原理:由于 oracle 在删除表时,没有直接清空表所占的块,oracle 把这些已删除的表的信息放到了一个虚拟容器“回收站”中,而只是对该表的数据块做了可以被覆写的标志,所以在块未被重新使用前还可以恢复。

1. 如果记得被删的表名,直接闪回

flashback table 原表名 to before drop;

2. 不记的表明,先从“回收站”找到呗删除的表,再执行恢复:

— 查询被删除的表,table_name 或者 object_name 就是删除后在回收站中被重新命名的表名

select table_name,dropped from user_tables;

select object_name,original_name,type,droptime from user_recyclebin;

— 执行恢复

flashback table “ 回收站中的表名 ” to before drop rename to 新表名;

三. 闪回整个数据库

alter database flashback on;

flashback database to scn SCNNO;

flashback database to timestamp to_timestamp(‘ 恢复的时间点 ’,’yyyy-mm-dd hh24:mi:ss’);

更多 Oracle 相关信息见 Oracle 专题页面 https://www.linuxidc.com/topicnews.aspx?tid=12

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-22发表,共计1228字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中